把 1.81 亿条裁判文书降为“假设”:为 AI 建立五级证据体系

作者:袖梨 2026-09-19

用 AI 辅助产品调研时,最危险的往往不是数字完全错误,而是真实数据被顺手推导成未经验证的商业结论。要让报告真正服务于需求排序,就需要区分实测、官方数据、付费信号与主观假设,并为低等级证据设置可执行、可检查的排期边界。

1.81 亿条裁判文书,被我降级成了"假设":我给 AI 定了 5 级证据

1.81 亿条裁判文书 + 607 万条法规——这是我在一份产品调研报告里,**亲手从"核心壁垒"降级成"假设"**的数字。

原因很简单:它属于 E5 级证据。数字是真的,但没有任何人因此付过一分钱。

给 AI 定下 5 级证据之后,它第一次在 18 条需求里,把 3 条纯假设挡在了前三期排期之外。


一、AI 编数据,往往不是因为它在编,而是因为我没定义"什么算证据"

我让 AI 写产品调研报告,它给出的每一句话看着都有来源:

"该产品覆盖 1.81 亿裁判文书、607 万部法规,构成数据壁垒。"

前半句是对方官网自己写的,属实。后半句——"构成壁垒"——是它自己推的

问题出在我的提问方式:我只要求"标注来源",没要求"标注来源的可信强度"。于是"官方自述""第三方转述""我们自己实测""我猜的"被混在同一句话里,输出看起来一样扎实。

我做的第一件事,是把"来源"这个词拆成五档,并且规定:每一档能干什么、不能干什么

等级来源可信度能拿来做什么
E1 实测对目标站点/系统的实机拆解(接口、额度、价目、数据池)判断"现有资产能不能承接这个需求"
E2 官方最高法、人社部、司法部、网信办等公开数据判断需求的规模与真实性
E3 市场付费同类产品的真实收入与定价中高判断"有人为此付过钱"——比问卷硬
E4 团队选择团队自己已经做的功能/场景页说明"有人判断过这是需求",但不区分高频与高价值
E5 假设推理得出、无任何用户验证必须验证后才可投入开发

配一条闸门规则:E5 级不得直接排期。

这句话是整个体系里唯一"有牙齿"的部分。没有它,五级证据只是一张好看的分类表。


二、闸门生效的真实样子:不是删除,是降级

一个具体案例。原方案里有个功能叫"企业风险查询",给了个单次付费商品:¥29/次

按证据分级拆开看:

  • E1:功能确实存在(实测有页面);
  • E3:有间接证据——第三方查询工具确实在收费;
  • 但没有直接付费证据:没有任何一条数据说明"这批用户会为这个查询付 ¥29"。

于是它被降级,不是被删掉:从"单次商品"改为"月报订阅权益"包在订阅里。需求留下了,但它不能再单独占一个付费入口——因为支撑它定价的那条证据根本不存在。

而真正被提拔的是另一条:"欠款要不回来"。它的证据是 E2(2025 年首次执行案件 1,000 万件、执行到位 2.16 万亿元)+ E3(下游律师函与服务已形成成熟价格带)+ E4(团队已建"民间借代/债务催收"场景页)——三级证据叠加,因此从原方案的"迭代 4"直接提到 M1。

同一套方法,把一条需求从 M1 之后拽到了最前面,又把另一条从付费商品降级成订阅权益。 分级不是为了打分,是为了决定顺序。


三、我用一段脚本把这份文档自己"普查"了一遍

光有表不够,得能查。下面这段脚本我真实跑过,它做三件事:把需求表解析出来 → 按编号去重 → 找出"只有 E5 支撑"的条目。

# evidence_census.py —— 需求证据普查
import re, html, collections, pathlib

P = '需求对齐说明源文件_v1.1.html'
s = pathlib.Path(P).read_text(encoding='utf-8')
rows = re.findall(r'<tr>(.*?)</tr>', s, re.S)

uniq = {}
for r in rows:
    c = re.findall(r'<t[dh][^>]*>(.*?)</t[dh]>', r, re.S)
    if len(c) < 4:
        continue
    t = [html.unescape(re.sub(r'<[^>]+>', '', x)).strip() for x in c]
    if re.fullmatch(r'[BCL]d+', t[0]) and re.search(r'E[1-5]', t[3]):
        uniq[t[0]] = (t[3], t[-1])        # 同一编号取带证据标记的那行

hard = {k: v for k, v in uniq.items() if set(re.findall(r'E[1-5]', v[0])) - {'E5'}}
pure = {k: v for k, v in uniq.items() if set(re.findall(r'E[1-5]', v[0])) == {'E5'}}

print(f'去重后需求条目:{len(uniq)} 条')
print(f'E1–E4 硬证据:{len(hard)} 条')
print(f'纯 E5 假设:{len(pure)} 条 -> {sorted(pure)}')
print('全文档证据标记:', collections.Counter(re.findall(r'E[1-5]', s)))

真实输出

文件 需求对齐说明源文件_v1.1.html:28567 字符 / 467 行
去重后需求条目:18 条
E1–E4 硬证据:15 条
纯 E5 假设:3 条 -> ['B10', 'B4', 'B5']
全文档证据标记: Counter({'E4': 12, 'E3': 10, 'E5': 7, 'E2': 6, 'E1': 5})

再和排期表对一次账(同一条脚本加几行):

M1 -> B1(欠款要不回来)
M2 -> B2(合同)
M3 -> B3(用工风险)+ C 端流量承接
M4 -> B4(期限提醒)+ B5(批量)
M5 -> B10(找律师)+ L1(案源)
M1–M3 服务需求:['B1', 'B2', 'B3']
纯 E5 ∩ 前三期 = 空集

3 条纯假设全部落在 M4/M5,前三期一条都没进来。 这是这条规则唯一值得信的地方——它不是我自己读出来的感觉,是脚本算出来的交集。

顺手还有个不用写代码的版本,检查任意文档的证据标签分布:

grep -o 'E[1-5]' 需求对齐说明源文件_v1.1.html | sort | uniq -c | sort -k2
#       5 E1
#       6 E2
#      10 E3
#      12 E4
#       7 E5

四、三个我没想到的结果

反直觉 1:真正会漏进来的,是 E5 的"子能力",不是 E5 的条目。

M1 里有一条内容叫"到期提醒(站内 + 订阅消息)",而"期限与提醒"这条需求挂的正是 B4——纯 E5。它凭什么进 M1?文档里给的理由是:提醒同时服务 B1(证据最硬),而且它是"让用户回来"的唯一机制。

闸门查的是编号,漏的却是子能力。所以补了一条:既然放进来,就必须给它配一个验证指标。M1 的验证项写的是"① 律师函付费转化 ② 发函后是否有人回来问下一步 ③ 提醒是否被打开"——第③条就是这条 E5 能力的"验尸口"。

规则修正:闸门要下沉到功能粒度,且每个"破例"必须自带一个验证指标。

反直觉 2:这套规则拦得最多的是我自己。

"1.81 亿裁判文书 + 607 万法规"这句话,错不在数字,错在我的推论。定稿时它被改成"自述值、未获第三方验证;不构成壁垒",卖点也从"数据规模"换成了"每条结论可点回原文"。

为什么必须换?因为同期调研里躺着反例:IBM ROSS 因训练数据版权诉讼,2020 年 12 月起停止接客、2021 年 1 月全面停运;vLex 触达 100 万律师靠的是 40+ 州律协会员权益,不是数据量;Robin AI 用"AI + 自有人工律师"的重模式,2025 年裁员约 1/3,独立公司终止。数据规模从来不是护城河,来源链条和交付渠道才是。

同一个表格里还有一批同类项,全部标成自述值:案源池"15 条在招、今日新增 5 条、自述匹配成功率 87%"、律师库"81.6 万+"。它们不是假的,是没被验证过的——而没被验证的数字,在决策里的权重应该和零差不多。

反直觉 3:文档自己报的总数,也会是一条 E5。

这份文档的执行摘要写着"列出 24 条具体需求"。我按编号数,只有 18 条(B1–B10、C1–C5、L1–L3)。

我没有改它,而是把它留在记录里——因为"总数对不上"恰恰证明了一件事:任何一个不能被逐条还原的数字,它自己就处在最低证据等级。 这正是这套规则存在的原因。

顺带一个残酷的数据:斯坦福 HAI 2024 的评测里,专用法律 AI 的幻觉率是 17%–33%,通用模型是 58%–82%。别指望模型自己会闭嘴,得靠规则。


五、可直接抄走的清单

  1. 先定义证据等级,再要求 AI 标注。 只说"标来源",AI 会把自述、转述、实测、猜测写成同一句话。
  2. 五级就够: E1 实测 / E2 官方 / E3 市场付费 / E4 团队选择 / E5 假设。等级越多越没人用。
  3. E3 是最被低估的一档。 "有人为它付过钱"比一百份问卷都硬;反过来,没有 E3 的需求,它的定价一定是你编的。
  4. 闸门要写成一句可执行的话(我的是"E5 不得直接排期"),并且落到编号上能被脚本算出来——不然它只是一段好听的价值观。
  5. 闸门要下沉到功能粒度:E5 的条目会被挡住,E5 的子能力会从"它同时服务另一条硬需求"的缝里钻进来。破例可以,但破例必须配验证指标。
  6. 给每个迭代写停止条件,比写开发计划重要。 我写的是:M1 上线 4 周律师函付费转化 <1%(100 个有效访次不足 1 单)就停后续迭代;M2 合同体检 <1%;M4 订阅 <0.3%。
  7. 把"总数自检"放进流程:汇总数字和你逐条数出来的数字必须一致。不一致的那个,就是一条 E5。

本文数字全部来自本地交付文档与脚本实测输出(2026-09-19 复核),调研中的第三方案例(IBM ROSS、vLex、Robin AI、EvenUp、斯坦福 HAI 等)为调研报告内引用,原始出处以报告附录为准。

相关文章

精彩推荐