4. AI审查中的关键信息抽取

合同审查的第一步不是判断条款好坏,而是把合同里“谁、多少钱、多久、做到什么程度、违约怎么办、争议去哪解决”这些关键事实准确读出来。这一步在技术上称为命名实体识别(NER)与关系抽取(RE):前者从非结构化文本中定位并分类关键字段,后者把分散的实体连成有意义的语义关系。对工程合同而言,实体抽取的准确率直接决定后续风险规则引擎能否命中,因为一条“逾期违约金按日万分之三”的规则,必须同时拿到“违约金比例”“计算基数”“触发条件”三个实体才能判断是否合规。

一、工程合同中的实体类型与抽取目标

工程合同的关键实体可分为六类,每类都有典型的文本形态和抽取难点:

  • 当事人实体:发包人、承包人、分包人、监理人、设计人。难点在于同一主体在合同中可能以“甲方”“发包方”“建设单位”等多种称谓出现,需要做指代消解,把不同表述归并到同一实体。
  • 金额实体:合同总价、暂列金额、预付款、进度款、质保金、违约金。难点是金额常带单位(万元、元)、币种、含税/不含税说明,以及“暂定”“暂估”等修饰词,抽取时必须保留这些限定。
  • 工期实体:开工日期、竣工日期、总日历天数、节点工期、顺延条件。难点是日期格式多样(“2024年3月1日”“2024-03-01”“自开工令发出之日起”),且存在相对时间表达。
  • 质量标准实体:合格、优良、鲁班奖、符合GB 50300、验收规范编号。难点是标准常以引用形式出现,需要识别标准号并关联到具体验收对象。
  • 违约责任实体:违约金比例、赔偿上限、解除条件、工期延误责任。难点是责任条款常跨句、跨段,需要关系抽取把“违约行为—责任后果”配对。
  • 争议解决实体:仲裁机构、诉讼法院、管辖地、适用法律。难点是“或裁或审”条款中两个选项并存,需要识别其互斥关系。

二、实体抽取与关系抽取的协同流程

实际系统中,实体抽取和关系抽取不是两个独立步骤,而是共享上下文、互相约束的联合任务。下面这张图展示了从合同文本到结构化字段的完整信号链,重点标出了实体之间的关键关系类型。

工程合同关键信息抽取:实体层 → 关系层 → 结构化字段 合同原文(非结构化) 发包人:××城市建设投资 有限公司(甲方) 承包人:××建筑工程 有限公司(乙方) 合同总价:人民币 壹亿贰仟万元整 开工:2024年3月1日 竣工:2025年8月31日 质量标准:合格,符合 GB 50300 验收规范 逾期竣工按日万分之三 支付违约金 争议提交××仲裁委 员会仲裁 实体层(NER 输出) 当事人 发包人=××城投;承包人=××建筑 金额 总价=120,000,000元;币种=CNY 工期 开工=2024-03-01;竣工=2025-08-31 质量标准 等级=合格;规范=GB 50300 违约责任 行为=逾期竣工;比例=日万分之三 争议解决 方式=仲裁;机构=××仲裁委员会 关系层(RE 输出)与结构化字段 ① 发包人 —[支付]→ 承包人 金额=120,000,000元,币种=CNY ② 承包人 —[承担]→ 工期义务 开工=2024-03-01,竣工=2025-08-31 ③ 承包人 —[违反]→ 工期义务 触发 违约责任:日万分之三 ④ 工程质量 —[依据]→ GB 50300 验收等级=合格 ⑤ 争议 —[提交]→ ××仲裁委员会 方式=仲裁,排除诉讼管辖 结构化输出(供规则引擎消费) {party: {owner, contractor}, amount: 120000000, duration: {...}, quality: "GB50300", penalty: {...}} NER RE 实体层解决“有哪些字段”,关系层解决“字段之间怎么连”,二者联合才能支撑违约金计算、工期顺延判断与争议管辖校验

三、关系抽取:把孤立实体连成可计算的事实

实体抽取只回答“有哪些字段”,关系抽取才回答“字段之间怎么连”。工程合同中最需要抽取的关系有五类:

  1. 支付关系:发包人 → 承包人,附带金额、币种、支付节点。例如“合同签订后28天内支付预付款10%”,需要把“预付款”“10%”“28天”三个实体绑定到支付关系上。
  2. 义务承担关系:承包人 → 工期义务、质量标准义务。关系方向决定责任主体,若把“监理人负责验收”误抽成“承包人负责验收”,后续责任判定会完全错位。
  3. 违约触发关系:违约行为 → 责任后果。例如“逾期竣工”触发“日万分之三违约金”,需要识别触发条件与计算参数的配对。
  4. 标准引用关系:质量要求 → 标准编号。GB 50300 是验收规范,若合同还引用 GB 50204(混凝土结构),需要分别关联到对应工程部位。
  5. 争议管辖关系:争议 → 仲裁机构或法院。若条款写“或裁或审”,需标记为互斥关系,提示规则引擎该条款存在效力风险。

四、实操:从一段合同文本到结构化字段

下面以一段真实风格的合同条款为例,演示抽取过程。原文为:

“承包人应在2024年3月1日开工,2025年8月31日前竣工。逾期竣工的,每逾期一日,承包人应按合同总价日万分之三向发包人支付违约金,累计不超过合同总价的5%。工程质量应达到合格标准,并符合GB 50300验收规范。争议提交××仲裁委员会仲裁。”

抽取时先做分句与实体标注,再建立关系。关键判断点有三个:

  • 金额基数:违约金“日万分之三”的计算基数是“合同总价”,不是“未完成部分价款”。若合同未明确基数,抽取结果应标记为“基数缺失”,提示人工复核。
  • 上限约束:“累计不超过合同总价的5%”是违约金上限实体,必须与违约金比例绑定,否则规则引擎会算出无上限的违约金。
  • 时间边界:开工日期是绝对日期,竣工日期也是绝对日期,但若合同写“自开工令发出之日起540日历天”,则竣工日期是相对时间,需要结合开工令日期推算。
抽取结果建议以 JSON 形式落库,每个字段保留原文位置(字符偏移量)和置信度。当置信度低于阈值(如0.85)时,自动进入人工复核队列,避免错误实体直接进入规则引擎。

五、常见抽取错误与校验方法

工程合同信息抽取的典型错误包括:金额单位漏乘(“壹亿贰仟万元”未转成120,000,000)、日期格式误判(“2024.3.1”被识别为版本号)、当事人指代未归并(“甲方”与“发包人”被当成两个实体)、违约金基数缺失、争议解决方式互斥未标记。校验时可采用三条规则:

校验项判断条件处理动作
金额一致性大写金额与小写金额是否相等不等则标记冲突,取小写并提示复核
工期合理性竣工日期是否晚于开工日期否则标记日期倒置错误
违约金上限是否存在“累计不超过”类上限实体缺失则提示补充上限条款
争议解决唯一性仲裁与诉讼是否同时出现同时出现则标记“或裁或审”风险

完成实体与关系抽取后,合同就被转换成一张可查询、可计算的知识图谱。后续的合规规则、风险评分、条款对比,都建立在这张图谱之上。抽取质量的高低,直接决定AI审查是“能用的助手”还是“制造噪音的工具”。因此在实际工程中,建议对抽取结果做抽样人工校验,并把校验结果反哺到模型微调中,形成持续改进的闭环。