ai-pr-doctor

Other

AI PR 医生 - 自动诊断 GitHub PR 问题、修复 Bug、生成修复报告的端到端工作流。触发词:PR 诊疗、代码审查、修复 PR、PR 医生、自动合并。

Install

openclaw skills install ai-pr-doctor

AI PR 医生 (ai-pr-doctor)

GitHub PR → AI 代码审查 → 自动修复 → 合并 → 修复报告 → 飞书通知

🎯 解决痛点

  • ❌ 团队 PR 堆积,没人及时 review
  • ❌ 代码审查耗时,漏掉潜在 bug
  • ❌ 简单修复(格式、测试)手动操作太繁琐
  • ❌ 合并后没有记录,不知道修了什么

💡 解决方案

GitHub PR 链接/编号
        ↓
┌──────────────────┐
│  github          │ → gh pr view 获取 PR 信息 + 代码diff
└────────┬─────────┘
         ↓
┌──────────────────┐
│ code-review-skill│ → 5维度 AI 并行审查:CLAUDE.md合规、Bug审计、
└────────┬─────────┘     Git历史分析、过往PR评论、代码注释合规
         ↓
┌──────────────────┐
│ auto-pr-merger  │ → 尝试自动修复 + 重跑测试 + 自动合并
└────────┬─────────┘
         ↓
┌──────────────────┐
│  feishu_doc     │ → 生成修复报告并发布至飞书文档
└──────────────────┘

📦 包含 Skills

Skill作用调用顺序
github获取 PR 信息、代码diff、合并操作1
code-review-skill5维度 AI 并行代码审查2
auto-pr-merger自动修复 + 测试 + 合并3
feishu_doc生成诊疗报告并发布飞书4

🔧 前置要求

  1. gh CLI 已安装并认证 (gh auth status)
  2. GitHub 仓库 可写(用于 auto-pr-merger push 修复)
  3. 飞书机器人 已配置 feishu_doc 权限

📝 使用方法

触发命令

/ai-pr-doctor <PR_URL或编号>
诊断这个 PR
代码审查这个 PR
帮我看看这个 PR

完整命令

# 方式 1:通过 OpenClaw
openclaw run ai-pr-doctor --pr https://github.com/owner/repo/pull/123

# 方式 2:通过 cron 定时检查未合并的 PR
openclaw cron add \
  --name "PR 待审查提醒" \
  --schedule "0 10 * * 1-5" \
  --skill ai-pr-doctor \
  --params '{"mode":"check-pending","repo":"owner/repo"}'

🔄 工作流详情

Step 1: 获取 PR 信息

步骤: 1
技能: github
输入:
  action: pr view
  repo: ${repo_from_input}
  pr_number: ${pr_number}
  output: json
输出:
  pr_title: ${title}
  pr_body: ${body}
  pr_state: ${state}
  changed_files: ${files}
  diff_url: ${diff_url}
  author: ${user.login}

Step 2: AI 代码审查

步骤: 2
技能: code-review-skill
输入:
  pr_url: ${pr_url}
  review_dimensions:
    - CLAUDE.md 合规性审查
    - 浅层 Bug 扫描
    - Git 历史上下文分析
    - 过往 PR 评论对照
    - 代码注释合规检查
  output_format: structured_json
输出:
  issues: ${issue_list}
  severity_scores: ${scores}
  review_summary: ${summary}

Step 3: 自动修复与合并

步骤: 3
技能: auto-pr-merger
输入:
  pr: ${pr_url}
  test: "npm test"  # 可自定义测试命令
  retries: 2
  auto_merge_if_passed: true
输出:
  fixed_files: ${files_modified}
  test_results: ${test_output}
  merge_result: ${merge_state}

Step 4: 生成修复报告

步骤: 4
技能: feishu_doc
输入:
  action: create
  title: "🔬 PR 诊疗报告 #${pr_number} | ${pr_title}"
  content: ${report_markdown}
输出:
  doc_url: ${docUrl}
  doc_id: ${docId}

📊 输出示例:PR 诊疗报告

# 🔬 PR 诊疗报告 #123 | feat: 新增用户认证功能

**仓库**: owner/repo | **PR 链接**: https://github.com/owner/repo/pull/123
**作者**: @zhangsan | **审查时间**: 2026-04-25

---

## 📋 PR 概览

| 字段 | 值 |
|------|-----|
| 状态 | ✅ 已合并 |
| 文件变更 | +127 / -43 |
| 审查轮次 | 1 |
| 自动修复 | 2 处 |

---

## 🩺 AI 审查结果

### 🔴 严重问题 (2)

| # | 文件 | 行号 | 问题描述 |
|---|------|------|---------|
| 1 | src/auth/login.ts | L45 | SQL 注入风险:未使用参数化查询 |
| 2 | src/middleware/logger.ts | L12 | 敏感信息日志外泄 |

### 🟡 中等问题 (3)

| # | 文件 | 问题描述 |
|---|------|---------|
| 1 | src/auth/token.ts | Token 过期时间过长(30天,建议7天)|
| 2 | tests/login.test.ts | 测试覆盖率仅 45%,建议提升至 80% |

### 🟢 低优先级 (1)

| # | 问题 |
|---|------|
| 1 | 缺少 JSDoc 注释 |

---

## 🔧 自动修复记录

| 文件 | 修复内容 | 状态 |
|------|---------|------|
| src/utils/format.ts | Prettier 格式化 | ✅ |
| tests/login.test.ts | Jest 配置修复 | ✅ |
| src/auth/token.ts | Token 过期时间调整 | ⏭️ 跳过(需人工确认)|

---

## ✅ 合并结果

- **自动合并**: 成功
- **CI 状态**: 通过 🟢
- **审查通过**: 2/2 检查项
- **合并时间**: 2026-04-25 20:15 UTC

---

*由 AI PR Doctor 自动生成*

⚙️ 自定义配置

修改测试命令

编辑 workflow.json 中的 auto-pr-merger 配置:

{
  "steps": [
    {
      "id": "step3_merge",
      "skill": "auto-pr-merger",
      "input": {
        "test": "pytest tests/ -v",
        "retries": 3
      }
    }
  ]
}

修改审查维度

{
  "code_review": {
    "dimensions": [
      "security",
      "performance",
      "maintainability",
      "test_coverage"
    ],
    "severity_threshold": 50
  }
}

⚠️ 注意事项

  1. 权限要求: auto-pr-merger 需要对仓库有写权限才能 push 修复
  2. 测试命令: 请根据实际项目修改测试命令,默认 npm test
  3. 安全审查: 涉及安全的 PR 建议人工二次确认
  4. CI 依赖: 依赖 GitHub Actions 状态,建议开启 required checks

📞 故障排除

问题原因解决方案
gh auth 失败未登录运行 gh auth login
自动修复失败代码冲突手动解决冲突后重试
PR 已被合并无需处理跳过此 PR
CI 未通过测试失败查看详细日志,手动修复