Expert Review
使用 AI 扮演多位领域顶级专家,从不同视角并行审查同一内容。
核心能力
- 自动识别内容所属领域
- 选择该领域 5 位顶级专家(多样性优先)
- 支持预设专家 + AI 智能补充
- 并行启动 5 个 subagent 扮演专家
- 汇总共识点与分歧点
执行流程概述
1. 确定审查内容 → 用户指定或智能推断
2. 领域识别 → 分析内容,确定所属领域
3. 专家选择 → 预设为主 + AI 补位(共 5 位)
4. 用户确认 → 展示专家阵容(可 --skip-confirm 跳过)
5. 并行审查 → 5 个 Task tool 同时启动
6. 汇总报告 → 提取共识、分歧、综合建议
详细执行流程
Step 1: 确定审查内容
优先级:
- 用户明确指定(文件/文本/commit)
- 智能推断:
- 检查 staged changes:
git diff --cached --name-only - 检查最近 commit:
git log -1 --format=%H - 如都无,询问用户
- 检查 staged changes:
推断后必须确认:
- "检测到 staged changes,是否审查这些变更?"
- "检测到最近的 commit [hash],是否审查该 commit?"
Step 2: 领域识别
分析待审查内容,识别所属领域。
识别方法:
- 分析内容的主题、关键词、文件类型
- 匹配到
.reviews/experts.yaml中的领域 - 如果无法匹配,让 AI 自主判断最相关领域
常见领域映射示例:
| 内容特征 | 识别领域 | |----------|----------| | ML/DL/神经网络/模型训练 | machine-learning | | Prompt/提示词/LLM/Agent | prompt-engineering | | API/微服务/架构设计 | software-architecture | | React/Vue/CSS/前端组件 | frontend-development | | PRD/用户体验/产品需求 | product-design | | 文档/教程/README | technical-writing | | 漏洞/加密/认证授权 | security |
领域识别输出:
识别领域:prompt-engineering
领域描述:提示词工程、LLM 应用、AI Agent
匹配依据:内容包含提示词设计、角色定义、输出格式控制
Step 3: 专家选择
策略:预设为主 + AI 补位
- 读取
.reviews/experts.yaml(如不存在,使用内置默认值) - 查找该领域的预设专家
- 如预设不足 5 位,AI 智能补充
AI 补充原则(多样性优先):
- 不与预设专家重复
- 不与已选专家视角雷同
- 覆盖不同流派:理论派、工程派、产品派、批评者、跨界者等
- 考虑知名度和权威性
专家数据结构:
expert:
name: "专家姓名"
perspective: "该专家的视角/流派描述"
source: "preset" | "ai_generated"
选择流程伪代码:
# 1. 读取配置
config = load_yaml('.reviews/experts.yaml') or DEFAULT_CONFIG
# 2. 获取预设专家
preset_experts = config.domains[domain].experts or []
# 3. 计算需要补充的数量
need_count = 5 - len(preset_experts)
# 4. AI 补充
if need_count > 0:
ai_experts = ai_generate_experts(
domain=domain,
existing=preset_experts,
count=need_count,
principle="diversity"
)
all_experts = preset_experts + ai_experts
else:
all_experts = preset_experts[:5]
默认领域专家(当无 experts.yaml 时):
当配置文件不存在时,AI 应根据识别的领域自主选择 5 位该领域的顶级专家,遵循多样性原则。
Step 4: 用户确认
默认模式(需确认):
展示专家阵容,等待用户确认:
┌────────────────────────────────────────┐
│ 🎭 专家阵容 │
├────────────────────────────────────────┤
│ 领域:机器学习 │
│ │
│ 1. Ilya Sutskever (理论派) [预设] │
│ 2. Andrej Karpathy (工程派) [预设] │
│ 3. 吴恩达 (教育派) [预设] │
│ 4. Yann LeCun (批评者) [AI补充] │
│ 5. Fei-Fei Li (跨界视觉) [AI补充] │
├────────────────────────────────────────┤
│ [确认执行] [更换专家] [取消] │
└────────────────────────────────────────┘
使用 AskUserQuestion 工具实现确认:
questions:
- question: "以上专家阵容是否合适?"
header: "专家确认"
options:
- label: "确认执行"
description: "使用当前专家阵容开始审查"
- label: "更换专家"
description: "我想替换某位专家"
- label: "取消"
description: "取消本次审查"
multiSelect: false
跳过确认的场景:
- 用户指定
--skip-confirm参数 - 示例:
expert-review my-file.md --skip-confirm
更换专家流程: 如果用户选择"更换专家",询问:
- 要替换哪位专家?
- 想换成谁?(或让 AI 重新推荐)
Step 5: 并行审查
⚠️ 关键:必须在单个消息中同时启动所有 5 个 subagent!
使用 Task tool 并行启动 5 个 subagent,每个扮演一位专家。
创建输出目录:
review_dir=".reviews/${content_name}_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$review_dir"
Task tool 参数模板:
对于每位专家,发起一个 Task tool 调用:
subagent_type: "general-purpose"
model: "sonnet" # 统一使用 sonnet
prompt: |
你现在是 {{expert.name}}。
## 你的背景与视角
{{expert.perspective}}
## 你的审查风格
请以 {{expert.name}} 的思维方式、知识背景和表达风格来审查以下内容。
思考:
- 这位专家会首先关注什么?
- 这位专家的核心评判标准是什么?
- 这位专家会如何表达观点和批评?
## 待审查内容
类型:{{content.type}}
领域:{{domain}}
---
{{content.body}}
---
## 输出要求
以第一人称("我")撰写审查意见,体现 {{expert.name}} 的独特视角。
### 输出格式
# {{expert.name}} 的审查意见
## 总体印象
(一段话概述整体看法)
## 优点
1. **优点 1**:说明
2. **优点 2**:说明
## 需要改进的地方
1. **问题 1**
- 位置:xxx
- 问题:xxx
- 建议:xxx
## 核心建议
(最重要的 1-3 条建议)
## 一句话总结
(用一句话总结审查意见)
---
请将完整审查结果写入:{{output_file}}
并行启动示例(5 个 Task tool 调用):
在单个响应中同时发起 5 个 Task tool 调用:
## Task 1: Ilya Sutskever
subagent_type: "general-purpose"
model: "sonnet"
prompt: [上述模板,expert = Ilya]
description: "Expert review by Ilya"
## Task 2: Andrej Karpathy
subagent_type: "general-purpose"
model: "sonnet"
prompt: [上述模板,expert = Karpathy]
description: "Expert review by Karpathy"
## Task 3: 吴恩达
...
## Task 4: Yann LeCun
...
## Task 5: Fei-Fei Li
...
错误示范(不要这样做):
❌ 先启动 Ilya,等待完成
❌ 再启动 Karpathy,等待完成
❌ 依次完成所有专家
正确示范:
✅ 在单个消息中同时发起 5 个 Task tool 调用
✅ 所有专家并行执行
✅ 等待所有完成后汇总
Step 6: 汇总报告
等待所有 subagent 完成后,读取所有独立报告进行汇总。
汇总步骤:
- 读取结果:读取
.reviews/<dir>/review_*.md所有文件 - 提取共识:识别多位专家都认同的观点
- 标注分歧:识别专家之间的不同看法,列出各自立场
- 综合建议:基于所有意见生成行动建议
生成文件:
summary.md:汇总报告meta.json:元数据
summary.md 格式:
## 专家审查汇总
### 审查内容
- 类型:{{content_type}}
- 领域:{{domain}}
- 目标:{{target}}
### 专家阵容
| 专家 | 视角/流派 | 来源 | 状态 | 耗时 |
|------|----------|------|------|------|
| Ilya Sutskever | 理论派 | 预设 | ✅ | 32s |
| Andrej Karpathy | 工程派 | 预设 | ✅ | 28s |
| 吴恩达 | 教育派 | 预设 | ✅ | 35s |
| Yann LeCun | 批评者 | AI补充 | ✅ | 30s |
| Fei-Fei Li | 跨界视觉 | AI补充 | ✅ | 33s |
### 共识点
(多位专家都认同的观点)
1. **观点 1** [Ilya, Karpathy, 吴恩达]
- 具体描述...
2. **观点 2** [全员共识]
- 具体描述...
### 分歧点
(专家之间的不同看法)
1. **话题:XXX**
- Ilya 认为:...
- LeCun 认为:...
- 分歧本质:...
### 综合建议
(基于所有专家意见的行动建议)
1. **优先处理**:...
2. **建议改进**:...
3. **可以保留**:...
### 详细报告链接
- [Ilya Sutskever 的审查意见](review_ilya-sutskever.md)
- [Andrej Karpathy 的审查意见](review_andrej-karpathy.md)
- [吴恩达的审查意见](review_andrew-ng.md)
- [Yann LeCun 的审查意见](review_yann-lecun.md)
- [Fei-Fei Li 的审查意见](review_fei-fei-li.md)
meta.json 格式:
{
"id": "my-prompt_20251229_143052",
"timestamp": "2025-12-29T14:30:52+08:00",
"review_target": {
"type": "file",
"value": "prompts/my-prompt.md"
},
"domain": "prompt-engineering",
"domain_description": "提示词工程、LLM 应用、AI Agent",
"experts": [
{
"name": "Anthropic 提示词工程师",
"perspective": "安全与对齐优先",
"source": "preset",
"status": "success",
"duration_seconds": 32.5,
"output_file": "review_anthropic-prompt-engineer.md"
}
],
"summary": {
"total_experts": 5,
"success_count": 5,
"failed_count": 0,
"timeout_count": 0,
"consensus_points": 3,
"divergence_points": 2
}
}
使用示例
示例 1:审查 Prompt 文件
用户:expert-review prompts/my-agent-prompt.md
执行流程:
- 读取文件内容
- 识别领域:prompt-engineering
- 选择专家(预设 2 位 + AI 补充 3 位)
- 展示专家阵容,等待确认
- 并行审查
- 输出汇总
示例 2:审查设计文档(跳过确认)
用户:专家审查 docs/design/auth-design.md --skip-confirm
执行流程:
- 读取文件内容
- 识别领域:software-architecture
- 选择专家
- 跳过确认,直接执行
- 并行审查
- 输出汇总
示例 3:审查最近 commit
用户:expert-review HEAD
执行流程:
- 获取 HEAD commit 的变更内容
- 分析变更,识别主要领域
- 选择专家
- 确认后执行
示例 4:智能推断
用户:多角色审查(无指定内容)
执行流程:
- 检测 staged changes → 询问确认
- 如无 staged,检测最近 commit → 询问确认
- 用户确认后继续
触发词
以下词语会触发 expert-review skill:
expert-review专家审查多角色审查专家评审