eddyAi-0/ai-contract-red-teamer

GitHub: eddyAi-0/ai-contract-red-teamer

基于多代理AI的合同风险红队测试工具,自动识别法律、财务和实操风险并生成加权评分报告。

Stars: 0 | Forks: 0

# ⚖️ AI 合同红队测试工具 [![测试](https://img.shields.io/badge/tests-54%20passing-brightgreen)](tests/) [![Python](https://img.shields.io/badge/python-3.11+-blue)](https://python.org) ## 演示 ### 上传 ![首页](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c200717e67201411.png) *上传 PDF 合同或使用附带的示例文件。* ### 实时分析 ![正在分析](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e69aa51c36201419.png) *三个专业代理按顺序分析合同,实时更新进度。* ### 风险报告 ![报告概览](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/a5e37a4d19201426.png) *彩色风险评分(0–10),包含每个代理的细分和摘要。* ### 发现列表 ![发现](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/dbdbc7b6a4201433.png) *所有发现可按严重程度(严重/高/中/低)和代理类型筛选,按严重程度排序。* ### 带 GDPR 引用的详细发现 ![发现详情](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/500d9494cb201440.png) *每个发现包含问题条款(以原文引用)、可操作的建议,以及通过 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, 合同审查, 合同红队, 合同风险, 合规, 多智能体, 多语言支持, 安全测试框架, 安全防御评估, 无后门, 法律合规, 法律科技, 网络调试, 自动化, 请求拦截, 逆向工具, 风险评分