db8651dfe0
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
12 KiB
12 KiB
Magpie - 多 AI 对抗式 PR 审查工具
概述
Magpie 是一个多 AI 对抗式代码审查工具。通过让多个 AI(不同模型 + 不同角色 prompt)互相辩论,暴露盲点,提升 PR 审查质量。
核心理念: Magpie 是一个"中转站",在项目目录内运行,协调多个 AI 之间的辩论,每个 AI 都有完整的项目访问能力。
目标用户场景
- 主要场景:PR 审核
- 工作环境:VSCode(主力)+ GitHub 网页
- 代码托管:GitHub
整体架构
┌─────────────────────────────────────────┐
│ VSCode Extension │
│ (UI层:侧边栏、命令面板、结果展示) │
└─────────────────┬───────────────────────┘
│ 调用
┌─────────────────▼───────────────────────┐
│ Magpie CLI │
│ - 编排 AI 辩论流程 │
│ - 管理配置 │
│ - 在项目目录内运行 │
└─────────────────┬───────────────────────┘
│ 启动
┌─────────────────▼───────────────────────┐
│ AI Reviewers │
│ (各自有完整工具能力:gh、读文件等) │
│ Claude / GPT / Gemini / ... │
└─────────────────────────────────────────┘
CLI 是核心:所有逻辑在 CLI,VSCode 插件只是调用 CLI 并展示结果。
Magpie 核心职责
Magpie 只做两件事:
- 传话 - A 说完 → 传给 B → B 反驳 → 传给 C → ...
- 管理流程 - 启动、轮数控制、结束、触发总结、输出结果
AI 自己负责:
- 获取 PR 信息(调用
gh pr view、gh pr diff等) - 理解项目上下文(按需读取文件)
- 分析 PR、提出观点和反驳
辩论流程
辩论模式
- 对抗式辩论:多个 AI 轮流发言,互相挑战/反驳
- 支持 2+ 个 reviewer:不限于两个 AI
- 轮流发言:A → B → C → A → B → C... 每人依次回应之前所有发言
终止条件
- 设置最大轮数(默认 3 轮)
- 用户可随时介入或提前结束
运行模式
# 全自动模式(默认)- 跑完所有轮次
magpie review 123
# 手动模式 - 每个 AI 发言前暂停,可插话
magpie review 123 --interactive
手动模式下:
[审阅者1 发言完毕]
按 Enter 继续 / 输入内容插话 / 输入 q 结束辩论
> _
完整流程
用户: magpie review 123
┌─────────────────────────────────────────────────────┐
│ 1. 启动辩论者 │
│ AI-A (角色 prompt A) │
│ AI-B (角色 prompt B) │
│ AI-C (角色 prompt C) │
│ ... 都在项目目录下运行,有完整工具能力 │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 2. 辩论循环(轮流发言) │
│ A: 自己获取 PR 信息,分析,提出观点 │
│ ↓ (Magpie 传话) │
│ B: 看到 A 的观点,反驳/补充 │
│ ↓ (Magpie 传话) │
│ C: 看到 A、B 的观点,反驳/补充 │
│ ↓ │
│ ... 重复直到: 达到最大轮数 / 用户介入 │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 3a. 双方各自总结(匿名) │
│ │
│ AI-A → "请总结你的核心观点,不要透露身份" │
│ → 观点总结 1 │
│ │
│ AI-B → "请总结你的核心观点,不要透露身份" │
│ → 观点总结 2 │
│ │
│ AI-C → ... │
│ → 观点总结 3 │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 3b. 第三方总结 │
│ │
│ 新开 AI (中立 prompt) │
│ 输入: 所有匿名观点总结 │
│ 输出: │
│ - 共识点 │
│ - 分歧点及分析 │
│ - 最终建议 / action items │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 4. 输出 │
│ → VSCode 侧边栏显示(流式) │
│ → 或 markdown 文件 │
└─────────────────────────────────────────────────────┘
CLI 设计
核心命令
# 审核一个 PR
magpie review <pr-url-or-number>
# 例如
magpie review 123
magpie review https://github.com/user/repo/pull/123
常用选项
# 指定配置文件(默认读取 ~/.magpie/config.yaml)
magpie review 123 --config ./custom-config.yaml
# 控制辩论轮数
magpie review 123 --rounds 5
# 手动模式(可插话)
magpie review 123 --interactive
# 输出格式
magpie review 123 --output report.md # 输出到文件
magpie review 123 --format json # JSON 格式(供 VSCode 插件解析)
辅助命令
magpie init # 初始化配置文件
magpie config validate # 验证配置文件
流式输出
$ magpie review 123
正在审查 PR #123...
[审阅者1 - 发言中...]
> 我注意到这个 PR 在 auth.ts:42 有一个潜在的...
> SQL 注入风险,用户输入直接拼接到查询中...
[审阅者2 - 发言中...]
> 同意安全问题,另外我注意到这里的循环...
配置文件设计
全局配置 ~/.magpie/config.yaml:
# AI 提供商密钥
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
openai:
api_key: ${OPENAI_API_KEY}
google:
api_key: ${GOOGLE_API_KEY}
# 默认辩论设置
defaults:
max_rounds: 3
output_format: markdown # markdown | json
# 角色配置
reviewers:
security-expert:
model: claude-sonnet-4-20250514
prompt: |
你是一位严格的安全专家。审查代码时重点关注:
- 注入漏洞(SQL、XSS、命令注入)
- 认证和授权问题
- 敏感数据处理
- 依赖安全性
performance-expert:
model: gpt-4o
prompt: |
你是一位性能优化专家。审查代码时重点关注:
- 时间复杂度
- 内存使用
- 不必要的计算或 IO
- 缓存机会
code-quality-expert:
model: gemini-pro
prompt: |
你是一位代码质量专家。审查代码时重点关注:
- 可读性和可维护性
- 设计模式运用
- 测试覆盖
- 文档完整性
# 总结者配置
summarizer:
model: claude-sonnet-4-20250514
prompt: |
你是一位中立的技术评审总结者。
基于多位审阅者的匿名观点,输出客观总结:
- 共识点
- 分歧点及各自理由
- 建议的 action items
VSCode 插件设计
功能极简,只做 UI 壳:
┌─────────────────────────────────────────────────┐
│ VSCode │
│ │
│ ┌─────────────────┐ ┌──────────────────────┐ │
│ │ │ │ Magpie 侧边栏 │ │
│ │ │ │ │ │
│ │ 编辑器 │ │ PR #123 │ │
│ │ │ │ ──────────────────── │ │
│ │ │ │ 审阅者1: 发现SQL注入 │ │
│ │ │ │ 审阅者2: 这里性能有问 │ │
│ │ │ │ 审阅者1: 同意,但安全 │ │
│ │ │ │ ... │ │
│ │ │ │ ──────────────────── │ │
│ │ │ │ 📋 总结 │ │
│ │ │ │ [导出 Markdown] │ │
│ └─────────────────┘ └──────────────────────┘ │
│ │
└─────────────────────────────────────────────────┘
插件职责:
- 命令面板:
Magpie: Review PR,输入 PR 号 - 调用 CLI:
magpie review <pr> --format json - 展示结果:侧边栏实时流式显示辩论过程和总结
- 导出:一键保存为 markdown
不做:
- 不做配置 UI,配置文件编辑就行
- 不做复杂交互,保持简单
技术栈
- 语言:TypeScript + Node.js
- 理由:
- CLI 和 VSCode 插件都是 TypeScript,可共享代码
- npm 生态好,各 AI 提供商都有官方 SDK
- 用户群体(开发者)大概率已有 Node 环境
市场差异化
| 工具 | 描述 | 与 Magpie 差异 |
|---|---|---|
| PR-Agent (CodiumAI) | AI 代码审查 | 单 AI,无对抗 |
| CodeRabbit | AI PR 审查 | 单 AI,无对抗 |
| GitHub Copilot | PR review 功能 | 单 AI,无对抗 |
Magpie 的独特价值:多 AI 对抗式辩论,通过不同视角和互相挑战,发现单一 AI 可能遗漏的问题。
后续步骤
- 初始化项目结构
- 实现 CLI 核心:配置加载、AI 调用、辩论编排
- 实现流式输出
- 实现 VSCode 插件
- 测试和迭代