Contract Risk Analyzer · 合同风险智能审查
上传合同PDF → AI自动提取关键条款 → 自动标注风险点 → 输出结构化风险报告。
不做法律判断,只做结构化提取和风险标注。
核心功能
- 合同类型识别:自动判断合同类型(采购/销售/服务/劳动/租赁/保密协议)
- 文本提取:PyMuPDF + pdfplumber 双引擎提取合同文本
- AI结构化提取:OpenAI兼容API,用户自配Key
- 风险标注:行业风险清单 + 三级分级(🔴高风险 🟠中风险 🟡低风险)
- 飞书推送:风险报告生成后自动推送飞书消息卡片
AI Agent 完整流程
# 1. 上传合同 PDF 并分析
result = analyze_contract(
pdf_path="/path/to/contract.pdf", # 本地PDF路径
api_key="sk-...", # OpenAI兼容API Key(用户自配)
base_url="https://api.openai.com/v1", # API地址
model="gpt-4o-mini", # 模型名称
user_focus="付款周期和违约责任", # 用户关注条款(可选)
)
# result 返回:
# {
# "contract_type": "采购合同",
# "summary": "本合同为XXX公司向YYY公司采购XXX产品的采购合同...",
# "key_terms": [
# {"category": "当事人", "content": "...", "risk": ""},
# ...
# ],
# "risks": [
# {"level": "🔴", "item": "金额条款留空", "suggestion": "..."},
# ...
# ],
# "report_markdown": "..." # 完整报告Markdown
# }
# 2. 推送飞书消息卡片(可选)
send_feishu_notification(
open_id="ou_xxx",
report_markdown=result["report_markdown"],
contract_type=result["contract_type"],
)
使用示例
示例 1:分析采购合同
用户:帮我审查这份采购合同
[上传 contract.pdf]
→ PDF文本提取 → 合同类型识别 → AI结构化提取 → 风险标注 → 返回:风险报告(含摘要、条款表格、风险列表)
示例 2:审查劳动合同并推送飞书
用户:帮我审查这份劳动合同,并把报告发给我
[上传 labor_contract.pdf]
→ 分析完成后 → 推送飞书消息卡片到用户
输出格式
风险报告结构
# 合同风险审查报告
**合同类型:** 采购合同
**审查时间:** 2026-04-20
**免责声明:** 本报告由AI自动生成,仅供参考,不构成法律建议。
---
## 一、合同摘要
[200字以内的合同核心内容摘要]
---
## 二、关键条款
| 条款类别 | 原文摘要 | 风险提示 |
|---------|---------|---------|
| 当事人 | 甲方:XXX公司 | — |
| 合同金额 | ¥100,000 | — |
| 付款条件 | 签约后30日内支付 | ⚠️ 无明确最晚付款日 |
| 违约责任 | 违约方赔偿损失 | ⚠️ 未约定违约金比例 |
| ... | ... | ... |
---
## 三、风险点列表
### 🔴 高风险(需特别注意)
1. **金额条款留空**:合同金额未填写完整...
2. **违约责任不对等**:甲方违约责任明显轻于乙方...
### 🟠 中风险(建议关注)
1. **付款方式无明确时间节点**:...
2. **保密期限超过2年**:...
### 🟡 低风险(需知晓)
1. **无解除条款**:...
合同类型与提取字段
| 合同类型 | 核心字段 | |---------|---------| | 采购合同 | 甲方、乙方、采购内容、金额、付款方式、交货条款、质量标准、违约责任 | | 销售合同 | 甲方、乙方、销售内容、金额、付款方式、交货条款、质量保证、违约责任 | | 服务合同 | 甲方、乙方、服务内容、金额、付款方式、服务期限、验收标准、违约责任 | | 劳动合同 | 甲方(雇主)、乙方(员工)、职位、薪资、工作地点、工作时间、合同期限、社保 | | 租赁合同 | 甲方(出租方)、乙方(承租方)、租赁物、租金、押金、租期、续租条款、维修责任 | | 保密协议 | 甲方、乙方、保密内容、保密期限、保密范围、违约责任 |
风险清单
🔴 高风险(Red Flags)
- 金额不明确或留空
- 违约责任严重不对等(单方面有利)
- 违约金比例过高(超过损失30%)
- 管辖法院约定在外地且对我方不利
- 无解除条款或解除条件极严
- 无限连带责任条款
- 格式条款未加粗或未明示
🟠 中风险(Caution)
- 付款无明确时间节点
- 保密期限超过2年
- 竞业限制范围过宽
- 知识产权归属模糊
- 不可抗力条款缺失或过于宽松
- 争议解决方式不利于维权
🟡 低风险(Note)
- 通知方式未明确
- 合同份数未约定
- 附件与正文不一致风险
- 语言版本冲突未说明
技术说明
PDF 文本提取
from scripts.pdf_extractor import extract_text
# PyMuPDF 优先,pdfplumber 备选
text = extract_text(pdf_path)
AI 字段提取
from scripts.ai_extractor import extract_fields
fields = extract_fields(
text=contract_text,
contract_type="采购合同",
api_key="sk-...",
base_url="https://api.openai.com/v1",
model="gpt-4o-mini",
)
风险标注
from scripts.risk_analyzer import annotate_risks
risks = annotate_risks(
text=contract_text,
fields=extracted_fields,
)
报告生成
from scripts.report_generator import generate_report
report = generate_report(
contract_type=contract_type,
summary=summary,
key_terms=key_terms,
risks=risks,
)
飞书推送
from scripts.feishu_notifier import send_feishu_notification
# Prepare notification data
notification = send_feishu_notification(
open_id="ou_xxx",
report_markdown=report_markdown,
contract_type=contract_type,
contract_name="合同名称",
risk_summary={"🔴": 1, "🟠": 2, "🟡": 0}, # optional, from result["risk_summary"]
top_risks=[{"level": "🔴", "item": "高风险项"}], # optional, from result["risks"][:3]
)
# Agent must send via feishu_im_user_message tool:
# feishu_im_user_message(
# action="send",
# receive_id_type="open_id",
# receive_id=notification["open_id"],
# msg_type="interactive",
# content=notification["card_json"],
# )
飞书推送集成指南(Agent)
正确调用方式:
# 1. 分析合同后获取结果
result = analyze_contract(pdf_path=..., api_key=..., ...)
# 2. 准备飞书通知数据
notification = send_feishu_notification(
open_id=user_open_id, # 从消息上下文获取
report_markdown=result["report_markdown"],
contract_type=result["contract_type"],
risk_summary=result.get("risk_summary", {}),
top_risks=result.get("risks", [])[:3],
)
# 3. 发送飞书消息卡片(使用 feishu_im_user_message 工具)
# 如果用户要求发送飞书通知,调用:
feishu_im_user_message(
action="send",
receive_id_type="open_id",
receive_id=notification["open_id"],
msg_type="interactive",
content=notification["card_json"],
)
优雅降级:
- 如果用户未授权飞书,
feishu_im_user_message会失败 - 失败时只输出本地报告(
result["report_markdown"]),不报错 - 不要因为飞书通知失败而中断流程
配置说明
用户需提供自己的 API Key(OpenAI兼容),支持:
- OpenAI API
- Azure OpenAI
- Claude(通过兼容代理)
- DeepSeek
- 任何 OpenAI-compatible API
定价套餐
| 套餐 | 价格 | 功能 | |------|------|------| | 免费版 | ¥0 | 3份/月,基础风险标注,文本摘要 | | 标准版 | ¥9.9/月 | 30份/月,6种合同类型,Excel报告 | | Pro版 | ¥29/月 | 200份/月,批量处理,风险对比 | | Max版 | ¥69/月 | 不限份数,API优先 |
常见问题
Q: 支持扫描件PDF吗? A: 基础版支持数字文本PDF。扫描件需要OCR支持,可配合 miaoda-doc-parse 技能处理。
Q: 支持英文合同吗? A: 支持中英文合同,请在 base_url 中配置支持英文的模型。
Q: 合同内容是否存储? A: 不存储合同内容,处理完成后即删除,完全符合数据隐私要求。
Q: 如何配置 API? A: 用户在调用时通过 api_key 参数传入,支持 OpenAI 兼容接口。
Q: 可以批量处理多份合同吗? A: Pro版支持批量处理,可上传多个PDF文件并生成对比报告。
微信扫一扫