一个合同审查项目的阶段性探索(三)
让AI不偷懒7.08.0合订本从“路书”到“夏尔巴”我亲手给大模型装上了GPS当报告终于“说人话”之后我发现最大的坑不是AI而是20个国标门类——以及客户对“其他”这个选项的蜜汁偏爱。于是我决定不再只给AI一本路书而是给它配了个夏尔巴。前情提要第一篇《智能合同治理与行业知识库体系》——画饼搭架子。第二篇《一个合同审查项目的阶段性探索》——踩坑4.0填坑实录。第三篇《一个合同审查项目的阶段性探索二——从驯兽到斗兽》前前后后忙了一个月AI终于能稳定输出报告还会自己跟自己吵架了。我信心满满地把报告甩给业务人员结果对方看了三分钟问“所以……我到底该不该签”于是有了第四篇——从路书到夏尔巴。一、7.0的顿悟报告要说人话第三篇结束时我的报告已经能做到全条款扫描20个条款一个不落红蓝对抗甲方怎么攻乙方怎么防结果可复现同一份合同跑五次结果一样但业务人员拿到报告还是懵。14个条款11个中性3个不利。他问我“那我是签还是不签”我意识到我造的不是路书是学术论文生成器。于是7.0我做了三件事砍掉中性条款——折叠只在底部留一行小字。加总体评分——风险可控 / 需协商 / 不建议签署。按角色拆行动清单——销售看销售的法务看法务的。业务人员终于能一眼看懂“哦这份合同有3个不利条款先谈合同标的再谈付款方式。”但很快新的问题来了看懂之后下一步怎么办报告里只写了“建议明确买断范围”没说怎么跟对方谈、话术是什么、如果对方不同意我该拿什么换。他们还是得自己去问法务或者自己编话术。7.0让报告“看得懂”但还没让报告“用得上”。二、7.0的补丁给AI装上“话术生成器”我的核心诉求从来不是“让报告好看”而是稳定、可集成、可拓展。系统报告v5.0已经能做到全条款扫描、结果可复现、输出结构化。但它的修改建议太模板化比如“建议明确验收标准”——这不是废话吗我需要的是对于每一个不利条款自动生成具体修改措辞和谈判话术而且不能破坏原有的稳定性和结构化。于是我在7.0的基础上加了一个“策略增强模块”输入条款原文、风险类型、行业代码、我方角色。输出一条具体的修改建议文本 一句谈判话术温和版/强硬版/交换版。2.1 混合模式的诞生我试过两种路子路子一纯规则模板库为高频风险预置话术。比如“付款账期过长”对应-risk_id:R-PAY-001suggestion:建议将付款账期缩短至30天以内negotiation_soft:我们建议把账期调到30天这样双方现金流都更健康。negotiation_hard:90天账期严重超出我司承受范围如无法调整我们将无法推进本项目。negotiation_trade:如果账期保持90天可否将预付款比例从20%提高到40%优点稳定、可复现。缺点穷举不完。遇到“验收后180天支付尾款”这种变异规则就跪了。路子二纯大模型生成调用DeepSeek R1给一个Few-shot示例让它根据条款原文动态生成。优点灵活能覆盖任何奇葩条款。缺点不稳定——同一条款两次生成的话术可能不一样甚至某次抽风输出“建议对方直接把钱打过来”。最后我选了混合模式先用规则模板库匹配我整理了50条高频风险模板覆盖80%的常见条款。匹配不到的再调用大模型并且把大模型的输出也固定下来temperature0.2不是0否则模型会复读seed42强制输出JSON。同时提示词里要求“如果无法生成返回空字符串”。在报告里标注“本话术由AI生成仅供参考”。这样80%的场景稳定20%的场景灵活且不会因为模型抽风而污染报告。2.2 踩坑大模型不听话怎么办有一次模型输出了一长段“好的根据您的要求我为您生成以下修改建议……”然后才是JSON。我的解析器直接崩溃。解决方案在后端加一层“JSON提取器”用正则从模型输出中挖出{...}实在挖不到就降级为规则模板的默认话术。同时在提示词里用XML标签包裹输出要求比如json.../json提高解析成功率。还有一次模型生成的交换话术是“如果贵司不同意修改账期我方将提请仲裁。”——这哪是话术这是威胁。我赶紧在提示词里加了禁止条款“不得包含‘仲裁’‘诉讼’‘终止合作’等威胁性词语。”三、8.0的野望让AI懂行业7.0搞完我以为可以摸鱼了。但客户甩来一份合同行业代码写着“L7219-其他组织管理服务”公司名字叫“某水产集团”。我懵了。水产公司你告诉我它是“其他组织管理服务”客户摊手“我们一直这么用的。”那一刻我意识到行业代码是乱的知识库是死的我的AI再牛也不知道“水产公司”该用水产行业的知识来审合同。这就是8.0要解决的问题让AI能理解“行业”的真实含义而不是死磕国标代码。如果说7.0是给AI配了一本路书那8.0就是给它配了个夏尔巴——一套覆盖20个国标门类的实时导航系统能识别风险、规划路线、保障安全。3.1 第一板斧给国标分类建“户口本”GB/T 4754一共有20个门类A到T。我以前只在gbt4754_index/里放了门类、大类的元数据小类下面要么空着要么随便放了个metadata.yaml。我花了几天时间给所有门类补了最简元数据代码、名称、上级分类然后对已经完成4.0修复的门类手工补充了scope_includes和scope_excludes。比如“A-农、林、牧、渔业”明确写“包括种植、林业、畜牧、渔业不包括农产品加工C门类”。这样当AI看到一份合同里出现“稻谷种植”它能知道这个行业的边界在哪不会把“加工大米”的风险也扯进来。3.2 第二板斧每个行业配一个“专家角色”以前我的红蓝对抗只有通用角色法务、财务、技术。但“农业法务”和“软件法务”看问题的角度完全不同。我在每个端点行业目录下加了一个agent_roles.yaml定义该行业特有的角色、关注关键词、风险权重、同义词。例如# industries/agriculture/agent_roles.yamlroles:-name:农业法务focus_keywords:[农残,土壤污染,自然灾害,农业保险]risk_weights:农残超标:0.9自然灾害:0.8synonyms:-term:倒春寒equals:[晚霜冻,寒潮]踩坑有一次我写“蔬菜种植”的同义词把“大棚”等同于“温室”。结果业务人员反馈“大棚和温室在保险理赔里不是一回事别瞎关联。”于是我加了一条规则同义词映射必须经过人工复核不能全自动。3.3 第三板斧跨行业关联cross_reference/光有单个行业的知识还不够。农业的风险往往跟农业保险、冷链物流、批发零售环环相扣。我建了一个cross_reference/目录按源行业分文件记录该行业发起的风险关联、术语映射、产业上下游。# cross_reference/risk_links/agriculture.yamlrisks:-risk_id:WEATHER_FROSTlinks:-target_industry:agricultural_insurancetarget_risk_id:CLAIM_DELAYrelation:导致weight:0.7evidence:倒春寒后农户常因保险理赔不及时引发纠纷权重0.7怎么来的我拍脑袋的。后来发现不行改为半自动先用大模型给候选关联打分0-1然后人工审核高分的0.8中分的0.5-0.8丢进待确认池低分的直接丢弃。权重最终取人工确认后的值。有没有出现过错误关联有。有一次模型把“服务器宕机”和“停电”关联到“农业干旱”理由是“都是不可抗力”。我直接删了这条并加了一个规则不同门类A类农业和I类软件之间的关联必须经过人工审核。3.4 他山之石知识图谱在其他行业怎么玩光埋头造轮子不行我也去看了别人是怎么用知识图谱的。不查不知道一查吓一跳——原来头部玩家早就在这么干了。案例一京东工业“太璞”系统他们建了一个工业品知识图谱知道“螺丝”和“螺母”是匹配的“电机”和“变频器”是上下游。当企业采购“电机”时系统自动推荐“变频器”的采购合同模板还会提示“注意你上次买的电机和这次选的变频器不兼容。”——这不就是跨行业关联吗只不过人家是工业品我是合同风险。案例二探迹科技他们构建了全球3亿家企业的全量知识图谱能通过股权、招投标、联系方式等13种关系发现“A公司和B公司表面上没关系但共用一个财务IP疑似围标。”——这不就是客户数据翻译器的进阶版吗只不过人家查围标我查行业代码。案例三中国电信翼支付“三库”体系他们建了“规范库要素库风险库”整合10亿条工商司法数据用知识图谱覆盖股权、担保、关联交易。当一家企业申请贷款时系统能自动发现“这家公司的母公司正在被强制执行建议拒贷。”——这不就是跨行业风险传导吗只不过人家是金融风控我是合同审查。这些案例给我的启发方向对了行业头部都在用“知识图谱风险”的组合拳说明我没跑偏。但他们都停在“静态发现”京东工业能告诉你“螺丝和螺母匹配”但不会告诉你“如果螺母断货你的生产线停工会导致合同违约建议在采购合同里加替代条款”。探迹能告诉你“A和B有关联”但不会告诉你“如果A违约B会受到什么影响你该怎么在合同里预防”。这就是我的机会他们做“发现”我做“推演”。他们给你看“关系图”我给你出“行动清单”。所以别怕别人已经做了。他们做的是“显微镜”我做的是“GPS”——也就是给大模型装上的那个导航系统而夏尔巴就是那个能读懂GPS并带你安全登顶的人。3.5 第四板斧客户数据的“翻译器”客户给的行业代码经常和实际业务对不上比如水产公司挂着L7219。我不能逼客户改就在自己系统里建了一层“客户代码 → 内部标准代码”的映射规则customer_overrides:-source_code:L7219condition:enterprise_name contains 水产target_code:F5124target_industry:water_product_wholesale潜在风险与应对这种“关键词翻译”虽然好用但也有风险。比如万一有家正经的人力资源公司名字里恰好带“水产”二字虽然概率极低就会被误转。虽然我目前还没遇到这种情况但为了以防万一我设计了一个“人工复核队列”所有被翻译器转换过的合同系统自动标记为“待确认”定期批量人工抽检。如果发现误伤就把那条规则加入白名单或黑名单。四、8.0之后的模样现在我的系统处理一份“软件采购合同”的流程是这样的识别行业根据合同文本和客户信息确定真实行业如果客户代码可疑自动纠正。加载行业知识从industries/software_it/加载7类文件从agent_roles.yaml加载“软件法务”“软件财务”角色从cross_reference/加载跨行业关联比如“知识产权风险”关联到“开源许可证合规”。全条款扫描规则引擎同义词库快速筛选候选风险。红蓝对抗用行业特有角色进行点对点博弈。生成报告包含总体评分、不利条款、具体修改建议、谈判话术、行动清单。策略增强对高风险条款调用大模型生成定制话术但保留规则模板的稳定兜底。整个流程从输入到输出可复现、可集成、可扩展。五、我踩过的那些坑希望你跳过别试图填满20个门类下的所有小类你只需要把常做的几个门类中的核心行业做深其他用映射兜底。同义词要分行业“验收”在建筑业和软件业意思完全不同别混用。客户给的代码别全信建一层翻译器内部用标准代码但一定要加人工复核和黑白名单防止误伤。大模型生成的话术要加“仅供参考”否则业务人员真拿去跟客户吵输了回来找你。8.0不是一次做完的先搭骨架元数据、角色映射、关联框架然后边用边填肉。我现在也只完成了9个门类的部分深度知识剩下的慢慢来。六、最后从5.0到8.0我一直在回答一个问题怎么让AI不仅“知道风险”还能“帮你决策”5.0让AI“听话”确定性6.0让AI“吵架”博弈7.0让AI“参谋”决策支持话术——这是给AI的第一本路书8.0让AI“懂行”行业知识图谱角色映射关联网络——这是给AI配的夏尔巴每一步都是在把“互联网上散落的知识”砌成“企业能用的城墙”。现在我的系统至少能做到给出一份合同还你一份可执行、可追溯、可谈判的报告。当然它还有很多不足——20个门类才覆盖了9个门类的部分深度知识表格识别还会翻车博弈时长还得优化。但路是一步一步走的。至于那些还在指望纯大模型的朋友……提示词有尽头Transformer也有尽头。而我选择在路走完之前看看还有没有岔路。项目地址https://gitee.com/laopiao93/knowledge系列文章第一篇蓝图篇智能合同治理与行业知识库体系第二篇踩坑篇一个合同审查项目的阶段性探索第三篇实战篇一个合同审查项目的阶段性探索二——从驯兽到斗兽第四篇夏尔巴篇一个合同审查项目的阶段性探索三——从路书到夏尔巴作者一个在4.0里挣扎、在5.0里偷笑、在6.0里做梦、在7.0里顿悟、在8.0里给AI配夏尔巴的码农2026年4月PS如果你也被客户那句“我们一直这么用的”坑过别慌。我正在自己的紫云山里扮晦月魔君等我修完20个门类再断角下山。