Files
magpie/docs/plans/2026-01-26-magpie-design.md
Li Liu db8651dfe0 chore: initialize project structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 12:12:42 +08:00

12 KiB
Raw Permalink Blame History

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 只做两件事:

  1. 传话 - A 说完 → 传给 B → B 反驳 → 传给 C → ...
  2. 管理流程 - 启动、轮数控制、结束、触发总结、输出结果

AI 自己负责:

  • 获取 PR 信息(调用 gh pr viewgh 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 号
  • 调用 CLImagpie 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 可能遗漏的问题。

后续步骤

  1. 初始化项目结构
  2. 实现 CLI 核心:配置加载、AI 调用、辩论编排
  3. 实现流式输出
  4. 实现 VSCode 插件
  5. 测试和迭代