37j Issue 工作流与 AI 绩效分析
上一篇: 37i 部署运维与安全 | 上级目录: 37a 全景架构与决策框架
本篇解决一个实际问题:小团队没有标准 Git Workflow、没有 Code Review、深度使用 AI Coding,如何搭建轻量 Issue 工作流,并利用 AI 从 GitHub 数据中客观评价开发者的产出、效率和代码质量。文档从”建流程”到”做评价”完整覆盖,所有方案均面向 30 人以下团队设计,强调低摩擦落地。
1. 为什么需要 Issue 工作流
1.1 没有 Issue 的代价
没有 Issue 意味着 commit 是”孤立的代码变更”,AI 只能看到”改了什么”,但不知道”为什么改”和”改得对不对”。
| 缺失的信息 | 影响 |
|---|---|
| 为什么改 | AI 无法判断 commit 是在做功能、修 bug 还是打杂 |
| 改得对不对 | 没有验收标准,无法评估完成度 |
| 谁决定要改 | 无法区分主动贡献和被动执行 |
| 花了多久 | 无法评估效率,只能看提交时间戳 |
| 改完效果如何 | 无法追踪功能上线后的业务影响 |
用一个比喻:只看 git log 评绩效,就像只看一个人每天走了多少步来评估健身效果 — 不知道他是在跑步还是在原地踏步。
1.2 Issue 的核心价值
Issue 不是为了”管理”开发者,而是为了给每个 commit 一个”为什么”:
没有 Issue:
commit: "fix: update user model" ← AI 只能猜这是在干嘛
有 Issue:
Issue #42: "用户注册后邮箱验证失败"
commit: "fix: update user model (closes #42)" ← AI 知道这是在修一个具体的 bug有了这个关联,AI 就能做到:
- 统计每人每月解决了多少个 Issue(产出)
- 计算从 Issue 创建到关闭的时间(效率)
- 追踪 Issue 关闭后是否被重新打开(质量)
- 分析 Issue 的复杂度和影响范围(价值)
2. 轻量 Issue 工作流设计
2.1 设计原则
| 原则 | 说明 | 反面教材 |
|---|---|---|
| 30 秒创建 | 一个 Issue 的创建时间不超过 30 秒 | 要求填 10 个字段的 Jira 模板 |
| 不改变习惯 | 在飞书群里说一句话就能创建 Issue | 要求登录另一个系统填表 |
| AI 补全 | 人只提供最少信息,AI 补全其余字段 | 所有字段都要人手动填 |
| 自然关联 | commit message 里写 #42 就自动关联 | 需要在两个系统里手动关联 |
| 服务于分析 | Issue 数据最终服务于 AI 绩效分析 | Issue 创建了但没人看 |
2.2 Issue 类型(只需要 3 种)
不要搞复杂的分类体系。小团队只需要 3 种 Issue:
| 类型 | 标签 | 说明 | 示例 |
|---|---|---|---|
| feature | feature | 新功能开发 | 新增 Solana 课程模块 |
| bug | bug | 缺陷修复 | Safari 下进度条显示异常 |
| chore | chore | 维护性工作 | 升级 Next.js 到 v16 |
2.3 Issue 模板(极简版)
Feature Issue 模板
---
name: 功能需求
about: 新功能
title: '[Feature] '
labels: feature
---
## 做什么
{一句话描述}
## 为什么
{解决什么问题 / 带来什么价值}
## 完成标准
- [ ] {标准 1}
- [ ] {标准 2}Bug Issue 模板
---
name: Bug
about: 缺陷报告
title: '[Bug] '
labels: bug
---
## 问题
{一句话描述}
## 复现
{怎么触发}
## 期望
{应该是什么样}Chore Issue 模板
---
name: 维护
about: 重构、升级、配置变更
title: '[Chore] '
labels: chore
---
## 做什么
{一句话描述}
## 原因
{为什么要做}2.4 飞书 → GitHub Issue 自动创建
这是降低摩擦的关键 — 开发者不需要打开 GitHub 创建 Issue,在飞书群里说一句话就行。
通过 OpenClaw Agent 实现:
开发者在飞书群:
@Agent 创建 issue:修复 Safari 下课程进度条显示问题
Agent 自动执行:
1. 解析消息,提取标题和类型(bug)
2. 通过 GitHub MCP 创建 Issue
3. 回复飞书消息,附 Issue 链接创建 skills/code/code-issue-create.md:
# code-issue-create
从飞书消息中提取信息,自动在 GitHub 创建 Issue。
## 触发条件
用户消息包含"创建 issue"、"提 issue"、"新建 issue"、"记一个 bug"、"要做一个"。
## 执行步骤
1. 从用户消息中提取:
- 标题(必填)
- 类型:feature / bug / chore(AI 自动判断)
- 描述(可选)
- 仓库(如果团队有多个仓库,从记忆中读取默认仓库或让用户指定)
2. 通过 GitHub MCP 创建 Issue,自动添加对应标签
3. 如果是 bug 类型,追问复现步骤(可选)
4. 回复飞书消息,附 Issue 链接
5. 将 Issue 信息写入记忆
## 输出格式
✅ Issue 已创建
- #42 [Bug] Safari 下课程进度条显示异常
- 仓库:hackquest/web-app
- 链接:https://github.com/hackquest/web-app/issues/42
## 权限要求
- GitHub MCP(Issue 创建权限)
- 飞书消息读取权限2.5 Commit 关联 Issue 的规范
只需要一个简单规则:commit message 里带上 Issue 编号。
# 推荐格式
git commit -m "feat: add solana course page (#42)"
git commit -m "fix: progress bar on safari (#43)"
git commit -m "chore: upgrade next.js to v16 (#44)"
# 关闭 Issue 的关键词
git commit -m "fix: progress bar display (closes #43)"
git commit -m "fix: progress bar display (fixes #43)"GitHub 会自动识别 #42 并在 Issue 页面显示关联的 commit。使用 closes 或 fixes 关键词时,PR 合并后 Issue 会自动关闭。
落地建议:不要强制要求每个 commit 都关联 Issue。要求”每个功能/bug 至少有一个 commit 关联对应 Issue”就够了。中间的小 commit 不关联没关系。
2.6 工作流全景
飞书群说一句话 ──→ Agent 创建 GitHub Issue
│
▼
开发者认领 Issue
│
▼
开发(AI Coding / 手写)
│
▼
commit message 带 #Issue编号
│
▼
push 到 GitHub(可选:创建 PR)
│
▼
Issue 自动关闭(closes #xx)
│
▼
AI 绩效分析系统采集数据3. AI 绩效分析:数据采集
3.1 可采集的数据源
| 数据源 | 采集方式 | 提供的信息 |
|---|---|---|
| GitHub Issues | GitHub API | Issue 类型、创建时间、关闭时间、指派人、标签 |
| GitHub Commits | GitHub API | commit message、diff、作者、时间、关联 Issue |
| GitHub PRs | GitHub API | PR 大小、审查评论、合并时间(如果有 PR 流程) |
| 飞书多维表格 | lark-mcp | 需求状态、优先级、迭代归属(如果用了 37c 的表格) |
| OpenClaw 记忆 | 内置 | Agent 交互记录、Skill 执行历史 |
3.2 数据采集脚本
以下脚本通过 GitHub API 采集一个月内的开发者数据:
"""
GitHub 开发者月度数据采集
采集 Issues、Commits、PRs 数据,输出结构化 JSON 供 AI 分析
"""
import os
import json
from datetime import datetime, timedelta
from github import Github # PyGithub
gh = Github(os.environ["GITHUB_TOKEN"])
repo = gh.get_repo("your-org/your-repo")
# 时间范围:最近 30 天
since = datetime.now() - timedelta(days=30)
until = datetime.now()
def collect_issues(assignee: str) -> list[dict]:
"""采集某人被指派的 Issue"""
issues = repo.get_issues(
assignee=assignee,
state="all",
since=since
)
return [{
"number": i.number,
"title": i.title,
"labels": [l.name for l in i.labels],
"state": i.state,
"created_at": i.created_at.isoformat(),
"closed_at": i.closed_at.isoformat() if i.closed_at else None,
"cycle_days": (i.closed_at - i.created_at).days if i.closed_at else None,
} for i in issues if i.pull_request is None] # 排除 PR
def collect_commits(author: str) -> list[dict]:
"""采集某人的 commit"""
commits = repo.get_commits(author=author, since=since, until=until)
result = []
for c in commits:
# 获取 diff 统计
stats = c.stats
files = [f.filename for f in c.files] if c.files else []
result.append({
"sha": c.sha[:8],
"message": c.commit.message.split("\n")[0], # 只取第一行
"date": c.commit.author.date.isoformat(),
"additions": stats.additions if stats else 0,
"deletions": stats.deletions if stats else 0,
"files_changed": len(files),
"files": files[:10], # 最多记录 10 个文件
"linked_issue": extract_issue_number(c.commit.message),
})
return result
def extract_issue_number(message: str) -> int | None:
"""从 commit message 中提取 Issue 编号"""
import re
match = re.search(r'#(\d+)', message)
return int(match.group(1)) if match else None
def collect_developer_data(github_username: str) -> dict:
"""采集单个开发者的完整月度数据"""
issues = collect_issues(github_username)
commits = collect_commits(github_username)
return {
"developer": github_username,
"period": f"{since.strftime('%Y-%m-%d')} ~ {until.strftime('%Y-%m-%d')}",
"issues": {
"total": len(issues),
"closed": len([i for i in issues if i["state"] == "closed"]),
"by_type": {
"feature": len([i for i in issues if "feature" in i["labels"]]),
"bug": len([i for i in issues if "bug" in i["labels"]]),
"chore": len([i for i in issues if "chore" in i["labels"]]),
},
"avg_cycle_days": avg([i["cycle_days"] for i in issues if i["cycle_days"]]),
"details": issues,
},
"commits": {
"total": len(commits),
"with_issue_link": len([c for c in commits if c["linked_issue"]]),
"link_rate": safe_pct(
len([c for c in commits if c["linked_issue"]]), len(commits)
),
"total_additions": sum(c["additions"] for c in commits),
"total_deletions": sum(c["deletions"] for c in commits),
"active_days": len(set(c["date"][:10] for c in commits)),
"details": commits,
},
}
def avg(nums: list) -> float | None:
return round(sum(nums) / len(nums), 1) if nums else None
def safe_pct(a: int, b: int) -> str:
return f"{round(a / b * 100, 1)}%" if b > 0 else "N/A"
# 采集团队所有成员
team = ["zhangsan", "lisi", "wangwu"]
report = [collect_developer_data(user) for user in team]
# 输出 JSON 供 AI 分析
with open("dev_report.json", "w") as f:
json.dump(report, f, ensure_ascii=False, indent=2)3.3 采集数据结构示例
{
"developer": "zhangsan",
"period": "2026-07-01 ~ 2026-07-31",
"issues": {
"total": 12,
"closed": 10,
"by_type": { "feature": 5, "bug": 4, "chore": 3 },
"avg_cycle_days": 3.2,
"details": [
{
"number": 42,
"title": "[Feature] 新增 Solana 课程模块",
"labels": ["feature"],
"state": "closed",
"created_at": "2026-07-03T10:00:00",
"closed_at": "2026-07-10T16:00:00",
"cycle_days": 7
}
]
},
"commits": {
"total": 47,
"with_issue_link": 38,
"link_rate": "80.9%",
"total_additions": 3200,
"total_deletions": 890,
"active_days": 19,
"details": [
{
"sha": "a1b2c3d4",
"message": "feat: add solana course page (#42)",
"date": "2026-07-05T14:30:00",
"additions": 450,
"deletions": 20,
"files_changed": 8,
"files": ["src/pages/courses/solana.tsx", "src/api/courses.ts"],
"linked_issue": 42
}
]
}
}4. AI 绩效分析:评价维度
4.1 三大维度七项指标
| 维度 | 指标 | 权重 | 数据来源 | 说明 |
|---|---|---|---|---|
| 产出 | ① 功能块交付数 | 25% | Issue(closed + feature/bug) | AI 聚类后的有意义功能单元数量 |
| 产出 | ② 工作结构 | 10% | Issue 标签分布 | feature / bug / chore 的比例,反映工作内容 |
| 效率 | ③ Issue 周期 | 15% | Issue 创建→关闭时间差 | 从接手到完成的平均天数 |
| 效率 | ④ 节奏稳定性 | 10% | commit 时间分布 | 活跃天数、是否有长时间断档 |
| 质量 | ⑤ AI 代码评审评分 | 20% | AI 分析 commit diff | 对每个 diff 做自动 code review |
| 质量 | ⑥ 回退/修复率 | 10% | commit 关联分析 | 自己的 commit 被 revert 或后续 bugfix 的频率 |
| 质量 | ⑦ 技术债净变化 | 10% | AI 扫描 diff | TODO/hack/any/硬编码的净增减 |
4.2 指标详解
① 功能块交付数(产出核心指标)
不要数 commit 数量,要数”完成了几件有意义的事”。
有 Issue 时:直接统计关闭的 feature 和 bug Issue 数量,按复杂度加权。
| Issue 复杂度 | 判断标准 | 权重 |
|---|---|---|
| 大型 | 关联 commit > 10 个,跨 5+ 文件,周期 > 5 天 | ×3 |
| 中型 | 关联 commit 3-10 个,跨 2-5 文件 | ×2 |
| 小型 | 关联 commit 1-3 个,改 1-2 个文件 | ×1 |
没有 Issue 时:让 AI 从 commit 历史中反推功能块。
AI 分析 Prompt:
以下是开发者 zhangsan 在 2026 年 7 月的所有 commit 记录。
请将这些 commit 聚类为"功能块",每个功能块代表一个完整的功能开发或 bug 修复。
对每个功能块评估:
1. 功能块名称(一句话描述)
2. 包含的 commit 列表
3. 复杂度(大/中/小)
4. 类型(feature/bug/chore)
{commit_list_json}② 工作结构(产出辅助指标)
统计 Issue 类型分布,反映这个人的工作内容构成:
| 分布模式 | 解读 | 是否健康 |
|---|---|---|
| feature 60% + bug 30% + chore 10% | 以功能开发为主,兼顾修 bug | ✅ 健康 |
| bug 70% + chore 20% + feature 10% | 大量时间在修 bug 和打杂 | ⚠️ 需关注,可能是技术债过重 |
| chore 60% + feature 30% + bug 10% | 大量维护性工作 | ⚠️ 看是否在做必要的基础设施升级 |
| feature 90% | 只做新功能,不修 bug | ⚠️ 可能在留坑 |
注意:工作结构没有”标准答案”。基础设施工程师 chore 占比高是正常的,前端开发 feature 占比高也是正常的。要结合角色看。
③ Issue 周期(效率核心指标)
从 Issue 创建到关闭的天数,反映交付速度。
| 周期 | 评价 | 说明 |
|---|---|---|
| < 1 天 | 快速响应 | 适合小 bug 和 hotfix |
| 1-3 天 | 高效 | 中型任务的理想周期 |
| 3-7 天 | 正常 | 大型功能的合理周期 |
| 7-14 天 | 偏慢 | 需要分析是否有阻塞 |
| > 14 天 | 异常 | 可能是 Issue 粒度太大或被阻塞 |
关键:要按 Issue 复杂度分层看,不能把大型 feature 和小 bug 放在一起算平均值。
④ 节奏稳定性(效率辅助指标)
| 指标 | 计算方式 | 健康值 |
|---|---|---|
| 月活跃天数 | 有 commit 的天数 | ≥ 18 天(工作日的 80%+) |
| 最长断档 | 连续无 commit 的最大天数 | ≤ 3 个工作日 |
| 提交时间分布 | 工作时间 vs 非工作时间 commit 比例 | 非工作时间 < 20%(加班不是好事) |
| 周内分布 | 周一到周五的 commit 分布 | 相对均匀,不集中在周五突击 |
⑤ AI 代码评审评分(质量核心指标)
这是 AI 最能发挥价值的维度。让 AI 对每个 commit 的 diff 做自动 code review,从多个角度打分。
评审 Prompt 模板:
你是一个资深代码审查员。请对以下 Git diff 进行代码评审,从 5 个维度打分(1-5 分)。
评审维度:
1. 正确性:代码逻辑是否正确,是否有明显 bug
2. 可维护性:命名是否清晰,结构是否合理,是否容易理解
3. 安全性:是否有安全隐患(注入、XSS、硬编码密钥、权限检查缺失)
4. 健壮性:是否处理了边界情况、错误处理是否完善
5. 规范性:是否符合项目代码规范(如果提供了 CLAUDE.md 则参考)
对每个维度给出 1-5 分和一句话理由。最后给出综合评分(5 个维度的加权平均)。
权重:正确性 30%,可维护性 25%,安全性 20%,健壮性 15%,规范性 10%
Commit: {commit_message}
Diff:
{diff_content}评审结果示例:
{
"commit": "a1b2c3d4",
"message": "feat: add solana course page (#42)",
"scores": {
"correctness": { "score": 4, "reason": "逻辑正确,但缺少课程不存在时的 404 处理" },
"maintainability": { "score": 5, "reason": "组件拆分合理,命名清晰" },
"security": { "score": 3, "reason": "API 端点缺少权限校验中间件" },
"robustness": { "score": 3, "reason": "缺少 loading 和 error 状态处理" },
"convention": { "score": 5, "reason": "符合项目 App Router 约定" }
},
"weighted_score": 3.95,
"summary": "功能实现完整,但安全性和健壮性需要加强"
}月度汇总:计算所有 commit 的加权平均分,得到月度代码质量评分。
| 月度评分 | 评价 |
|---|---|
| 4.5+ | 优秀,代码质量稳定高水平 |
| 4.0-4.5 | 良好,偶有小问题 |
| 3.5-4.0 | 合格,有改进空间 |
| 3.0-3.5 | 需关注,质量波动较大 |
| < 3.0 | 需要介入,可能存在系统性问题 |
⑥ 回退/修复率(质量辅助指标)
统计一个人的 commit 后续被 revert 或被 bugfix 修复的频率,反映”一次做对”的能力。
检测方法:
git log --grep="revert"找到 revert commit,追溯被 revert 的原始 commit 作者- 分析 bug 类型 Issue 关联的 commit,追溯引入 bug 的原始 commit 作者
- 统计比例:
被修复的 commit 数 / 总 commit 数
| 回退率 | 评价 |
|---|---|
| < 2% | 优秀 |
| 2-5% | 正常 |
| 5-10% | 需关注 |
| > 10% | 需要介入 |
⑦ 技术债净变化(质量辅助指标)
AI 扫描每个 diff,统计技术债信号的净增减:
| 信号 | 检测方式 | 说明 |
|---|---|---|
| TODO/FIXME/HACK | 正则匹配 diff 中的新增和删除 | 净增加说明在留坑 |
any 类型 | TypeScript diff 中的 any 关键词 | AI 偷懒的典型信号 |
类型断言 as | TypeScript diff 中的 as XXX | 绕过类型检查 |
| 硬编码值 | AI 识别 diff 中的魔法数字和字符串 | 应该提取为常量或配置 |
| 重复代码 | AI 判断新增代码是否与已有代码重复 | copy-paste 编程 |
| 缺少错误处理 | AI 判断异步操作是否有 try-catch | 裸奔的 API 调用 |
| 未使用的导入/变量 | 静态分析 | AI 生成代码的常见问题 |
月度汇总:技术债净变化 = 新增技术债信号数 - 消除技术债信号数
| 净变化 | 评价 |
|---|---|
| < 0 | 优秀,在主动消除技术债 |
| 0 | 中性,没有增加也没有减少 |
| 1-5 | 可接受,少量新增 |
| > 5 | 需关注,技术债在快速积累 |
5. AI Coding 场景的特殊评价
5.1 AI Coding 改变了什么
深度使用 AI Coding 后,传统指标的含义发生了根本变化:
| 传统指标 | AI Coding 前的含义 | AI Coding 后的含义 |
|---|---|---|
| 代码行数 | 大致反映工作量 | 几乎无意义,AI 一次生成几百行 |
| commit 数量 | 大致反映活跃度 | 可能膨胀(AI 生成→人修改→再提交) |
| 代码风格 | 反映个人编码习惯 | AI 生成的代码风格通常不差 |
| 注释完整度 | 反映文档意识 | AI 自动生成注释,不再稀缺 |
5.2 AI Coding 时代真正有价值的能力
AI 写代码的能力越强,“写代码”本身的价值越低,人的价值转移到了决策上:
| 能力 | 说明 | 如何评价 |
|---|---|---|
| 需求拆解 | 把模糊需求拆成 AI 能执行的明确任务 | Issue 的描述质量、Spec 文件质量 |
| 审查修正 | AI 生成代码后,人做了什么修正 | AI 评审评分中的安全性和健壮性维度 |
| 系统性思维 | 新代码是否与现有架构一致 | AI 评审评分中的规范性维度 |
| 上下文工程 | 是否为 AI 建立了可复用的 context | 规则文件、Spec 文件、steering 文件的贡献 |
| 质量把关 | 是否能识别 AI 生成代码中的隐患 | 回退率、技术债净变化 |
5.3 AI Coding 专项检测指标
在第 4 节的 7 项通用指标之外,针对 AI Coding 场景增加以下检测:
| 检测项 | 检测方式 | 说明 |
|---|---|---|
| 死代码比例 | 静态分析(未使用的函数、变量、导入) | AI 经常生成用不到的代码 |
| 依赖膨胀 | 对比 package.json diff | AI 爱引入新依赖解决小问题 |
any 密度 | TypeScript 文件中 any 出现频率 | AI 偷懒绕过类型系统 |
| 硬编码密度 | AI 识别魔法数字和字符串常量 | AI 经常把配置值写死 |
| 测试覆盖 | 新功能是否带了测试文件 | AI 生成功能代码但经常不写测试 |
| 重复实现 | AI 比对新代码与已有代码的相似度 | AI 不知道项目里已有类似功能 |
| 过度工程 | AI 判断实现复杂度是否超出需求 | AI 倾向于生成”完整但冗余”的方案 |
AI Coding 质量评审 Prompt 补充:
额外评审维度(AI Coding 场景):
6. AI 代码审查:这段代码是否有典型的 AI 生成痕迹?
- 是否有未使用的导入或变量
- 是否引入了不必要的新依赖
- 是否有过度抽象(需求只要一个简单函数,却生成了完整的类层次结构)
- 是否有 copy-paste 痕迹(与项目中已有代码高度相似但未复用)
- 类型系统是否被绕过(any、类型断言)
给出 1-5 分:
5 = 代码经过充分审查和精简,无 AI 生成的典型问题
3 = 有少量 AI 生成痕迹但不影响功能
1 = 明显是 AI 生成后未经审查直接提交5.4 AI Coding 场景的评价体系调整
在深度使用 AI Coding 的团队中,建议将第 4.1 节的权重调整为:
| 维度 | 指标 | 通用权重 | AI Coding 权重 | 调整原因 |
|---|---|---|---|---|
| 产出 | 功能块交付数 | 25% | 30% | AI 提效后,产出量应该更高 |
| 产出 | 工作结构 | 10% | 5% | 重要性不变但权重让给质量 |
| 效率 | Issue 周期 | 15% | 10% | AI 加速后周期普遍缩短,区分度降低 |
| 效率 | 节奏稳定性 | 10% | 5% | 同上 |
| 质量 | AI 代码评审评分 | 20% | 25% | AI 生成代码更需要审查把关 |
| 质量 | 回退/修复率 | 10% | 10% | 不变 |
| 质量 | 技术债净变化 | 10% | 15% | AI 代码容易积累技术债 |
核心逻辑:AI Coding 让”写代码”变容易了,所以产出的门槛提高,质量的权重加大。
6. AI 分析 Prompt 与报告生成
6.1 月度分析 Prompt
将采集到的数据喂给 AI,生成结构化的月度绩效分析报告:
你是一个技术团队的绩效分析助手。请根据以下开发者的月度 GitHub 数据,
生成绩效分析报告。
评价维度和权重:
- 产出(35%):功能块交付数(加权)+ 工作结构
- 效率(15%):Issue 周期 + 节奏稳定性
- 质量(50%):代码评审评分 + 回退率 + 技术债净变化
团队背景:
- 30 人以下的开发团队
- 深度使用 AI Coding(Cursor / Claude Code / Kiro)
- 没有标准的 Code Review 流程
- 刚建立 Issue 工作流
注意事项:
1. 分析结果是参考,不是判决。要指出数据的局限性
2. 不要只看数字,要结合上下文解读(比如某人 commit 少可能是在做架构设计)
3. 对 AI Coding 场景要特别关注代码质量维度
4. 给出具体的改进建议,而不是笼统的评价
开发者数据:
{developer_data_json}
代码评审结果:
{code_review_results_json}
请输出以下格式的报告:6.2 报告模板
# 开发者月度绩效分析:{name}
**分析周期**:{period}
**分析模型**:{model_name}
**数据来源**:GitHub Issues + Commits + AI Code Review
---
## 一、总览
| 维度 | 评分 | 等级 | 说明 |
|------|------|------|------|
| 产出 | {score}/5 | {level} | {one_line_summary} |
| 效率 | {score}/5 | {level} | {one_line_summary} |
| 质量 | {score}/5 | {level} | {one_line_summary} |
| **综合** | **{weighted_score}/5** | **{level}** | |
## 二、产出分析
### 功能块交付
本月完成 {feature_count} 个功能、{bug_count} 个 bug 修复、{chore_count} 个维护任务。
按复杂度加权后的产出分:{weighted_output_score}
| 功能块 | 类型 | 复杂度 | Issue | 关联 commit 数 |
|--------|------|--------|-------|---------------|
### 工作结构
feature {f_pct}% / bug {b_pct}% / chore {c_pct}%
解读:{interpretation}
## 三、效率分析
### Issue 周期
- 平均周期:{avg_cycle} 天
- 最快:{min_cycle} 天({fastest_issue})
- 最慢:{max_cycle} 天({slowest_issue})
### 节奏
- 活跃天数:{active_days}/22 个工作日
- 最长断档:{max_gap} 天
- 提交时间分布:工作时间 {work_pct}% / 非工作时间 {off_pct}%
## 四、质量分析
### AI 代码评审
- 月度平均评分:{avg_review_score}/5
- 最高分 commit:{best_commit}({best_score})
- 最低分 commit:{worst_commit}({worst_score})
- 主要扣分项:{top_deduction_reasons}
### 回退/修复率
- 被 revert 的 commit:{revert_count}/{total_commits}({revert_rate})
- 引入后续 bugfix 的 commit:{bugfix_count}
### 技术债
- 新增技术债信号:{debt_added}
- 消除技术债信号:{debt_removed}
- 净变化:{debt_net}({debt_trend})
## 五、AI Coding 专项(如适用)
- 死代码引入:{dead_code_count} 处
- 新增依赖:{new_deps_count} 个({necessary_count} 个必要 / {unnecessary_count} 个可疑)
- any 类型使用:{any_count} 处
- 测试覆盖:新功能 {test_coverage_pct}% 带了测试
## 六、改进建议
1. {suggestion_1}
2. {suggestion_2}
3. {suggestion_3}
## 七、数据局限性声明
本报告基于 GitHub 数据自动生成,存在以下局限:
- 无法衡量架构设计、技术方案讨论等非代码贡献
- 无法衡量 Code Review 中给他人的帮助(如果没有 PR 流程)
- AI 代码评审可能存在误判,建议结合人工判断
- 工作量不等于价值,10 行关键代码可能比 1000 行模板代码更重要6.3 报告示例(完整)
以下是一份 AI 生成的月度绩效分析报告示例:
# 开发者月度绩效分析:张三
**分析周期**:2026-07-01 ~ 2026-07-31
**分析模型**:Claude Sonnet 4
**数据来源**:GitHub Issues + Commits + AI Code Review
---
## 一、总览
| 维度 | 评分 | 等级 | 说明 |
|------|------|------|------|
| 产出 | 4.2/5 | 良好 | 完成 5 个功能 + 4 个 bug 修复,产出量高于团队平均 |
| 效率 | 3.8/5 | 良好 | 平均周期 3.2 天,节奏稳定 |
| 质量 | 3.5/5 | 合格 | 代码评审均分 3.9,但技术债有净增长 |
| **综合** | **3.8/5** | **良好** | |
## 二、产出分析
### 功能块交付
本月完成 5 个功能、4 个 bug 修复、3 个维护任务。
| 功能块 | 类型 | 复杂度 | Issue | commit 数 |
|--------|------|--------|-------|----------|
| Solana 课程模块 | feature | 大型 | #42 | 12 |
| 课程搜索优化 | feature | 中型 | #45 | 6 |
| 用户 Dashboard 改版 | feature | 中型 | #48 | 8 |
| 移动端适配 | feature | 小型 | #51 | 3 |
| API 缓存层 | feature | 中型 | #53 | 5 |
| Safari 进度条 bug | bug | 小型 | #43 | 2 |
| 登录超时问题 | bug | 小型 | #46 | 1 |
| 课程排序异常 | bug | 小型 | #49 | 2 |
| 支付回调丢失 | bug | 中型 | #52 | 4 |
| Next.js 升级 | chore | 中型 | #44 | 3 |
| 依赖安全更新 | chore | 小型 | #47 | 1 |
| CI 配置优化 | chore | 小型 | #50 | 2 |
加权产出分:大型×3 + 中型×2×4 + 小型×1×4 = 3+8+4 = 15(团队平均 10)
### 工作结构
feature 42% / bug 33% / chore 25%
解读:以功能开发为主,bug 修复占比偏高,建议关注代码质量以减少后续 bug。
## 三、效率分析
### Issue 周期
- 平均周期:3.2 天
- 最快:0.5 天(#46 登录超时问题)
- 最慢:7 天(#42 Solana 课程模块 — 大型功能,周期合理)
### 节奏
- 活跃天数:19/22 个工作日(86%)
- 最长断档:2 天(7/14-7/15,团队 outing)
- 提交时间分布:工作时间 82% / 非工作时间 18%
## 四、质量分析
### AI 代码评审
- 月度平均评分:3.9/5
- 最高分:#53 API 缓存层(4.6 — 设计合理,错误处理完善)
- 最低分:#51 移动端适配(3.1 — 缺少响应式断点测试,硬编码了多个像素值)
- 主要扣分项:安全性(API 权限校验缺失 3 处)、健壮性(错误处理不完善 5 处)
### 回退/修复率
- 被 revert:0 次
- 引入后续 bugfix:2 次(#43 的修复不完整,后续 #49 再次修复了相关问题)
- 回退率:2/47 = 4.3%(正常范围)
### 技术债
- 新增:TODO 3 处、any 2 处、硬编码 4 处 = 9 处
- 消除:TODO 1 处、旧 hack 2 处 = 3 处
- 净变化:+6(需关注,技术债在积累)
## 五、AI Coding 专项
- 死代码:2 处未使用的导入(#48 Dashboard 改版)
- 新增依赖:2 个(date-fns 必要,lodash.debounce 可用原生替代)
- any 使用:2 处(#51 移动端适配中的事件处理)
- 测试覆盖:5 个新功能中 3 个带了测试(60%)
## 六、改进建议
1. **安全性**:建议在 API 路由中统一添加权限校验中间件,
而不是在每个端点单独处理。本月有 3 处遗漏
2. **测试覆盖**:移动端适配和 Dashboard 改版缺少测试,
建议 AI 生成功能代码时同步要求生成测试
3. **技术债**:本月净增 6 处技术债信号,建议每周花 1-2 小时
专门清理 TODO 和 any 类型
## 七、数据局限性声明
本报告基于 GitHub 数据自动生成,存在以下局限:
- 张三本月参与了 3 次架构讨论会,这些贡献未体现在数据中
- 张三帮助新人王五解决了多个技术问题,这些 mentoring 贡献无法量化
- AI 代码评审可能存在误判,建议结合 manager 的日常观察7. Agent 自动化:绩效分析 Skill
7.1 月度绩效分析 Skill
将整个分析流程封装为 OpenClaw Skill,每月自动执行:
创建 skills/team/team-dev-performance.md:
# team-dev-performance
自动采集 GitHub 数据,结合 AI 代码评审,生成开发者月度绩效分析报告。
## 触发条件
- 定时触发:每月 1 日 10:00(分析上月数据)
- 手动触发:用户消息包含"绩效分析"、"开发者报告"、"月度评估"
## 执行步骤
1. 从人员表获取所有开发角色的成员及其 GitHub ID
2. 对每个开发者:
a. 通过 GitHub MCP 采集上月的 Issues(assigned + closed)
b. 通过 GitHub MCP 采集上月的 Commits(author 匹配)
c. 对每个 commit 的 diff 执行 AI 代码评审(采样:commit 数 > 30 时随机抽 30 个)
d. 统计回退率(搜索 revert commit)
e. 统计技术债变化(扫描 diff 中的 TODO/any/硬编码)
3. 计算各维度评分
4. 生成个人绩效报告
5. 生成团队对比报告
6. 发送个人报告到各自飞书私聊
7. 发送团队报告到管理层群
## 团队对比报告模板
📊 开发团队月度绩效对比({month})
| 成员 | 产出 | 效率 | 质量 | 综合 | 趋势 |
|------|------|------|------|------|------|
📈 团队趋势:
- 平均产出分:{avg} (上月 {last_month},{trend})
- 平均质量分:{avg} (上月 {last_month},{trend})
- 团队技术债净变化:{total_debt_net}
## 隐私保护
- 个人详细报告只发给本人和直属 manager
- 团队对比报告只发给管理层
- 不在公开群展示个人排名
## 权限要求
- GitHub MCP(Issues + Commits 读取)
- 飞书多维表格读取(人员表)
- 飞书消息发送(私聊 + 群聊)
- LLM API(代码评审)7.2 成本估算
| 项目 | 计算方式 | 月成本 |
|---|---|---|
| GitHub API 调用 | 免费(在 rate limit 内) | ¥0 |
| AI 代码评审 | 10 人 × 30 commit × ~2K tokens/次 = 600K tokens | ¥30-60 |
| 报告生成 | 10 人 × ~5K tokens/份 = 50K tokens | ¥3-5 |
| 合计 | ¥33-65/月 |
对比人工做绩效评估的时间成本(manager 每人花 2 小时 × 10 人 = 20 小时),AI 自动化的 ROI 非常高。
8. 落地路线图
8.1 分阶段实施
| 阶段 | 时间 | 目标 | 具体动作 |
|---|---|---|---|
| 第一阶段 | 第 1 周 | 建立 Issue 习惯 | 配置 Issue 模板,部署飞书→Issue 自动创建 Skill |
| 第二阶段 | 第 2-3 周 | 数据积累 | 团队开始用 Issue,commit 关联 Issue 编号 |
| 第三阶段 | 第 4 周 | 首次分析 | 运行数据采集脚本,生成第一份月度报告 |
| 第四阶段 | 第 2 个月 | 自动化 | 部署绩效分析 Skill,每月自动生成报告 |
| 第五阶段 | 第 3 个月 | 校准优化 | 根据反馈调整权重和评审 Prompt |
8.2 第一阶段:建立 Issue 习惯的关键动作
| 动作 | 负责人 | 说明 |
|---|---|---|
| 在 GitHub 仓库配置 Issue 模板 | 技术负责人 | 使用 2.3 节的极简模板 |
| 部署 code-issue-create Skill | 技术负责人 | 让团队在飞书群里创建 Issue |
| 团队宣导 | Manager | 说明 Issue 是为了提效,不是为了监控 |
| 以身作则 | Manager + 技术负责人 | 自己先用起来,每天在飞书群创建 1-2 个 Issue |
| 不强制 | — | 前两周不要求 100% 覆盖,让团队自然适应 |
关键心态:Issue 工作流的推行要像推广一个好用的工具,而不是推行一个管理制度。如果团队感知到”建 Issue 是为了被监控”,执行质量会很差。
8.3 第三阶段:首次分析的注意事项
第一份报告很重要,它决定了团队对 AI 绩效分析的信任度:
| 注意事项 | 说明 |
|---|---|
| 先给 manager 看 | 不要直接发给全团队,先让 manager 审阅 |
| 标注数据不足 | 第一个月 Issue 覆盖率可能只有 50%,要在报告中说明 |
| 不做排名 | 第一份报告不要做团队排名,只做个人分析 |
| 收集反馈 | 问每个人”报告是否准确反映了你的工作” |
| 调整权重 | 根据反馈调整各维度权重 |
8.4 持续优化
| 优化方向 | 方法 | 时机 |
|---|---|---|
| 评审 Prompt 优化 | 根据误判案例调整 Prompt | 每月 |
| 权重校准 | 对比 AI 评分和 manager 主观评价,调整权重 | 每季度 |
| 新增数据源 | 接入飞书日历(会议时间)、知识库(文档贡献) | 第 3 个月后 |
| 趋势分析 | 积累 3 个月数据后,分析个人和团队的趋势变化 | 第 4 个月 |
| 跨团队对比 | 如果公司有多个开发团队,做跨团队基准对比 | 第 6 个月 |
9. 反模式与避坑指南
9.1 绩效分析的常见反模式
| 反模式 | 问题 | 正确做法 |
|---|---|---|
| 数行数 | 激励写冗余代码,AI 一次生成几百行毫无意义 | 数功能块,看 Issue 完成数 |
| 数 commit 数 | 激励拆碎 commit 凑数量 | 看活跃天数和节奏稳定性 |
| 只看速度 | 激励赶工,牺牲质量 | 效率权重不超过 20%,质量权重 ≥ 40% |
| 公开排名 | 制造内卷和对立 | 个人报告只给本人和 manager |
| AI 评分当判决 | AI 可能误判,伤害信任 | 明确标注”参考”,结合人工判断 |
| 忽略非代码贡献 | 架构讨论、mentoring、文档 无法量化 | 在报告中声明局限性,manager 补充定性评价 |
| 一刀切权重 | 前端和后端的工作模式不同 | 按角色调整权重(见 9.2) |
9.2 按角色调整权重
不同角色的工作模式不同,权重应该有差异:
| 角色 | 产出权重 | 效率权重 | 质量权重 | 说明 |
|---|---|---|---|---|
| 前端开发 | 35% | 15% | 50% | 前端代码直接面向用户,质量影响大 |
| 后端开发 | 30% | 15% | 55% | 后端代码影响数据安全和系统稳定性 |
| 全栈开发 | 35% | 15% | 50% | 综合考虑 |
| 基础设施/DevOps | 20% | 20% | 60% | 基础设施代码出错影响全局,质量最重要 |
| 技术负责人 | 25% | 10% | 40% + 定性 25% | 大量时间在架构设计和 review,需要定性评价补充 |
9.3 AI 评审的已知局限
| 局限 | 说明 | 缓解方式 |
|---|---|---|
| 无法理解业务逻辑 | AI 不知道”课程进度”的业务含义 | 在 Prompt 中提供项目 CLAUDE.md 作为上下文 |
| 对大 diff 效果差 | 超过 500 行的 diff AI 容易遗漏问题 | 大 diff 拆分评审,或只评审关键文件 |
| 风格偏好 | AI 可能偏好某种编码风格 | 在 Prompt 中明确项目的编码规范 |
| 误报 | 某些”问题”在特定上下文中是合理的 | 允许开发者对评审结果提出异议 |
| 无法评估架构决策 | AI 看单个 diff 无法判断架构合理性 | 架构评估需要人工补充 |
10. 工具与资源推荐
| 工具 | 用途 | 价格 | 链接 |
|---|---|---|---|
| PyGithub | Python GitHub API 客户端 | 开源免费 | GitHub |
| GitHub MCP Server | Agent 直接调用 GitHub API | 开源免费 | GitHub |
| SonarQube | 静态代码分析(复杂度、重复率) | 社区版免费 | 官网 |
| CodeClimate | 代码质量自动评估 | 开源项目免费 | 官网 |
| LinearB | 工程效能分析平台 | $20/开发者/月 | 官网 |
| Waydev | AI 驱动的工程分析 | 按团队规模定价 | 官网 |
| OpenClaw | Agent 运行时(自动化 Skill) | 开源免费 | GitHub |
11. 总结:AI 绩效分析的核心原则
- Issue 是基础 — 没有 Issue,AI 只能猜。有了 Issue,AI 能理解”为什么改”
- 数功能块,不数行数 — 让 AI 聚类 commit 为有意义的功能单元
- 质量权重 ≥ 40% — AI Coding 时代,写代码变容易了,质量把关才是稀缺能力
- AI 评审读 diff 语义 — 不是数行数,而是理解”这个 commit 做了什么、做得好不好”
- 报告是参考,不是判决 — manager 对团队的了解不可替代,AI 帮他量化直觉
- 低摩擦落地 — 30 秒创建 Issue,飞书群里说一句话就行,不要增加负担
- 持续校准 — 每月收集反馈,调整权重和 Prompt,让分析越来越准
上级目录: 37a 全景架构与决策框架 — 回到第 37 章全景架构,了解 Issue 工作流在整体 Agent 体系中的位置