news 2026/5/5 2:59:57

智能法律合同审查Agent系统【附带源码】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
智能法律合同审查Agent系统【附带源码】

在商业合作中,合同审查是法律风控的核心环节,但纯人工模式面临耗时费力、标准不一、遗漏风险等痛点,尤其在合同数量激增时,法务团队极易陷入疏漏危机。伴随大语言模型与法律知识图谱技术的突破,智能法律合同审查Agent应运而生。它能深度理解合同语义,自动比对条款、识别缺失要素与高风险内容,并生成修改建议。其核心价值在于:将审查周期从天级压缩至分钟级,释放人力;统一标准,精准风控。

作者:百度智能云 谭文涛

一、系统总体架构

┌─────────────────────────────────────────────────────────────────┐ │ 合同审查协同环境 │ │ │ │ ┌──────────────┐ │ │ │ 合同解析 │ │ │ │ Agent │ │ │ │ (分段+结构化) │ │ │ └──────┬───────┘ │ │ │ │ │ ┌────────────────┼────────────────┐ │ │ ▼ ▼ ▼ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ 合规审查 │ │ 风险识别 │ │ 条款对比 │ │ │ │ Agent │ │ Agent │ │ Agent │ │ │ │ (法规匹配) │ │ (不利条款) │ │ (模板差异) │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └────────────────┼─────────────────┘ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 审查报告 │ │ │ │ 生成Agent │ │ │ │ (汇总+建议) │ │ │ └──────────────┘ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ 规则引擎 │ │ 千帆LLM │ │ 本地数据 │ │ │ │ (硬约束) │ │ (智能审查) │ │ (法规/模板) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────────┘

协作模式:并行 Fan-out → 汇聚

核心理念

  • 合同解析必须先于审查(结构化后传给三个审查Agent,避免重复解析)

  • 合规/风险/对比三个维度互不依赖,可并行执行,总耗时≈单路

  • 双层决策:规则引擎兜底 + LLM增强

双层决策架构

层级

执行者

职责

特点

Layer 1

规则引擎

关键词匹配、格式检查、缺失检测

100%确定性,不经过LLM

Layer 2

千帆LLM

语义理解、法规匹配、风险判断

推理能力,失败自动降级到规则引擎

二、Agent角色定义

1. 合同解析Agent(ParseAgent)

  • 职责

    :将合同全文按条款分段,提取关键要素

  • LLM调用

    :2次(分段 + 结构化提取)

  • 输入

    :合同全文(string)

  • 输出

    :ParsedContract(JSON结构)

  • 降级策略

    :正则分段 + 关键词分类

2. 合规审查Agent(ComplianceAgent)

  • 职责

    :逐条款匹配相关法规,标注合规/不合规/待确认

  • LLM调用

    :N次(N=条款数),每条款一次

  • 输入

    :ParsedContract

  • 输出

    :list[ComplianceResult]

  • 外部工具

    :本地法规检索(regulations.json)

3. 风险识别Agent(RiskAgent)

  • 职责

    :识别不利条款、模糊表述、缺失条款、不对等条款

  • LLM调用

    :1次(整合同+风险判断)

  • 输入

    :ParsedContract

  • 输出

    :list[RiskItem]

4. 条款对比Agent(CompareAgent)

  • 职责

    :与标准合同模板逐条对比,标注偏离项

  • LLM调用

    :1次(模板+合同对比)

  • 输入

    :ParsedContract

  • 输出

    :list[DeviationItem]

  • 外部工具

    :本地标准模板库(template.json)

5. 报告生成Agent(ReportAgent)

  • 职责

    :汇聚三方审查结果,生成分级审查报告

  • LLM调用

    :1次

  • 输入

    :ParsedContract + 三方结果

  • 输出

    :ReviewReport

三、数据流与JSON格式

3.1 合同解析结果(Phase 1 → Phase 2)

{ "contract_title": "技术服务合同", "parties": [ {"role": "甲方", "name": "华创科技有限公司", "legal_rep": "张明", "address": "北京市海淀区..."}, {"role": "乙方", "name": "智联信息技术有限公司", "legal_rep": "李华", "address": "上海市浦东新区..."} ], "clauses": [ {"clause_id": "C01", "clause_type": "期限/时效", "title": "合同期限", "content": "...", "position": 1}, {"clause_id": "C02", "clause_type": "金额/价款", "title": "服务费用", "content": "...", "position": 2} ], "key_elements": { "contract_amount": "¥1,000,000", "contract_period": "2年", "breach_penalty": "千分之五/千分之一", "dispute_resolution": "诉讼/仲裁", "has_confidentiality": true, "has_force_majeure": false, "ip_ownership": "归甲方所有" } }

3.2 合规审查结果(Phase 2)

[ { "clause_id": "C05", "clause_title": "违约责任", "status": "不合规", "risk_level": "MEDIUM", "regulation_ref": "中华人民共和国民法典", "regulation_article": "第五百八十五条", "reason": "甲乙方违约金比例不对等(甲方千分之五 vs 乙方千分之一)", "suggestion": "建议统一违约金比例,或按实际损失赔偿" } ]

3.3 风险识别结果(Phase 2)

[ { "clause_id": "C07", "clause_title": "合同解除", "risk_type": "不对等条款", "risk_level": "HIGH", "description": "甲方可随时单方面解除,乙方不得解除", "impact": "乙方处于被动地位,随时可能被终止合同", "suggestion": "建议对等约定双方解除条件" }, { "clause_id": "MISSING", "clause_title": "不可抗力条款", "risk_type": "缺失条款", "risk_level": "MEDIUM", "description": "合同缺少不可抗力条款", "impact": "遭遇不可抗力时无法免责", "suggestion": "建议增加不可抗力条款" } ]

3.4 条款对比结果(Phase 2)

[ { "clause_id": "C03", "clause_title": "服务内容与标准", "template_content": "乙方应按照合同约定的时间、质量和标准交付服务成果...", "contract_content": "服务质量应达到行业标准,满足甲方合理需求", "deviation_type": "修改", "risk_level": "MEDIUM", "analysis": "合同使用'行业标准'和'合理需求'等模糊表述,缺乏具体量化标准" } ]

四、各Agent核心提示词推导

4.1 合同解析Agent提示词推导

推导思路:解析是最上游环节,需要"分步走"策略,因为一次性让LLM完成"分段+分类+要素提取"三件事容易出错。

推导过程

1. 第一步:条款分段

  • 输入:合同全文(可能很长)

  • 核心指令:每个独立条款作为一条 + 分配编号 + 识别类型 + 保留原文

  • 关键约束:忠实原文,不做任何修改或概括

  • 输出格式:条款列表JSON

2. 第二步:关键要素提取

  • 输入:第一步产出的条款列表

  • 核心指令:从条款中抽取10项关键要素

  • 关键约束:要素必须从原文中提取,不推断

  • 输出格式:甲乙方信息 + key_elements字典

系统提示词核心要素

角色:法律合同解析专家 原则:忠实原文 / 精准分段 / 分类准确 / 关键要素提取 输出:严格JSON

4.2 合规审查Agent提示词推导

推导思路:合规审查需要"法规依据"作为硬约束,每个判定必须关联具体法律条文。逐条款审查而非整合同一次,因为需要精确到条款级别的法规匹配。

推导过程

  1. 法规检索

    :根据条款类型,从法规库中检索相关条目

  2. 逐条审查

    :每条款一次LLM调用,输入条款+法规+合同要素

  3. 分级标注

    :合规/不合规/待确认 × HIGH/MEDIUM/LOW

系统提示词核心要素

角色:法律合规审查专家 原则:法规依据 / 严格标注 / 风险分级 / 修改建议 判定标准:合规→✅ / 违反强制规定→🔴HIGH / 合规风险→🟡MEDIUM / 轻微→🟢LOW 输出:每条款一个JSON(状态+风险+法规+理由+建议)

Prompt设计关键决策:为什么逐条款而非整合同?

  • 法规匹配需要精确对应,整合同一次调用容易遗漏

  • 条款数量通常5-15条,LLM调用次数可控

  • 逐条款结果更结构化,便于报告生成

4.3 风险识别Agent提示词推导

推导思路:风险识别需要"全局视角",必须看到合同全貌才能判断权利义务对等性、条款缺失等问题。因此采用"整合同一次"策略。

推导过程

  1. 四类风险

    :不利条款 / 模糊表述 / 缺失条款 / 不对等条款

  2. 七维评估

    :权利义务对等性 / 违约责任对称性 / 付款交付公平性 / 保密知识产权 / 争议解决中立性 / 终止解除公平性 / 期限时效合理性

  3. 缺失清单

    :将常见缺失条款显式列出,让LLM对照检查

系统提示词核心要素

角色:合同风险评估专家 风险类型:不利条款/模糊表述/缺失条款/不对等条款 评估维度:7个维度 缺失清单:10项常见缺失检查项 输出:risk_items数组

Prompt设计关键决策:为什么整合同一次而非逐条款?

  • 风险评估需要全局对比(如"甲乙方违约金不对等"需要同时看到双方条款)

  • 缺失条款检测需要知道合同有什么、缺什么

  • 整合同一次调用效率更高

4.4 条款对比Agent提示词推导

推导思路:对比需要同时看到合同和模板,让LLM自行匹配和比较。偏离分类(缺失/修改/新增)是核心输出。

推导过程

  1. 偏离分类

    :缺失 / 修改 / 新增

  2. 风险分级

    :根据偏离程度和影响

  3. 模板参考

    :将标准模板条款完整提供给LLM

系统提示词核心要素

角色:合同条款对比分析专家 偏离类型:缺失/修改/新增 评估维度:完整性/一致性/偏离程度/新增影响 输出:deviation_items数组

4.5 报告生成Agent提示词推导

推导思路:报告生成是汇聚环节,需要将三方结果"融会贯通",而非简单拼接。核心是综合风险等级判定和优先级排序。

推导过程

  1. 风险聚合

    :综合三方结果判定整体风险

  2. 摘要提炼

    :3-5句话概括核心发现

  3. 建议排序

    :按紧急程度排列,最多5条

系统提示词核心要素

角色:合同审查报告撰写专家 原则:客观汇总/分级呈现/突出重点/建议可操作 报告结构:摘要→合规→风险→对比→建议 综合风险规则:有HIGH→HIGH / 2+MEDIUM→MEDIUM / 1MEDIUM→LOW / 全COMPLIANT→COMPLIANT 输出:overall_risk_level + summary + recommendations

五、技术实现方案

技术栈

  • 语言

    :Python 3.10+

  • Agent框架

    :基于原生Python + asyncio实现(零依赖,便于教学理解)

  • LLM调用

    :百度千帆API(ernie-x1-turbo-32k)

  • 并行执行

    :asyncio.gather(Fan-out阶段三路并行)

  • 数据格式

    :JSON(Agent间数据传递)

项目结构

contract-review-mas/ ├── design.md # 本设计文档 ├── main.py # 主入口 ├── config.py # 配置 ├── core/ │ ├── __init__.py │ ├── llm_client.py # LLM调用封装 │ └── orchestrator.py # 主控编排器(Fan-out/Gather) ├── agents/ │ ├── __init__.py │ ├── base_agent.py # Agent基类 │ ├── parse_agent.py # 合同解析Agent │ ├── compliance_agent.py # 合规审查Agent │ ├── risk_agent.py # 风险识别Agent │ ├── compare_agent.py # 条款对比Agent │ └── report_agent.py # 报告生成Agent ├── models/ │ ├── __init__.py │ └── domain.py # 领域模型 ├── data/ │ ├── sample_contract.txt # 示例合同 │ ├── regulations.json # 法规库 │ └── template.json # 标准合同模板 ├── prompts/ │ ├── parse_agent.md # 解析Agent提示词 │ ├── compliance_agent.md # 合规Agent提示词 │ ├── risk_agent.md # 风险Agent提示词 │ ├── compare_agent.md # 对比Agent提示词 │ └── report_agent.md # 报告Agent提示词 └── output/ # 审查报告输出目录

运行方式

# 规则引擎模式(零依赖,开箱即用) python3 main.py # LLM模式(需要千帆API密钥) python3 main.py --llm # 自定义合同 python3 main.py --file my_contract.txt python3 main.py --llm --file my_contract.txt

六、Agent间数据传递规范

ParseAgent ──(ParsedContract JSON)──→ [Fan-out] ├── ComplianceAgent ──(list[ComplianceResult]) ├── RiskAgent ────────(list[RiskItem]) └── CompareAgent ────(list[DeviationItem]) │ [Gather] ──────┘ │ ▼ ReportAgent │ ▼ ReviewReport

关键约束

  • Phase 1 → Phase 2:ParsedContract对象直接传递(内存引用,非序列化)

  • Phase 2 并行三路:共享同一个ParsedContract(只读)

  • Phase 2 → Phase 3:三方结果列表直接传递

  • 所有JSON序列化仅用于LLM Prompt构建和最终报告存储

七、LLM调用统计

Agent

调用次数

调用策略

降级方案

ParseAgent

2次

分段1次 + 提取1次

正则分段 + 关键词提取

ComplianceAgent

N次

每条款1次

规则引擎检查

RiskAgent

1次

整合同1次

规则引擎识别

CompareAgent

1次

整合同+模板1次

类型匹配+文本相似度

ReportAgent

1次

三方结果1次

规则汇总

总计5+N次

N=条款数

八、设计要点与决策记录

8.1 为什么解析先行而非三路都独立解析?

  • 避免重复解析,节省LLM调用

  • 结构化结果可被三方共享,保证一致性

  • 解析只需一次,后续审查都基于同一份结构化数据

8.2 为什么合规审查逐条款,风险识别整合同?

  • 合规审查需要精确的法规条款匹配,逐条更准确

  • 风险识别需要全局视角(如对等性判断),整合同更有效

8.3 为什么每个Agent都有规则引擎Fallback?

  • 教学演示:即使没有LLM也能跑通完整流程

  • 生产安全:LLM故障时系统不宕机

  • 成本控制:开发测试阶段可零成本运行

8.4 分级输出的设计哲学

  • 🔴 HIGH

    → 必须修改才能签署

  • 🟡 MEDIUM

    → 建议修改,否则有风险

  • 🟢 LOW

    → 可签署但需关注

  • ✅ COMPLIANT

    → 无需修改

8.5 示例合同的"陷阱"设计

示例合同故意埋入以下问题,验证系统能否检出:

  1. 第七条

    :甲方可"随时单方面解除",乙方"非经同意不得解除" → 不对等条款

  2. 第五条

    :甲方违约金千分之五 vs 乙方千分之一 → 违约责任不对等

  3. 第八条

    :"或裁或审" → 无效条款

  4. 缺少不可抗力条款

    → 缺失条款

  5. 第三条

    :"行业标准"、"合理需求" → 模糊表述

  6. 第七条第3款

    :合同解除后乙方返还全部费用 → 不公平

九、项目源码

源码请查看改文章绑定资源包

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 2:58:35

ToolFlow:基于工作流引擎的LLM工具编排框架设计与实战

1. 项目概述:当代码生成器开始“思考”工作流最近在GitHub上看到一个挺有意思的项目,叫ToolFlow。初看标题,你可能会觉得这又是一个平平无奇的工具库,但点进去细看,它的定位其实相当独特:一个专为大型语言模…

作者头像 李华
网站建设 2026/5/5 2:50:33

安卓乐固加固应用逆向分析利器tsplay原理与实战指南

1. 项目概述:一个被低估的安卓应用安全分析利器如果你在安卓安全研究、逆向工程或者应用行为分析的圈子里待过一段时间,大概率听说过或者用过tensafe/tsplay这个工具。它不像那些动辄几百兆、界面花哨的商业软件,只是一个命令行工具&#xff…

作者头像 李华
网站建设 2026/5/5 2:49:52

3D高斯渲染技术:激活函数与优化策略详解

1. 3D高斯渲染技术概述3D高斯渲染是近年来计算机图形学领域兴起的一种新型渲染技术,它通过大量高斯函数的叠加来表征3D场景中的几何与外观属性。与传统基于三角形网格的渲染方式不同,这种表示方法能够更自然地处理复杂几何结构和材质细节,特别…

作者头像 李华
网站建设 2026/5/5 2:49:28

探索AI辅助开发:在快马平台体验智能编程与tiobe8xkino语言生态结合

最近在尝试用AI辅助开发时,发现了一个很有意思的实践方向:将AI编程助手与特定语言生态结合。正好在InsCode(快马)平台上体验了他们的AI模型集成功能,就动手做了一个展示AI辅助编程能力的交互应用。这个过程中,对tiobe8xkino这类新…

作者头像 李华
网站建设 2026/5/5 2:47:29

i.MX6ULL SD卡启动盘制作避坑指南:为什么你的uboot烧录后没反应?

i.MX6ULL SD卡启动盘制作避坑指南:为什么你的uboot烧录后没反应? 当你按照网上的教程一步步操作,却发现开发板毫无反应时,那种挫败感我深有体会。LED不亮、串口无输出,仿佛所有努力都石沉大海。这不是你一个人的困境—…

作者头像 李华
网站建设 2026/5/5 2:46:10

基于规则引擎的自动化文件分类工具:解决项目记忆碎片化管理难题

1. 项目概述与核心价值最近在折腾AI Agent和知识管理工具链,发现一个挺普遍的问题:随着项目推进,我们会在本地留下大量零散的“记忆”文件。这些文件可能是临时的笔记、会议纪要、技术决策记录、项目联系人信息,或者是一些有用的参…

作者头像 李华