让AI不偷懒(5.0+6.0合订本):从“驯兽”到“斗兽”,我亲手给大模型戴上了镣铐

当AI审查合同每次结果都一样时,我反而慌了——这货是不是被我玩坏了?后来我让它跟自己对打,它却跳得更好了。


一、崩溃瞬间

几个月前,我搞了一套挺唬人的东西:20多个行业的合同知识库,加上DeepSeek R1,让AI自动审查合同。

理想很丰满:上传合同,一键出报告,法务老师摸鱼。

现实很骨感:同一份合同,上午审说“付款账期90天,风险高”,下午审说“账期较长,建议缩短”,第三次干脆把风险点漏了。

我盯着屏幕,脑子里只有一个念头:这货是不是在摸鱼?

于是,我开始了“管教AI”之旅。这篇文章就是我从“让它听话”到“让它跟自己对打”的完整记录。不是成功学,是踩坑实录。希望你笑一笑,顺便少踩几个坑。


二、5.0:我决定给AI戴上镣铐

2.1 问题出在哪?

大模型擅长“创作”和“泛化”,但合同审查需要“确定性”和“可复现”。让模型自由描述风险,就像让它写作文——每次写出来的文字自然会有差异。

那能不能既保留模型的语义理解能力,又把输出的波动控制住?

我想了一个馊主意:让模型做填空题,而不是作文题。

2.2 规则模板化

我把每条风险定义成一个“模板”。比如付款账期风险:

  • 规则ID:R-PAY-001
  • 描述模板:付款账期为{actual_days}天,超过{threshold}天上限
  • 建议模板:建议缩短至{threshold}天以内

AI的任务不再是“写风险描述”,而是判断“合同有没有触发这条规则”,如果有,就填两个参数:actual_daysevidence(原文证据)。

后端拿到参数,套进模板,渲染出最终文字。相同参数必然得到相同文本。

相当于让AI做选择题,而不是作文题。

我越想越觉得这主意绝了——既用了模型的理解力,又锁死了输出格式。

2.3 工具选型:一场噩梦(但结局是好的)

要准确“填空”,首先得让模型读懂合同里的关键词。分词工具是关键。

我先后尝试了:

  • jieba:轻量,但中英文混合词(如“SLA”“API”)会被切碎。“iPhone 14”能切成“iPhone”和“14”,气得我想骂人。
  • pkuseg:北大出品,听起来很牛。结果在我Python 3.13环境下死活装不上,报错No module named 'numpy'。我装了numpy,它又说别的。折腾了半天,放弃了。
  • LAC:百度出品,一样安装失败,提示No module named 'pkg_resources'。我查了一下,说是setuptools版本问题。升级、降级、重装……最后它还是不理我。
  • LTP:哈工大,功能强大,支持句法分析、语义角色标注,听起来就很高级。但模型文件大(几百MB),下载慢得像蜗牛。我挂了一晚上,下到一半断了。

折腾了两天,我差点崩溃。当时想:难道真要回到jieba+自定义词典凑合用?

就在我准备放弃治疗的时候,突然想起一个古老而有效的偏方:降级Python

我现在的环境是Python 3.13,太新了,很多库还没适配。于是我装了个Python 3.9,新建虚拟环境,再次尝试LTP。

py -3.9 -m venv ltp_env
ltp_env\Scripts\activate
pip install ltp

你猜怎么着?一把过! 模型下载虽然还是有点慢,但至少没断。

我激动得差点从椅子上跳起来。LTP跑起来之后,分词效果吊打jieba:

from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["本合同的SLA承诺为99.9%,使用钉钉旗舰版"])
print(seg[0])
# 输出:['本合同', '的', 'SLA', '承诺', '为', '99.9%', ',', '使用', '钉钉旗舰版']

看到“SLA”和“钉钉旗舰版”被完整保留,我差点哭出来。这才叫分词,之前那叫剁馅。

当然,LTP也不是完美的——它模型大、加载慢(首次要几秒),但合同审查又不是实时对战游戏,等几秒能换来准确率的大幅提升,值了。

教训:工具选型卡住的时候,别硬刚。换个环境,降个版本,可能就柳暗花明了。Python 3.9 yyds(至少目前是)。

2.4 Function Calling:模型终于听话了

我用DeepSeek R1(兼容OpenAI格式)的Function Calling能力,为每条规则定义了一个“函数”:

sla_function = {
    "name": "check_sla_availability",
    "description": "审查合同中SLA的可用性承诺是否过低",
    "parameters": {
        "type": "object",
        "properties": {
            "availability": {"type": "integer", "description": "可用性百分比,如99.9"},
            "evidence": {"type": "string", "description": "原文证据"}
        },
        "required": ["availability", "evidence"]
    }
}

调用时,固定temperature=0.6(DeepSeek官方推荐)、seed=42,强制JSON输出。

模型果然乖乖地返回了结构化参数。报告一致性立刻从70%跳到了95%以上

我激动得差点从椅子上跳起来。然后我冷静下来,开始测试:同一份合同,跑五次,结果一模一样。法务老师终于可以放心摸鱼了——不,是放心使用了。

2.5 但我焦虑了(这才是重点)

报告一致了。但我盯着那份报告,总觉得哪里不对。

以前AI虽然飘忽不定,但偶尔会蹦出一些让我拍大腿的洞察:“这个条款的表述,在XX地区的判例中曾被认为无效。”虽然不一定对,但至少它在思考

现在呢?它变成一个听话的“参数抽取器”:你给规则,它判断;你给模板,它填空。准确,稳定,但毫无惊喜。

我忍不住问自己:我到底是驯服了AI,还是把它变成了一个昂贵的if-else?

这种感觉,就像你为了让狗不拆家,给它戴上了电子项圈。家是不拆了,但狗也不跑了,整天趴着看你。

我陷入了一场深夜的自我辩论(凌晨三点,对着屏幕):

左边的我:“你搞什么?大模型最牛的就是推理能力,你把它当正则用?这跟用火箭驮着快递有什么区别?”

右边的我:“企业要的是确定性!一份合同审出三个结果,法务老师敢签吗?你赔啊?”

左边的我:“那也不能因噎废食啊!规则库永远补不完,总有模型能发现的未知风险。”

右边的我:“未知风险?未知风险法务老师自己都看不出来,凭什么要求AI看出来?先保证已知风险不漏吧。”

吵到天亮,我得出一个结论:两个都对,也都不全对。

问题不是“要不要束缚AI”,而是在哪里束缚,在哪里放开


三、6.0:让AI跟自己对打(我当裁判)

既然模型已经被我训练成了听话的参数抽取器,那能不能再让它“精分”一下——同时扮演甲方和乙方,自己跟自己吵架?

这不就是“红蓝对抗”吗?

3.1 核心思路:点对点博弈 + 综合博弈

我不要让8个角色一起吵架,那上下文会爆炸。我拆成两步:

第一步:点对点博弈

针对同一条款,让红队法务 vs 蓝队法务单独battle 3轮;红队财务 vs 蓝队财务单独battle 3轮。每场博弈的上下文很短,而且可以并行运行。

每场输出一个结构化摘要:核心观点、共识、分歧、置信度。

第二步:综合博弈

把所有角色的摘要喂给一个“仲裁者”(可以是中立AI,也可以是红蓝队长),让它基于这些浓缩的观点,给出最终裁决。

这样,既保留了多角色的深度,又控制了上下文长度。

3.2 差异化:不是不同规则,而是不同立场

你可能问:红蓝双方用同一套法律和行业知识库,怎么产生差异化?

答案是:同一本圣经,不同教派能读出完全不同的教义。

我只需要在提示词里注入立场倾向:

  • 红队法务:“你代表甲方(采购方),你的核心目标是延长付款周期、限制乙方责任、最大化保护甲方利益。”
  • 蓝队法务:“你代表乙方(供应商),你的核心目标是缩短账期、保留知识产权、保护现金流。”

模型自然会从相同法条中,找出对自己有利的解释。不需要两套规则库。

实验:我用一条付款条款测试——“甲方应在收到发票后90日内支付全部款项。”

红队法务输出:“90天账期符合行业惯例,甲方无现金流压力,风险低。”
蓝队法务输出:“90天账期过长,严重影响乙方现金流,依据《保障中小企业款项支付条例》,机关事业单位从中小企业采购货物、工程、服务,应当自交付之日起30日内支付款项。”

你看,同一段文字,两个模型(其实是一个模型,只是提示词不同)吵起来了。我成功让AI精分了。

3.3 一个具体的6.0场景链路:乙方反杀甲方

光说理论不够,我直接给你看一个预想中的完整对抗流程,场景就选你最熟悉的:甲方甩过来一份采购合同,乙方要用我的系统接招

第一步:甲方发合同,乙方跑5.0规则审查

甲方发来一份《办公软件采购合同》,洋洋洒洒30页。乙方把合同扔进我的系统。

5.0引擎先干活:

  • LTP分词 + 自定义词典,扫描全文。
  • 命中12条风险规则(付款账期90天、知识产权归属模糊、SLA仅99.0%……)。
  • 输出一份结构化风险报告,每条风险都标注了规则ID、证据原文、风险等级、修改建议。

重要:报告末尾必须注明:“本报告由AI辅助生成,可能存在盲点和误判,置信度低于70%的项目已标注,建议人工复核。不构成法律意见。”

第二步:乙方拿着报告,与甲方进行红蓝博弈

现在,乙方有了数据,有了参考依据。但他不能拿着报告就去砸甲方桌子——那太虎了。

系统启动6.0对抗模块,有策略地出牌:

  1. 只挑报告里风险等级为“高”的3条(付款账期、知识产权、SLA),低风险的先不理。
  2. 点对点博弈
    • 红队(甲方)法务 vs 蓝队(乙方)法务,围绕“知识产权归属”battle 3轮。
    • 同时,红队财务 vs 蓝队财务,围绕“付款账期”battle 3轮。
    • 这两场可以并行,不浪费时间。
  3. 动态结果生成
    每场博弈输出一个结构化摘要,记录双方的论点、反驳、共识、分歧。
    例如:

    蓝队法务:“依据《著作权法》第17条,委托开发软件著作权归受托人,除非合同明确约定。合同未明确,应归乙方。”
    红队法务:“但合同第8.2条写了‘所有交付物知识产权归甲方’,属于明确约定。”
    蓝队法务:“‘交付物’不包括乙方背景技术,背景技术清单见附件3……”

这些摘要不是绝对正确的结论,而是可探讨的谈判素材。乙方业务专家可以拿着它们去跟甲方讨论,但也要准备接受对方的合理反驳。

第三步:完善规则报告,输出完整版

博弈结束后,系统做两件事:

  1. 更新风险报告
    • 对于达成共识的风险(比如甲方同意缩短账期),风险等级降为“低”,建议修改为“已协商一致”。
    • 对于分歧严重的风险(比如知识产权归属),保持“高”,并附上双方论点摘要,供专家最终拍板。
  2. 生成“谈判策略建议”
    • 哪些条款可以妥协(对方论点有道理)
    • 哪些条款必须坚守(对方论点无依据)
    • 哪些条款需要引入第三方仲裁(僵局)

最终,乙方业务专家拿到的不是一份冷冰冰的“绝对正确”报告,而是一份带有攻防历史、置信度标注、人工复核提醒的决策支持材料。他可以带着它上谈判桌,但心里清楚:AI只是参谋,将军还是他自己。

3.4 阈值:我不想让对抗变成无底洞

如果每条条款都搞3轮对抗,一份合同几十条条款,岂不是要跑几个小时?

我试过用“风险等级”来决定对抗深度——高风险条款7轮,中风险5轮,低风险3轮。

但很快发现:我的规则匹配本来就严,能命中“高风险”的条款极少。 大部分条款只能混个3轮,对抗形同虚设。

于是,我换了个思路:不用风险等级,改用“时间预算”

设定一个最大响应时间,比如5秒。系统在时间预算内,优先对抗核心条款(付款、知识产权、违约责任),时间花完了就停,没花完就继续。

这样,既保证了实时性,又不会因为规则命中率低而让对抗“饿死”。

当然,如果用户愿意等(比如夜间批量处理),可以把时间预算调到30秒,甚至5分钟。 这不是技术问题,是产品策略问题。


四、谦逊:AI的底线,也是我的底线

在做所有这些设计时,我时刻提醒自己一条原则:不完美公理

系统必然存在盲点、误判和未知未知。没有完美的系统,只有不断进化的系统。

所以,我在每一份报告里都强制加上:

  • 置信度标注:所有判断必须标注置信度(0-100%),低于70%强制人工复核。
  • 免责声明:不构成法律意见,请结合实际情况决策。
  • 错题本机制:每一次误判都记录在案,定期转化为规则补丁。

谦逊不是美德,是生存底线。 我见过太多AI项目,Demo时牛逼哄哄,一上生产就翻车。为什么?因为过度自信。

比如,你给甲方展示“我们的AI能自动审查合同,准确率99%”,甲方信了,拿一份有特殊地域要求的合同去跑,AI按通用规则判断,漏掉了地方法规的特殊要求,出了事谁负责?

所以我在报告里强制加了一句:“本规则基于公开法规和行业惯例,不构成法律意见;若合同涉及特殊地域或行业惯例,建议人工复核。”

这句话看起来啰嗦,但关键时刻能救命。


五、现在的我,不再焦虑

回头看5.0和6.0:

  • 5.0:确定性执行(已验证可行,报告一致了,但有点无聊)
  • 6.0:多Agent对抗(预想中,链路已清晰,让AI自己跟自己吵架)

我发现,我其实不是在“束缚AI”,而是在为AI搭建一个能安全奔跑的场地

没有场地,AI就是一匹野马,不知道跑哪去;有了场地,它可以在边界内尽情驰骋,而且不会撞墙。

限制,是为了克制;克制,是为了更持久的绽放。

而且,我时刻提醒自己:系统必然存在盲点,谦逊不是美德,是生存底线。


六、接下来,我要继续填4.0的坑了

5.0的确定性执行已经跑通,6.0的对抗推演也有思路了。但4.0还没完——还有十几个行业的知识库等着我检查占位符。目前已经完成了7个行业,剩下的还在排队。

这活儿不酷,甚至有点枯燥。

但我知道,没有这些地基,5.0和6.0都是空中楼阁。

所以,我回去继续当“质检员”了。

如果你也在做类似的事,欢迎来Gitee给我点个star,或者提个issue。我们一起把AI从“玩具”变成“工具”。

项目地址:https://gitee.com/laopiao93/knowledge


作者:一个在4.0里挣扎、在5.0里偷笑、在6.0里做梦的码农

2026年3月

(PS:如果这篇文章里的某些预想以后被打脸了……那就当是技术发展的见证吧。😂)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐