eddyAi-0/ai-contract-red-teamer
GitHub: eddyAi-0/ai-contract-red-teamer
基于多代理AI的合同风险红队测试工具,自动识别法律、财务和实操风险并生成加权评分报告。
Stars: 0 | Forks: 0
# ⚖️ AI 合同红队测试工具
[](tests/)
[](https://python.org)
## 演示
### 上传

*上传 PDF 合同或使用附带的示例文件。*
### 实时分析

*三个专业代理按顺序分析合同,实时更新进度。*
### 风险报告

*彩色风险评分(0–10),包含每个代理的细分和摘要。*
### 发现列表

*所有发现可按严重程度(严重/高/中/低)和代理类型筛选,按严重程度排序。*
### 带 GDPR 引用的详细发现

*每个发现包含问题条款(以原文引用)、可操作的建议,以及通过 RAG 从索引法律来源引用的原文(此处为 GDPR 第 13 条关于透明度要求)。*
## 功能
- **多代理分析** —— 三个专业代理从不同角度同时分析合同
- **RAG 增强** —— 引用来自 547 个索引块的真实 GDPR 条款(EU 法规 2016/679,英文版)
- **多语言支持** —— 处理任意语言的合同;界面和分析输出始终为英文;原始条款以原文引用
- **加权风险评分** —— 法律 40%,财务 35%,实操 25%
- **可筛选发现** —— 按严重程度和代理类型筛选,按风险排序
- **可下载报告** —— Markdown 或 JSON 格式
- **生产就绪** —— 支持 Docker,54 个单元测试,容器健康检查
## 技术栈
后端使用 Python 3.11。LLM 推理通过 Anthropic API(`claude-sonnet-4-5`)直接调用,无框架封装。嵌入向量通过 Voyage AI(`voyage-3`)生成,存储在 ChromaDB。前端使用 Streamlit。PDF 提取使用 pdfplumber,并配有可配置的字符限制,以处理短合同和长法律文档。测试套件包含 54 个用 pytest 编写的测试,使用完全模拟的 Anthropic 和 Voyage AI 客户端(运行零 API 成本)。
## 快速启动
```
# 克隆并创建虚拟环境
git clone https://github.com/eddyAi-0/ai-contract-red-teamer.git
cd ai-contract-red-teamer
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 安装依赖项
pip install -r requirements.txt
# 配置 API 密钥
cp .env.example .env
# 编辑 .env — 添加 ANTHROPIC_API_KEY(必需)和 VOYAGE_API_KEY(用于 RAG)
# 索引 GDPR 参考文档(一次性,约2分钟)
python -m rag.indexer
# 运行
streamlit run app.py
```
在浏览器中打开 [http://localhost:8501](http://localhost:8501)。
## 🐳 Docker
使用单个命令运行整个栈:
```
cp .env.example .env
# 将 ANTHROPIC_API_KEY 和 VOYAGE_API_KEY 添加到 .env
docker-compose up --build
```
在浏览器中打开 [http://localhost:8501](http://localhost:8501)
GDPR 向量存储持久化在命名 Docker 卷中 —— 首次运行约需 2 分钟索引;后续运行立即启动。
## 架构
三个专业代理从不同角度分析同一合同,然后编排器综合他们的发现生成最终风险报告。
```
PDF / Text Input
│
▼
┌─────────────────────────────────────────┐
│ Orchestrator │
│ coordinates agents, computes risk score│
└────────┬──────────┬──────────┬──────────┘
│ │ │
┌────▼───┐ ┌────▼───┐ ┌───▼────┐
│ Legal │ │Finance │ │Practic.│
│ Agent │ │ Agent │ │ Agent │
└────────┘ └────────┘ └────────┘
│ │ │
└──────────┴──────────┘
│
Final Report
(risk score 0–10)
```
| 代理 | 重点关注领域 |
|---|---|
| **法律代理** | 模糊条款、GDPR 违规、单方修改权、管辖权陷阱、不成比例的责任上限 |
| **财务代理** | 隐藏成本、不成比例的罚款、自动续约、不利的付款条件 |
| **实操代理** | 不切实际的义务、不可能完成的截止日期、缺少退出条款、模糊的合规要求 |
| 代理 | 评分权重 |
|---|---|
| 法律代理 | 40% |
| 财务代理 | 35% |
| 实操代理 | 25% |
## 值得注意的工程决策
**RAG 索引 vs. 合同截断。** `extract_text_from_pdf` 接受可选的 `max_chars` 参数(默认值:25,000),以保护分析用户上传合同时的 LLM 上下文窗口。索引器以 `max_chars=None` 调用同一函数,以加载完整的 88 页 GDPR 文档。如果没有这种区分,英文 GDPR PDF 将被静默截断至约 7 页,仅产生 38 个块,而非 547 个块 —— 通过比较块数量发现 RAG 覆盖范围减少了 14 倍。
**顺序代理,而非并行。** 三个代理按顺序运行,而非并发。这使实时进度 UI 保持清晰(每个步骤完成后才启动下一步),并避免在单个 API 密钥上同时向 Anthropic API 发送大量请求。
**过期缓存恢复。** Streamlit 的 `@st.cache_resource` 在页面重新加载时保持 VectorStore 对象存活。如果在服务器运行时删除并重建 `rag/chroma_db/`,缓存的对象会持有对已删除 ChromaDB 集合 UUID 的引用。一个 `_safe_vectorstore()` 包装器在每次调用时探测集合;失败时清除 Streamlit 缓存并透明地重新初始化,防止“集合不存在”崩溃,无需重启服务器。
**JSON 解析加固。** Anthropic API 偶尔会在从合同文本提取的 JSON 字符串中返回控制字符(U+0000–U+001F,排除 `\n`、`\t`、`\r`)。这些字符会静默破坏 `json.loads`。在每次解析尝试前执行 `re.sub` 清理。仅对结构化输出方法将 `max_tokens` 提升至 8,192,保持自由文本 `analyze()` 路径不变。
## 多语言处理
系统设计用于处理任意语言的合同。代理系统提示明确指示模型全文引用合同条款(保留原始语言),同时使用英文编写标题、描述、建议和摘要。这使得无论输入是意大利语、德语、法语还是英语,输出都保持一致。
## 测试
```
python -m pytest tests/ -v
```
54 个测试覆盖了代理层、编排器、RAG 流水线和向量存储 —— 全部使用模拟的 Anthropic 和 Voyage AI 客户端。无 API 调用,无成本。
## 项目结构
```
ai-contract-red-teamer/
├── agents/
│ ├── base_agent.py # Anthropic API call, JSON retry, control-char cleanup
│ ├── legal_agent.py
│ ├── financial_agent.py
│ └── practical_agent.py
├── orchestrator/
│ └── orchestrator.py # Weighted scoring, finding merge, executive summary
├── rag/
│ ├── vectorstore.py # ChromaDB + Voyage AI, stale-cache recovery
│ ├── indexer.py # Indexes PDFs from rag/documents/ with no char limit
│ └── documents/ # GDPR EN (EU Reg. 2016/679) — 547 chunks
├── ui/
│ ├── styles.py # CSS injection and color helpers
│ └── report_renderer.py # Streamlit report rendering and Markdown export
├── utils/
│ └── pdf_parser.py # PDF extraction, configurable max_chars, truncation marker
├── tests/ # 54 unit tests
├── screenshots/
├── app.py # Streamlit entry point and state machine
├── Dockerfile
├── docker-compose.yml
└── .env.example
```
## 路线图
- [x] 步骤 1 —— 项目搭建、BaseAgent、PDF 解析器
- [x] 步骤 2 —— 法律、财务、实操代理 + 编排器 + RAG
- [x] 步骤 3 —— 带实时进度和可筛选报告的 Streamlit 前端
- [x] 步骤 4 —— 支持 Docker 一键部署
- [ ] 步骤 5 —— 部署至 Streamlit Cloud
- [ ] 步骤 —— 更多法律来源(德国 BGB、美国消费者法)
- [ ] 步骤 7 —— 多文档比较
## 许可证
MIT
标签:AI合同分析, AI安全, Anthropic, Chat Copilot, ChromaDB, CIS基准, Claude, CVE检测, DInvoke, Docker, GDPR, IPv6支持, Kubernetes, Python, RAG检索增强, VoyageAI, 合同审查, 合同红队, 合同风险, 合规, 多智能体, 多语言支持, 安全测试框架, 安全防御评估, 无后门, 法律合规, 法律科技, 网络调试, 自动化, 请求拦截, 逆向工具, 风险评分