247 lines
4.9 KiB
Markdown
247 lines
4.9 KiB
Markdown
# 代码审查阶段 Prompt 模板
|
|
|
|
## 目标
|
|
|
|
启动3个子代理独立完整审查代码,发现问题并提出改进建议。
|
|
|
|
## 审查子代理 Prompt
|
|
|
|
```
|
|
你是一个资深代码审查专家。请对以下代码变更进行完整审查。
|
|
|
|
## 项目信息
|
|
- 项目名称: {project_name}
|
|
- 审查范围: 本次开发的所有变更
|
|
|
|
## 变更文件列表
|
|
{changed_files_list}
|
|
|
|
## 变更详情
|
|
{changes_diff}
|
|
|
|
## 审查要求
|
|
|
|
请进行**完整、独立**的代码审查,覆盖以下所有维度:
|
|
|
|
### 1. 代码质量
|
|
- 命名是否清晰、一致
|
|
- 代码结构是否合理
|
|
- 是否有重复代码
|
|
- 是否有过度复杂的设计
|
|
|
|
### 2. 功能正确性
|
|
- 代码是否实现了预期功能
|
|
- 边界条件是否处理
|
|
- 错误处理是否完善
|
|
|
|
### 3. 性能
|
|
- 是否有性能问题
|
|
- 是否有不必要的计算
|
|
- 是否有内存泄漏风险
|
|
|
|
### 4. 安全性
|
|
- 是否有安全漏洞
|
|
- 敏感数据处理是否安全
|
|
- 输入验证是否完善
|
|
|
|
### 5. 可维护性
|
|
- 代码是否易于理解
|
|
- 是否有足够的注释
|
|
- 是否符合项目规范
|
|
|
|
### 6. 测试覆盖
|
|
- 测试是否充分
|
|
- 是否有遗漏的测试场景
|
|
|
|
## 输出格式
|
|
|
|
```markdown
|
|
# 代码审查报告
|
|
|
|
## 审查信息
|
|
- 审查者: Agent {A/B/C}
|
|
- 审查时间: {timestamp}
|
|
- 审查文件数: {file_count}
|
|
|
|
## 发现的问题
|
|
|
|
### 严重问题 (必须修复)
|
|
|
|
#### ISSUE-001: {issue_title}
|
|
- **文件**: {file_path}
|
|
- **行号**: {line_number}
|
|
- **问题**: {description}
|
|
- **影响**: {impact}
|
|
- **建议修复**: {suggestion}
|
|
|
|
#### ISSUE-002: ...
|
|
|
|
---
|
|
|
|
### 一般问题 (建议修复)
|
|
|
|
#### ISSUE-003: {issue_title}
|
|
- **文件**: {file_path}
|
|
- **问题描述**: {description}
|
|
- **建议**: {suggestion}
|
|
|
|
---
|
|
|
|
### 改进建议 (可选)
|
|
|
|
#### SUGGEST-001: {suggestion_title}
|
|
- **当前实现**: {current}
|
|
- **建议改进**: {improvement}
|
|
- **收益**: {benefit}
|
|
|
|
---
|
|
|
|
## 代码亮点
|
|
|
|
1. {highlight_1}
|
|
2. {highlight_2}
|
|
|
|
## 总结
|
|
|
|
- 严重问题: {critical_count}
|
|
- 一般问题: {major_count}
|
|
- 改进建议: {suggestion_count}
|
|
|
|
**整体评价**: 优秀/良好/需改进/不合格
|
|
|
|
## 审查结论
|
|
- [ ] 可以合并
|
|
- [ ] 需要修复后合并
|
|
- [ ] 需要重大修改
|
|
```
|
|
|
|
请仔细审查每一行代码,不要遗漏任何潜在问题。
|
|
```
|
|
|
|
## 三个审查子代理
|
|
|
|
```python
|
|
def spawn_review_agents(changes: dict) -> list:
|
|
"""启动3个代码审查子代理"""
|
|
|
|
agents = [
|
|
{"id": "X", "focus": "全面审查"},
|
|
{"id": "Y", "focus": "全面审查"},
|
|
{"id": "Z", "focus": "全面审查"}
|
|
]
|
|
|
|
results = []
|
|
|
|
for agent in agents:
|
|
prompt = build_review_prompt(changes, agent)
|
|
|
|
result = spawn_subagent(
|
|
task=f"代码审查 - Agent {agent['id']}",
|
|
prompt=prompt,
|
|
output_file=f".planning/dev-workflow/code-review/review-{agent['id']}.md"
|
|
)
|
|
|
|
results.append(result)
|
|
|
|
return results
|
|
```
|
|
|
|
## 问题汇总
|
|
|
|
主代理收集三个审查结果后,汇总问题:
|
|
|
|
```python
|
|
def consolidate_issues(reviews: list) -> dict:
|
|
"""汇总三个审查的问题"""
|
|
|
|
all_issues = {
|
|
"critical": [],
|
|
"major": [],
|
|
"suggestion": []
|
|
}
|
|
|
|
for review in reviews:
|
|
for issue in review.get("issues", []):
|
|
# 检查是否已存在相同问题
|
|
existing = find_similar_issue(issue, all_issues[issue["severity"]])
|
|
|
|
if existing:
|
|
# 多个审查者发现同一问题,增加权重
|
|
existing["found_by"].append(review["agent_id"])
|
|
existing["confidence"] += 1
|
|
else:
|
|
issue["found_by"] = [review["agent_id"]]
|
|
issue["confidence"] = 1
|
|
all_issues[issue["severity"]].append(issue)
|
|
|
|
# 按置信度排序
|
|
for severity in all_issues:
|
|
all_issues[severity].sort(key=lambda x: x["confidence"], reverse=True)
|
|
|
|
return all_issues
|
|
```
|
|
|
|
## 问题汇总报告
|
|
|
|
```markdown
|
|
# 代码审查汇总
|
|
|
|
## 统计
|
|
|
|
| 审查者 | 严重 | 一般 | 建议 |
|
|
|--------|------|------|------|
|
|
| Agent X | 2 | 3 | 5 |
|
|
| Agent Y | 1 | 4 | 3 |
|
|
| Agent Z | 2 | 2 | 6 |
|
|
|
|
## 严重问题 (3个,多人确认)
|
|
|
|
### ISSUE-CRIT-001: SQL注入风险 (X, Y, Z 都发现)
|
|
- **文件**: src/db/queries.py:45
|
|
- **问题**: 用户输入未转义直接拼接到SQL
|
|
- **建议**: 使用参数化查询
|
|
|
|
### ISSUE-CRIT-002: 空指针异常 (X, Z 发现)
|
|
- **文件**: src/services/user.py:120
|
|
- **问题**: 未检查返回值是否为None
|
|
- **建议**: 添加空值检查
|
|
|
|
---
|
|
|
|
## 一般问题 (5个)
|
|
|
|
### ISSUE-MAJ-001: 命名不规范 (Y 发现)
|
|
...
|
|
|
|
---
|
|
|
|
## 改进建议 (8个)
|
|
|
|
### SUGGEST-001: 可以提取公共函数 (X, Z 发现)
|
|
...
|
|
|
|
---
|
|
|
|
## 下一步
|
|
|
|
需要修复 **3个严重问题** 和 **5个一般问题**
|
|
```
|
|
|
|
## 状态更新
|
|
|
|
```json
|
|
{
|
|
"phases": {
|
|
"8": {
|
|
"status": "completed",
|
|
"issues": {
|
|
"critical": 3,
|
|
"major": 5,
|
|
"suggestion": 8
|
|
},
|
|
"reviews": ["review-X.md", "review-Y.md", "review-Z.md"]
|
|
}
|
|
}
|
|
}
|
|
```
|