跳转至

合同审查助手

项目背景与目标

合同是企业经营的基石,但合同审查专业性强、耗时长、风险点多。法务人员审一份复杂合同可能耗时数小时,而业务端又急需推进。漏审风险条款可能导致巨额损失。智能合同审查助手通过 AI 自动识别合同条款、标注风险点、给出修改建议,大幅提升审查效率与覆盖度,让法务聚焦于复杂判断。

本项目目标是构建一个合同审查 Agent,支持常见合同类型(买卖、租赁、劳动、服务、借款),输出条款识别、风险标注、修改建议、审查报告。

需求分析

核心能力: 1. 合同结构解析:识别标题、条款、附件、签署信息 2. 条款分类:将条款归类(标的、价格、违约、争议解决等) 3. 风险识别:标注对己方不利的条款(违约金过高、管辖不利、隐含义务) 4. 缺失检查:检查必备条款是否缺失(如违约责任、保密条款) 5. 修改建议:给出修改措辞建议 6. 审查报告:生成结构化审查意见

审查视角:支持买方/卖方/中立多视角审查,不同视角风险判断不同。

技术选型说明

模块 技术方案 选型理由
文档解析 python-docx + PDF 解析 多格式合同处理
Agent 框架 LangGraph 多步骤审查流程
条款识别 LLM + 规则 灵活适配各种合同
风险库 结构化风险规则 标准化风险判断
LLM Qwen-Max 修改建议生成
知识库 标准合同模板 RAG 条款对比
后端 FastAPI 异步审查
数据库 PostgreSQL + MinIO 审查记录 + 合同文件

架构设计

flowchart TD
    DOC[合同文档] --> PARSE[文档解析]
    PARSE --> SEG[条款分割]
    SEG --> CLS[条款分类]
    CLS --> AGENT[审查 Agent]
    AGENT --> RISK[风险识别]
    RISK --> RULE[(风险规则库)]
    AGENT --> MISS[缺失检查]
    MISS --> TPL[(标准模板库)]
    AGENT --> COMP[条款对比]
    COMP --> VEC[(条款向量库)]
    AGENT --> SUG[修改建议]
    SUG --> LLM[LLM 生成]
    AGENT --> REP[审查报告]
    REP --> VIEW{审查视角}
    VIEW --> BUY[买方视角]
    VIEW --> SELL[卖方视角]

关键模块实现思路

模块1:合同解析与条款分割

合同格式多样(Word/PDF/扫描件)。Word 用 python-docx 按段落与样式识别结构;PDF 用版面分析;扫描件需 OCR。条款分割按编号(第一条、1.1、(1))与标题识别,处理嵌套条款。

def split_clauses(document):
    clauses = []
    for para in document.paragraphs:
        if is_clause_heading(para.text):  # 匹配编号模式
            clauses.append({"id": extract_id(para.text), "text": para.text,
                            "level": detect_level(para.text)})
        elif clauses:
            clauses[-1]["text"] += para.text  # 续接条款内容
    return clauses

模块2:条款分类与风险识别

条款分类将每个条款映射到标准类别(标的、数量、质量、价款、履行期限、违约责任、争议解决、保密、知识产权等)。分类用 LLM + 关键词规则双轨。

风险识别基于风险规则库,每条规则定义:适用条款类型、风险模式、风险等级、修改建议。例如:

RISK_RULES = [
    {"type": "违约金", "pattern": "违约金.*超过.*30%", "level": "high",
     "advice": "违约金过高,建议调整为不超过实际损失的30%"},
    {"type": "管辖", "pattern": "由.*对方所在地.*法院管辖", "level": "medium",
     "advice": "管辖不利于己方,建议改为被告所在地或合同履行地"},
    {"type": "付款", "pattern": "预付款.*100%", "level": "high",
     "advice": "全款预付风险大,建议分期付款"},
]

LLM 补充识别规则未覆盖的隐含风险(如模糊表述、单方解释权)。

模块3:缺失条款检查

对照标准合同模板检查必备条款是否缺失。不同合同类型必备条款不同:买卖合同须有标的、数量、质量、价款、交付、验收、违约;劳动合同须有期限、工作内容、报酬、社保、解除条件。

REQUIRED_CLAUSES = {
    "买卖合同": ["标的", "数量", "质量", "价款", "交付", "验收", "违约责任", "争议解决"],
    "劳动合同": ["期限", "工作内容", "工作地点", "报酬", "社保", "解除条件"]
}
def check_missing(contract_type, found_clauses):
    required = REQUIRED_CLAUSES[contract_type]
    return [c for c in required if c not in found_clauses]

缺失条款在报告中重点提示,建议补充。

模块4:修改建议生成

LLM 基于风险识别结果生成具体修改建议:原条款 → 风险点 → 建议修改措辞。修改建议须具体可操作,给出替换文本而非抽象建议。

SUGGEST_PROMPT = """合同审查修改建议:
原条款:{original_clause}
风险点:{risk}
审查视角:{perspective}
要求:
1. 指出具体风险
2. 给出修改后的条款文本
3. 说明修改理由"""

模块5:审查视角适配

同一条款对不同方风险不同。如"由甲方所在地法院管辖",对甲方有利、对乙方不利。系统支持切换审查视角,风险标注与建议相应调整。

核心流程详解

合同审查流程: 1. 上传合同 → 文档解析 → 条款分割 2. 条款分类 → 识别条款类型 3. 风险识别:规则库匹配 + LLM 补充 4. 缺失检查:对照标准模板 5. 修改建议生成:LLM 输出具体修改 6. 汇总审查报告:风险清单 + 修改建议 + 缺失提示 7. 法务复核:采纳/修改建议,反馈优化模型

审查报告输出: - 风险等级汇总(高/中/低各几项) - 逐条款审查意见(原文 + 风险 + 建议) - 缺失条款清单 - 整体评价与签约建议

部署与优化建议

  • 模板管理:常用合同类型预设审查模板,提升一致性
  • 规则迭代:法务反馈的新风险模式持续加入规则库
  • 视角切换:支持买卖双方视角,灵活服务不同客户
  • 版本对比:合同修改后对比版本,识别新增风险
  • 保密性:合同涉密,私有化部署或加密传输

常见问题与解决方案

问题 原因 解决方案
条款分割错 格式不规范 多模式匹配 + LLM 兜底
风险漏报 规则覆盖不全 规则库持续扩充 + LLM 补充
修改建议不专业 LLM 法律功底不足 模板约束 + 法务审核样本微调
误报多 规则过敏感 风险等级分级 + 法务调参

扩展方向

  • 合同起草:基于要素生成合同初稿
  • 履约监控:关键节点提醒(付款、交付、到期)
  • 合同台账:企业合同集中管理与检索
  • 智能比对:与己方标准模板差异高亮