Skip to Content

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:

类型标签说明示例
featurefeature新功能开发新增 Solana 课程模块
bugbug缺陷修复Safari 下进度条显示异常
chorechore维护性工作升级 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。使用 closesfixes 关键词时,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 IssuesGitHub APIIssue 类型、创建时间、关闭时间、指派人、标签
GitHub CommitsGitHub APIcommit message、diff、作者、时间、关联 Issue
GitHub PRsGitHub APIPR 大小、审查评论、合并时间(如果有 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 扫描 diffTODO/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 偷懒的典型信号
类型断言 asTypeScript 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 diffAI 爱引入新依赖解决小问题
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%综合考虑
基础设施/DevOps20%20%60%基础设施代码出错影响全局,质量最重要
技术负责人25%10%40% + 定性 25%大量时间在架构设计和 review,需要定性评价补充

9.3 AI 评审的已知局限

局限说明缓解方式
无法理解业务逻辑AI 不知道”课程进度”的业务含义在 Prompt 中提供项目 CLAUDE.md 作为上下文
对大 diff 效果差超过 500 行的 diff AI 容易遗漏问题大 diff 拆分评审,或只评审关键文件
风格偏好AI 可能偏好某种编码风格在 Prompt 中明确项目的编码规范
误报某些”问题”在特定上下文中是合理的允许开发者对评审结果提出异议
无法评估架构决策AI 看单个 diff 无法判断架构合理性架构评估需要人工补充

10. 工具与资源推荐

工具用途价格链接
PyGithubPython GitHub API 客户端开源免费GitHub 
GitHub MCP ServerAgent 直接调用 GitHub API开源免费GitHub 
SonarQube静态代码分析(复杂度、重复率)社区版免费官网 
CodeClimate代码质量自动评估开源项目免费官网 
LinearB工程效能分析平台$20/开发者/月官网 
WaydevAI 驱动的工程分析按团队规模定价官网 
OpenClawAgent 运行时(自动化 Skill)开源免费GitHub 

11. 总结:AI 绩效分析的核心原则

  1. Issue 是基础 — 没有 Issue,AI 只能猜。有了 Issue,AI 能理解”为什么改”
  2. 数功能块,不数行数 — 让 AI 聚类 commit 为有意义的功能单元
  3. 质量权重 ≥ 40% — AI Coding 时代,写代码变容易了,质量把关才是稀缺能力
  4. AI 评审读 diff 语义 — 不是数行数,而是理解”这个 commit 做了什么、做得好不好”
  5. 报告是参考,不是判决 — manager 对团队的了解不可替代,AI 帮他量化直觉
  6. 低摩擦落地 — 30 秒创建 Issue,飞书群里说一句话就行,不要增加负担
  7. 持续校准 — 每月收集反馈,调整权重和 Prompt,让分析越来越准

上级目录: 37a 全景架构与决策框架 — 回到第 37 章全景架构,了解 Issue 工作流在整体 Agent 体系中的位置

Last updated on