2026法务AI工具:值得看的条款,39%压在合同后半本
法务AI的演示用的是保密协议的前三页,看着很漂亮。我把510份真实商业合同里的每一条标注条款按字符位置放回原文,看这个演示到底读到了哪里:6702条条款里有39.4%落在合同后半本,27%的合同把管辖法律条款放在最后十分之一。只读前20页的工具,整体漏14%的条款,管辖法律漏23%。
法务AI的演示用的是保密协议的前三页:当事人、期限、一份漂亮的摘要。决定谁掏钱的那些条款,在二十页之后。
这个距离我没有靠辩论,而是在510份真实合同上量出来的。条款落在文件的哪个位置,是买家在付钱之前就能查的一件事实,但几乎没人查。
量的是什么
语料是CUAD:510份在美国SEC备案的商业合同,41类条款,20910组问答,其中6702条带有真实标注。全文2680万字符,约670万token。按每页3000字符折算(11磅字、一英寸页边距的保守估计),把每条标注按字符位置放回它自己的合同,再除以合同长度。下面的数全部在2026年11月7日算出,文末脚本可以在任何导出文件上复现。
典型文件并不短:中位数11页(8300token),九十分位41页(30700token),最长113页。一半的语料比大多数工具的单文件上限要长。
条款都住在哪
相对位置中位数,以及落在合同后半本的占比:
- 当事人 Parties —— 0.01,4%
- 签署日期 Agreement Date —— 0.01,10%
- 生效日期 Effective Date —— 0.01,13%
- 无因解约 Termination For Convenience —— 0.57,60%
- 保险 Insurance —— 0.61,65%
- 责任上限 Cap On Liability —— 0.67,77%
- 控制权变更 Change Of Control —— 0.68,69%
- 无上限责任 Uncapped Liability —— 0.69,83%
- 禁止转让 Anti-Assignment —— 0.79,88%
- 管辖法律 Governing Law —— 0.84,93%
6702条标注里39.4%落在后半本,中位数在全文36%的位置。四分位占比是41.9%、18.7%、20.8%、18.6%,过了第一个四分之一之后基本是平的。
有一个极端值值得单独写一行:437份带管辖法律条款的合同里,119份(27%)把这一条放在最后十分之一。这恰好是AI摘要最容易错的一条,因为从合同开头写出来的摘要,没有东西可以抄。
这个顺序是起草习惯
商业合同的装订顺序基本跟着谈判顺序走:谁是当事人、交易是什么、定义、义务、法务争得最凶的风险分配、然后是样板条款。管辖法律、通知、转让、责任上限是最后起草的,也放在最后。只读前N页的流水线,读的是点名的部分,停下的位置正好在分钱之前。
页数上限就是产品本身
只读前10页、20页、40页时,标注的覆盖率:
- 全部条款 —— 70%、86%、95%
- 管辖法律 —— 48%、77%、92%
- 责任上限 —— 45%、75%、92%
- 无上限责任 —— 33%、70%、91%
- 保险 —— 42%、68%、89%
- 续约条款 —— 78%、91%、98%
10页上限能留住70%的条款,丢掉的30%不是随机样本,是文件后半本,责任和转让的语言就在那里,无上限责任的覆盖率掉到三分之一。标注的位置中位数在第4.3页,九十分位在第25.7页,所以长文件在这份语料里是常态,不是例外。
一份文件比汇总数更能说明幅度。语料里有一份27.3页的战略合作协议,带其中八类条款,八条里有七条在第19页之后,被引用页数的中位数是20.8。只读前半本的工具,八条里能返回一条。
关键词搜索救不了
在信任任何厂商之前我先跑了自己的基线:十个朴素正则,跑遍510份合同,按合同判分,也就是这条模式有没有在这份确实含该条款的文件里命中。召回率与准确率:
- 管辖法律 —— 82% / 98%
- 保险 —— 100% / 67%
- 排他性 —— 98% / 44%
- 禁止转让 —— 51% / 98%
- 责任上限 —— 53% / 95%
- 控制权变更 —— 49% / 80%
- 无因解约 —— 48% / 51%
- 竞业限制 —— 41% / 72%
- 最惠国待遇 —— 18% / 83%
- 无上限责任 —— 3% / 12%
贵的条款正好是grep挂掉的那些。责任上限通常写成「任何情况下,任一方的累计责任不超过」,句子里既没有cap,也没有按顺序出现的limitation of liability;无上限责任把自己定义成「没有上限」,所以搜「上限」会搜到它的反面。这就是「搜PDF再粘进对话框」这套流程的坑:补救措施的词库和风险的词库基本不重叠。真决定一次违约扛不扛得住的那一条,召回3%,那不叫工具,那叫错觉。
切块是较小的问题
上下文窗口背了太多锅。算术给的是另一个答案。条款长度中位数194字符,整份语料里没有一条比一页更长;跨3000字符边界的条款只占8.5%,8000字符边界3.0%,32000字符边界0.4%。带一点重叠的切块完全扛得住。覆盖率死在页数上限和「先摘要」的流程上,这两个都是产品决定,跟模型能力没关系。
另一个该记住的数:这批合同的条款类型中位数13类,九十分位22类,最多32类。固定查五项风险的工具,在中等合同上连一半都没覆盖,模型再好也一样。
我现在用的验收法
六道检查,用厂商自己的试用版,每道一下午:
- 每条结论都要给条款名、页码、原文引用。然后翻到那一页把引用读一遍。打不开的输出,就是一段没有证据价值的文字。
- 喂一份管辖法律在最后五页的合同。摘要里要是压根没提,说明工具有页数窗口,窗口就是产品。
- 问一个合同里根本没有的条款类型。「未找到」必须是可给的答案,永远返回五条结论的工具,是在迎合你的问题。
- 同一份合同,PDF一次,纯文本一次。页码差一页以内才算对上,差十页说明它数的是字符不是页。
- 把责任上限拆在分页处,看它有没有把句子两半都引出来。
- 量它的引用落在哪。落在后半本的比例应该接近语料的39%,接近零说明它只读开头然后写摘要。
脚本
Python 3.8以上,只用标准库。把合同导成文本,把工具返回的引用做成两列CSV,表头clause,quote,然后运行 python3 coverage_check.py contract.txt citations.csv。
import csv, re, sys, statistics as st
PAGE = 3000
def locate(text, quote):
q = re.sub(r"\s+", " ", quote.strip())
if not q:
return -1
rx = re.compile(r"\s+".join(re.escape(p) for p in q.split(" ")), re.I)
m = rx.search(text)
return m.start() if m else -1
text = open(sys.argv[1], encoding="utf-8", errors="ignore").read()
rows = list(csv.DictReader(open(sys.argv[2], encoding="utf-8-sig")))
hit, miss, pos = [], [], []
print("%-30s %5s %6s %s" % ("clause", "page", "pos", "found"))
for r in rows:
i = locate(text, r.get("quote", ""))
if i < 0:
miss.append(r["clause"])
print("%-30s %5s %6s NO - quote not in contract" % (r["clause"][:30], "-", "-"))
continue
pg, rel = i / PAGE + 1, i / len(text)
hit.append(pg); pos.append(rel)
print("%-30s %5.1f %5.0f%% yes" % (r["clause"][:30], pg, rel * 100))
n = len(rows)
print("\ncontract: %.1f pages (%d chars) | citations: %d | verified: %d (%.0f%%)"
% (len(text) / PAGE, len(text), n, len(hit), 100 * len(hit) / n))
if hit:
print("median cited page: %.1f | deepest: %.1f | citations past half: %.0f%%"
% (st.median(hit), max(hit), 100 * sum(1 for p in pos if p >= .5) / len(pos)))
print("front-half-only tool would have shown %d of %d verified clauses"
% (sum(1 for p in pos if p < .5), len(pos)))
if miss:
print("UNVERIFIED: %s" % ", ".join(miss))
拿语料里那份27.3页的战略合作协议,八条引用取自标注原文,输出是这样:
clause page pos found Governing Law 27.9 98% yes Cap On Liability 19.7 68% yes Anti-Assignment 26.6 94% yes Change Of Control 21.0 73% yes Insurance 19.5 68% yes Termination For Convenience 21.2 74% yes Expiration Date 20.6 72% yes Parties 1.1 1% yes contract: 27.3 pages (81926 chars) | citations: 8 | verified: 8 (100%) median cited page: 20.8 | deepest: 27.9 | citations past half: 88% front-half-only tool would have shown 1 of 8 verified clauses
found 那一列和页码一样重要。原文里找不到的引用,是把改写当证据交上来,跑一遍脚本就能抓住。
这些数说明不了什么
位置不等于正确。工具可以引对页、读错条,上面六道检查都抓不住「引用正确、结论错误」这种情况。CUAD是510份英文美国商业合同,来自SEC备案:没有诉讼文书,没有大陆法辖区,没有租赁和劳动合同。每页3000字符是折算,扫描件和双栏PDF的换算不一样。语料是公开的,这里的每个数都能自己重跑,不必信我。
如果真正的问题是先试哪几家,免费选项的对比在这篇:八款免费开源的法务AI工具,研究与审查用;带页码级输出的合同审查清单在这篇:五款免费合同审查工具。
相关文章
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。