← 返回投肯智能知识库首页

金融合约AI审核系统:OCR+NLP实现合同条款智能核验

难度:中级阅读时间:约 14 分钟更新日期:2026-06-06

一、背景:合同审核为什么需要AI?

金融业务的核心风险之一,是合同条款的合规性与一致性。传统人工审核的问题非常明确:

AI 审核系统的设计目标,是让机器在 < 30 秒内自动完成一份合同的初核,标记出需要人工复核的高风险点,最终将法务团队的工作量压缩 60% 以上。

二、系统架构设计

整套系统由三个核心模块组成,数据流如下:

PDF扫描件 / Word文档
    │
    ▼
┌──────────────┐       ┌──────────────────┐       ┌──────────────┐
│   OCR 识别    │────▶  │   NLP 条款解析    │────▶  │  规则 + 模型  │
│ PaddleOCR    │ 文本   │ DeepSeek-V3     │ 结构化 │  风险核验   │
│ 版面分析      │────▶  │  + Prompt 模板   │────▶  │ 规则引擎+LLM │
└──────────────┘       └──────────────────┘       └──────────────┘
    │                       │                          │
  (扫描件)              (结构化JSON)             (风险报告 + 受控标记)
    │                       │                          │
    └───────────────────────┴──────────────────────────┘
                    人机协作审核平台(前端)

2.1 OCR 模块:文档数字化

金融合同多为扫描件,且包含复杂表格、骑缝章、水印。PaddleOCR 的 PP-Structure 系列是当前开源界表格识别最优解之一。

# 安装 PaddleOCR(CPU/GPU 均可)
pip install paddlepaddle paddleocr

# 单页 OCR 测试
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang='ch', show_log=False)
result = ocr.ocr('contract_page_01.jpg', cls=True)
for line in result[0]:
    text = line[1][0]
    confidence = line[1][1]
    print(f"[{confidence:.2f}] {text}")

# 批量处理 PDF(先转图片)
from pdf2image import convert_from_path
pages = convert_from_path('contract.pdf', dpi=300)
for i, page in enumerate(pages):
    page.save(f'page_{i:03d}.jpg', 'JPEG')
    # 调用 OCR
    result = ocr.ocr(f'page_{i:03d}.jpg', cls=True)
⚠️ 注意:扫描件分辨率至少 300 DPI,低于 200 DPI 的图片会导致表格线识别错位,进而影响后续字段提取。

三、NLP 条款解析与风险核验

3.1 Prompt 工程:让 LLM 做结构化提取

将 OCR 原文输入 DeepSeek-V3,通过精心设计的 system prompt,要求模型以 JSON 形式输出关键字段:

SYSTEM_PROMPT = """\
你是金融合同审核专家。请从以下合同文本中提取并输出 JSON:

{
  "contract_type": "合同类型",
  "party_a": "甲方全称",
  "party_b": "乙方全称",
  "contract_amount": "合同金额(数字)",
  "payment_terms": "付款条款摘要",
  "liability_clause": "违约责任条款摘要",
  "risk_flags": ["风险点1", "风险点2"],
  "missing_clauses": ["缺失条款"]
}

输出必须为合法 JSON,不要包含其他文字。
"""

user_input = f"""
合同OCR文本如下:
{ocr_text}
请审核并输出 JSON。
"""

3.2 调用 DeepSeek-V3 API

from openai import OpenAI

client = OpenAI(
    base_url="http://toukenai-llm:8000/v1",
    api_key="sk-internal",
)

def audit_contract(ocr_text: str) -> dict:
    completion = client.chat.completions.create(
        model="deepseek-v3",
        messages=[
            {"role": "system", "content": SYSTEM_PROMPT},
            {"role": "user", "content": f"合同文本:\n{ocr_text}\n请返回JSON。"},
        ],
        temperature=0.1,
        max_tokens=2048,
        response_format={"type": "json_object"},  # DeepSeek-V3 支持 JSON mode
    )
    import json
    return json.loads(completion.choices[0].message.content)

四、规则引擎:确定性校验

LLM 擅长理解语义,但对数字、日期、百分比等精确字段容易出错。规则引擎负责铁面无私的硬校验:

import re
from datetime import datetime

class ContractRuleEngine:
    def check_amount_consistency(self, contract_json: dict) -> list:
        """金额一致性:正文金额 vs 附件/附表金额"""
        flags = []
        body_amount = contract_json.get("contract_amount", 0)
        annex_amount = self._extract_annex_amount()  # 从附表提取
        if body_amount and annex_amount:
            if abs(body_amount - annex_amount) > 0.01:
                flags.append(f"金额不一致:正文 {body_amount} vs 附表 {annex_amount}")
        return flags

    def check_payment_terms(self, contract_json: dict) -> list:
        """付款条款:付款比例 + 节点是否合理"""
        flags = []
        terms = contract_json.get("payment_terms", "")
        # 提取百分比
        percentages = re.findall(r'(\d+(?:\.\d+)?)\s*%', terms)
        total_pct = sum(float(p) for p in percentages)
        if total_pct > 105:  # 允许多个付款节点合计略超100(尾款)
            flags.append(f"付款比例合计异常:{total_pct}%(可能计算错误)")
        return flags

    def check_missing_clauses(self, contract_json: dict) -> list:
        """必备条款检查"""
        required = ["违约责任", "争议解决", "保密条款", "知识产权"]
        missing = []
        full_text = json.dumps(contract_json, ensure_ascii=False)
        for clause in required:
            if clause not in full_text:
                missing.append(f"缺失必备条款:{clause}")
        return missing

五、效果与实测数据

测试集:投肯智能过去 6 个月归档的 120 份融资租赁合同(已脱敏)。

评估指标仅规则引擎仅 LLM规则 + LLM 混合
关键条款提取 F172%89%94%
高风险点召回率65%91%96%
误报率8%18%5%
单份平均耗时1.2 秒25 秒8 秒
💡 经验:规则 + LLM 混合方案误报率最低。先用规则过滤掉 80% 的合规文档,只把可疑部分送 LLM 深挖,既省钱又快。

六、系统落地注意事项

  1. PDF 版本管理:合同在流转过程中常有修订版。系统需以 MD5 + 版本号作为唯一标识,避免"审核了 V1,签署却是 V2"的经典坑。
  2. 敏感信息脱敏:将 PDF 送入第三方 OCR API 前,必须在本地完成身份证号、银行卡号脱敏(正则替换为 ****)。
  3. 审核留痕:每份合同的审核时间、触发规则、LLM 判断依据、最终人工确认结果,必须写入审计日志,法律上可作为"已尽合理审查义务"的证明。
  4. 疑难件升级:对于 LLM 风险置信度低于 0.7 的条款,自动升级为"人工必审",且标注具体疑点建议,不要硬给结论。

七、总结

金融合同 AI 审核系统的核心,不是用 LLM 替代法务,而是用 OCR + 规则 + LLM 组成一个"初审机器",将法务团队从重复劳动中解放出来,专注于复杂条款谈判与重大风险评估。投肯智能内部测试表明,这套方案可在 < 10 秒内完成一份 50 页合同的初核,高风险点召回率 96%,将单份审核人力成本从 3 天压缩到 30 分钟以内的复核。

🚀 加入投肯智能技术社区, 与 FDE 工程师一起交流 AI 落地实战, 获取第一手信创适配资料