wdnmd1265/Audison
GitHub: wdnmd1265/Audison
一个通过多模型对抗式仲裁和密码学证据链来检测大语言模型输出幻觉与缺陷的 AI 质量控制框架。
Stars: 39 | Forks: 3
两个 AI 审查,第三个 AI 攻击。你得到真相。
## 为什么开发这个工具 我开始使用 AI 生成的代码。它给我的审查充满自信,但却是错误的——而且不是那种明显的错误。这里一个 SQL 注入,那里一个竞态条件。都是些乍一看很正确的东西。 单一模型无法发现自己的盲点。它用同样的训练数据、同样的偏见、同样的弱点来阅读自己的输出。这就像一个人给自己的作业打分。 所以我想:如果让两个模型独立审查,然后第三个模型主动尝试去破坏输出结果呢?这不是投票——而是一个对抗的过程。红队对抗蓝队,外加一个中立的仲裁者。 这就是核心想法。其他的一切——8 个提供商、回退网络、证据链——都是工程实现。为什么开发 · 前/后对比 · 设计说明 · 快速开始 · 工作流 · TrustEngine · 中文
## 前 / 后对比 ### 之前:单一 AI 审查 ``` ┌─────────────────────────────────────────────────────┐ │ You ask an AI to write a login handler. │ │ It comes back confident: │ │ │ │ def login(username, password): │ │ query = "SELECT * FROM users " │ │ query += "WHERE name='" + username + "'" │ │ query += " AND password='" + hash(password) │ │ return db.execute(query) │ │ │ │ A single AI reviewer says: "Looks fine." │ │ │ │ ❌ SQL injection in line 3 — missed. │ │ ❌ hash() is not cryptographic — missed. │ │ ❌ No rate limiting — missed. │ │ │ │ One model. One perspective. Three blind spots. │ └─────────────────────────────────────────────────────┘ ``` ### 之后:audison 对抗性审计 ``` ┌──────────────────────────────────────────────────────────┐ │ Brain One (GPT-4o): Primary audit — flags SQL injection, │ │ unsafe hash, missing rate limit. │ │ │ │ Opponent Brain (Claude 3.5 Sonnet): Attacks the same │ │ code from 5 adversarial angles — confirms Brain One's │ │ findings, adds: race condition in session renewal. │ │ │ │ Cross-Verification: Where they agree → confirmed finding.│ │ Where they disagree → flagged UNCERTAIN, not hidden. │ │ │ │ TrustReport — REJECT (confidence 32/100) │ │ │ │ > [CRITICAL] SQL Injection — username concatenated │ │ directly into query string at line 3 │ │ "Attacker input ' OR 1=1 -- bypasses auth entirely" │ │ │ │ > [HIGH] Unsafe Hash — hash() is not a cryptographic │ │ function. Use bcrypt or argon2. │ │ │ │ > [MEDIUM] Missing Rate Limit — brute-forceable in │ │ under 10 minutes. Add exponential backoff. │ │ │ │ > [!] UNCERTAIN: Race condition in session renewal — │ │ arbiters disagree. Manual review recommended. │ │ │ │ Evidence chain: a1b2c3... (SHA-256, verifiable) │ │ │ │ ✅ Multi-model consensus on critical findings │ │ ✅ Opponent caught what Brain One missed │ │ ✅ Disagreement surfaced, not suppressed │ └──────────────────────────────────────────────────────────┘ ``` ## 设计说明 **决策 1:从投票转向对抗。** 我最初的设计是使用三个模型进行多数投票。但在重叠数据上训练出的三个 LLM 会共享盲点——你只是在为共识的幻觉买单。我放弃了投票。大脑一号负责审计,对手大脑从 5 个对抗视角发起攻击,大脑二号进行交叉验证。共识来源于在攻击中幸存,而不是互相妥协。 **决策 2:为什么 Anthropic 需要单独的代码路径。** 起初,我将所有 8 个提供商统一封装在一个接口下。但 Anthropic 的工具调用格式与 OpenAI 不兼容——强行统一会导致信息丢失。最终,Anthropic 获得了自己原生的 SDK 路径,其他的则使用兼容层。代码量增加了约 40%。工具调用从“偶尔崩溃”变成了零失败。工程的真谛在于知道该打破哪些抽象。 **决策 3:本项目不假装解决什么。** Tier 4 形式化验证目前只是一个占位符——自然语言到 Lean-4 的转换是一个尚未解决的研究难题,我不会去造假。盲审默认关闭,因为我没有足够的跨模型数据来证明它在所有场景下都有帮助。我宁愿留下一个标有“实验性”的开关,也不愿发布一个我自己都无法为其辩护的默认设置。 ## 与众不同之处 **多模型仲裁。** 不是简单的投票。大脑一号先进行审计。然后,对手大脑从对抗角度挑战相同的输出。在两个模型中都能幸存的发现才会被确认。分歧会被标记为 UNCERTAIN(不确定)——而不是被掩盖过去。 **对手大脑。** 一个专门用于发现缺陷的第三方视角。它从五个对抗立场(攻击者、边界情况猎手、假设破坏者、规则律师、逻辑检查器)发起攻击。与二次审查不同,它会主动尝试破坏输出结果。 **带有密码学证据的 TrustEngine。** 每一项发现都通过 SHA-256 进行散列并加上时间戳。你将获得一条可验证的证据链——证明发现了什么以及何时发现的。分享报告时,散列值可以证明它未被篡改。 ## 快速开始 🌐 **在浏览器中即刻体验**:[wdnmd1265.github.io/Audison/playground.html](https://wdnmd1265.github.io/Audison/playground.html) —— 免安装,无需 API key ``` pip install audison[html] ``` 设置一个 API key —— 或者设置两个以进行跨提供商仲裁(推荐): ``` export OPENAI_API_KEY="sk-..." # Required export ANTHROPIC_API_KEY="sk-ant-..." # Optional, for stronger audits ``` 使用一条命令审计任何内容: ``` # 使用特定关注点审计文件 audison audit login.py -r "Check for SQL injection, auth bypass, and rate limiting" # 导出为可共享的 HTML 报告 audison audit login.py -r "Security audit" --html -o report.html # 从其他工具管道传输 cat generated_code.py | audison audit -r "Validate correctness" ``` ``` # 或者使用 Python SDK — 3 行代码 from audison import TrustEngine engine = TrustEngine() report = engine.audit( requirement="Secure user authentication with rate limiting", ai_output=ai_generated_code, ) print(report.summary()) # "REJECT (32/100): 3 findings, 2 uncertain" ``` ## 工作原理 ``` Input Code │ ▼ ┌─────────────────────┐ │ Brain One Audit │ Primary review. Identifies issues across │ (GPT-4o) │ security, correctness, and logic dimensions. └─────────┬───────────┘ │ findings ▼ ┌─────────────────────┐ │ Opponent Challenge │ 5 adversarial perspectives attack the same │ (Claude 3.5 Sonnet) │ output. Confirms or disputes each finding. └─────────┬───────────┘ │ confirmed / disputed ▼ ┌─────────────────────┐ │ Cross-Verification │ Consensus → confirmed finding. │ │ Disagreement → UNCERTAIN flag, not hidden. └─────────┬───────────┘ │ verdict + evidence ▼ ┌─────────────────────┐ │ TrustReport │ Verdict (pass / review / reject) + │ │ Confidence score + Findings + │ │ SHA-256 evidence chain + Timestamp └─────────────────────┘ ``` 核心洞察:单一模型无法发现自己的盲点。在完全不同的数据上训练出的两个模型,加上一个积极尝试破坏输出的对抗性对手,能够捕捉到任何单一模型遗漏的问题。 **一个 API key 就足够了。** 如果你只提供 `OPENAI_API_KEY`,引擎会自动回退到 `gpt-4o-mini` 作为辅助审计员。跨提供商(OpenAI + Anthropic)能提供最强的效果,因为这些模型具有不同的失败模式。 ## HTML 报告 使用 `--html` 导出自包含的 HTML 报告。把它们发给你的团队,或者贴在 issue 中。每一次分享都是一次让你的 AI 无法蒙混过关的审计。 ``` audison audit contract.pdf -r "Check for unfair terms" --html -o contract-audit.html ``` 报告包含颜色编码的发现结果、带有模型归属的仲裁者投票、可折叠的证据链,以及透明的成本明细。没有外部 CSS,没有 JavaScript 框架,没有服务器——只有一个文件,随处可用。 ## TrustEngine TrustEngine 是独立的审计层。零状态。零交互。纯粹的验证。 ``` report.verdict # "pass" | "review" | "reject" report.confidence # 0-100 report.findings # Specific issues with severity + evidence report.uncertainty # What the engine admits it cannot confirm report.evidence_chain # SHA-256 hash + timestamp, fully verifiable ``` ### 输出格式 | 格式 | 命令 | 使用场景 | |--------|---------|----------| | Terminal(终端) | `audison audit ...` | 交互式,彩色高亮 | | HTML | `audison audit ... --html -o report.html` | 分享给团队,发布在 issue 中 | | JSON | `audison audit ... --json` | 通过管道传递给其他工具,CI/CD | | Markdown | `audison audit ... --markdown` | 嵌入到文档中,PR 评论 | ### 本地模式 (Ollama) 对于隐私敏感的工作流,可以通过 Ollama 使用本地模型。代码永远不会离开你的机器。 ``` # 安装 Ollama # macOS / Linux: curl -fsSL https://ollama.com/install.sh | sh # Windows: https://ollama.com/download # 拉取 models ollama pull llama3 ollama pull codellama # 本地运行审计 audison audit your_code.py -r "requirement" --local # 或指定自定义 models audison audit your_code.py -r "requirement" --local --model1 llama3 --model2 codellama ``` ### 集成 | 集成方式 | 工作量 | 指南 | |-------------|--------|-------| | CLI | 1 行 | `audison audit ...` | | Python SDK | 3 行 | `TrustEngine().audit(...)` | | LangChain | 3 行 | `agent.run()` + `engine.audit()` | | CrewAI | 4 行 | `crew.kickoff()` + `engine.audit()` | | OpenAI SDK | 5 行 | `client.create()` + `engine.audit()` | | GitHub Action | YAML | 复制 `.github/workflows/ai-audit.yml.example` | | MCP Server | 4 行 | 在 Cursor/Claude Desktop 中使用 `audit_code` / `audit_file` 工具 | ### MCP Server (Cursor / Claude Desktop) 在你的 AI 编辑器的 `mcp.json` 中进行配置: ``` { "mcpServers": { "audison": { "command": "uvx", "args": ["audison[mcp]", "audison-mcp"], "env": { "OPENAI_API_KEY": "sk-..." } } } } ``` 然后直接在你的 AI 助手中使用 `audit_code` 和 `audit_file` 工具,在 AI 生成的代码进入你的代码库之前对其进行验证。 ### GitHub Action 在每个 pull request 中自动审计 AI 生成的代码。两个独立的 AI 模型会对你的代码更改进行交叉验证,并将结果直接作为 PR 评论发布。 **快速开始:** 1. 将示例工作流复制到你的仓库中: ``` cp .github/workflows/ai-audit.yml.example .github/workflows/ai-audit.yml ``` 2. 添加至少一个 API key 作为仓库密钥: `Settings → Secrets and variables → Actions → New repository secret` | 密钥 | 是否必需 | 描述 | |--------|----------|-------------| | `OPENAI_API_KEY` | 推荐 | 主审计模型 (GPT-4o) | | `ANTHROPIC_API_KEY` | 可选 | 用于跨提供商验证的辅助模型 | 3. 创建一个 pull request —— 审计会自动运行并发布评论。 **配置:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `brain1` | `gpt-4o` | 主审计模型 | | `brain2` | `claude-3-5-sonnet` | 辅助审计模型 | | `path` | 更改的文件 | 要审计的文件或目录 | | `requirement` | — | 自定义审计要求 | | `fail_on` | `never` | 使工作流失败的条件:`reject` / `review` / `never` | | `comment_mode` | `both` | 显示模式:`pr` / `summary` / `both` | | `api_key_openai` | — | OpenAI API Key | | `api_key_anthropic` | — | Anthropic API Key | **多提供商支持:** Audison 支持 10 个 API 提供商。设置以下任一额外密钥即可启用更多模型: `DASHSCOPE_API_KEY` · `DEEPSEEK_API_KEY` · `GOOGLE_API_KEY` · `ZHIPU_API_KEY` · `MOONSHOT_API_KEY` · `MIMO_API_KEY` · `NVIDIA_API_KEY` · `CUSTOM_API_KEY` ### 对比 | 功能 | audison | Mira | 原生 LLM | |---------|-------------------|------|---------| | 开源 | ✅ | ❌ | — | | 多模型仲裁 | ✅ | ✅ | ❌ | | 对抗性审查 | ✅ | ❌ | ❌ | | 不确定性透明度 | ✅ | ❌ | ❌ | | 可验证的证据链 | ✅ | ❌ | ❌ | | 成本 | 免费软件;你只需为自己的 API key 付费 | $X/月 订阅 | 免费(风险自负) | ## 为什么不用 PR-Agent / CodeRabbit / Copilot | | PR-Agent / CodeRabbit / Copilot | audison | |---|---|---| | **审查模型** | 单一模型一次性审查 | 两个模型 + 对抗性对手交叉验证 | | **误报** | 照单全收,你需要人工分类筛选 | 对手大脑挑战并过滤未经证实的声明 | | **分歧** | 不适用(单一模型,无异议) | 标记为 UNCERTAIN 并引用双方观点——由你决定 | | **证据** | PR 线程中的一条审查评论 | SHA-256 散列,带有时间戳的证据链。防篡改。 | | **可审计性** | “相信机器人是这么说的” | 带有密码学证明,可验证发现了什么以及何时发现的 | 区别并不在于“更好”。单一模型审查存在一个根本的天花板:一个模型无法可靠地挑战自身的结论。引入一个对手改变了游戏规则。 ### 进阶:FlowArchitect TrustEngine 审计现有的 AI 输出。FlowArchitect 则是从一开始就在审计的监督下构建输出。当“生成后再审查”不够用时——你会希望对手在规划阶段就在场。 ``` from audison import FlowArchitect async def main(): architect = FlowArchitect(config={"brain1": "gpt-4o"}) result = await architect.run("Design a user management system") # Brain #1 plans → Opponent challenges → You approve → Experts execute → Brain #2 audits ``` → [完整的 FlowArchitect 文档](docs/flow-architect.md) ## 项目结构 ``` audison/ ├── src/audison/ │ ├── engine/ # TrustEngine — standalone audit layer │ │ ├── trust_engine.py # Core audit interface │ │ ├── trust_report.py # TrustReport schema + serialization (JSON/MD/HTML) │ │ └── audit_context.py # AuditContext for project metadata │ ├── brains/ │ │ ├── brain_one.py # Brain #1: requirement analysis + blueprint generation │ │ ├── brain_two.py # Brain #2: quality arbitration (cross-model) │ │ └── brain_opponent.py # Opponent Brain: 5 adversarial review styles │ ├── core/ │ │ ├── architect.py # Three-phase orchestration + user approval loop │ │ ├── scheduler.py # Serial execution + 4 token-saving mechanisms │ │ ├── context.py # Session CRUD + history compression │ │ └── cache.py # CRUD + TTL + hit stats │ ├── experts/ # Expert team: creative, evaluator, programmer, reviewer │ ├── utils/ │ │ ├── llm_client.py # Unified LLM client (8 providers) │ │ ├── token_counter.py # Token counting + cost estimation │ │ ├── compressor.py # Context compression (4 strategies) │ │ └── validator.py # Input validation │ └── templates/ │ └── report.html # Jinja2 template for --html export ├── tests/unit/ # 186 unit tests ├── docs/ │ ├── flow-architect.md │ ├── getting_started.md │ └── sample-report.html # Example TrustReport (open in browser) ├── .env.example ├── pyproject.toml └── models.yaml # Provider + model configuration ``` ## 路线图 - [x] **GitHub Action** —— 带有双模型交叉验证的自动化 PR 审查评论 - [ ] **PyPI 包** —— `pip install audison` - [ ] **角色市场** —— 社区贡献的对抗性审查风格 (`/personas`) - [ ] **社区挑战** —— “你能打败我们的对手大脑吗?”挑战赛 - [x] **HTML 报告导出** —— 自包含、可共享的审计报告 - [x] **CLI 界面** —— 带有 `--html`, `--json`, `--markdown` 参数的 `audison audit` - [x] **TrustEngine** —— 多仲裁者 + 对抗性 + 证据链 - [x] **模型提供商** —— OpenAI + Anthropic 经过生产测试,另外还有 5 个兼容协议提供商 - [ ] **并行执行** —— 独立的步骤并发运行 - [ ] **流式输出** —— 实时专家输出流 ## 可复现性 / 基准测试 Conscience 自我挑战框架允许你仅用一条命令即可复现系统健康报告: ``` # 运行所有 50 个 benchmark 问题 python scripts/benchmark.py # 随机抽取 10 个问题的子集(使用固定 seed) python scripts/benchmark.py --subset 10 --seed 42 # 导出 JSON 报告 python scripts/benchmark.py --output report.json # 列出有争议的测试项(排除在核心指标之外) python scripts/benchmark.py --list-disputed ``` **测试内容:** - **30 个代码级别的挑战**:SQL 注入、XSS、命令注入、路径遍历、硬编码密钥、弱加密、资源泄漏、竞态条件、不安全的反序列化、SSRF - **20 个逻辑级别的挑战**:因果谬误、循环论证、统计滥用、虚假两难、滑坡谬误、诉诸权威 **输出指标:** - 准确率(判定匹配率) - 召回率(发现覆盖率) - F1 score - 分类细分(安全性、谬误) - 带有执行时间的单项结果 **核心原则:** - 评判过程 LLM 零参与——纯粹与标准答案进行现场比对 - 诚实标注:所有指标均标注了置信度、数据源和波动范围 - 有争议的项目会被标记并从核心健康度计算中剔除 - 与历史基准线对比,设置 5% 的漂移警报阈值 ## 贡献 欢迎各种贡献。如果你用我们兼容列表中还没有的提供商测试了该引擎,这本身就是一个非常有价值的 PR。 ``` git clone https://github.com/wdnmd1265/Audison.git cd audison pip install -e ".[html]" pytest tests/unit/ -v # 186 tests ```  ## 社区 Audison 是一个开源项目,由关心 AI 代码质量的开发者为开发者群体构建。 - **[CONTRIBUTING.md](CONTRIBUTING.md)** — 如何参与,从报告 Bug 到提交 PR - **[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)** — 我们的社区标准 (Contributor Covenant 2.1) - **[SECURITY.md](SECURITY.md)** — 漏洞报告流程和支持的版本 - **[GitHub Discussions](https://github.com/wdnmd1265/Audison/discussions)** — 提问、分享想法并与其他用户交流 ### 贡献方式 | 内容 | 工作量 | 影响力 | |------|--------|--------| | 测试新的 LLM 提供商 | 30 分钟 | 为所有人扩展兼容性 | | 报告幻觉边界情况 | 15 分钟 | 提升检测准确度 | | 完善文档 | 2 小时 | 帮助新用户更快上手 | | 提交 Bug 修复 | 视情况而定 | 保持引擎的可靠性 | 每一项贡献都要经过双模型对抗性审查——包括我们自己的代码。吃自己的狗粮(自身实践)。 ## 许可证 [Apache License 2.0](LICENSE) — 版权所有 2026 盛鑫AI 提出。AI 挑战。你做决定。
标签:DLL 劫持, Petitpotam, 人工智能, 代码审查, 大语言模型, 用户模式Hook绕过, 质量保证, 逆向工具