37f 产品研发工作流 Agent
上一篇: 37e RAG 知识库搭建 | 下一篇: 37g 数据分析与运营 Agent
本篇实现覆盖完整 SDLC 的 Agent 工作流:从需求收集到上线验收的全流程自动化。核心是事件驱动 + 状态机编排,通过 OpenClaw 记忆系统在 Skill 之间传递上下文,在关键节点保留 Human-in-the-Loop 审批。最后以 HackQuest “新增 Solana 课程模块”为例演示完整流程。
1. 研发流程状态机
1.1 状态定义
1.2 状态转换表
| 当前状态 | 目标状态 | 触发事件 | 执行 Skill | 人工确认 |
|---|---|---|---|---|
| — | 待评审 | 用户提出需求 | requirement-create | ❌ |
| 待评审 | 已通过 | 评审人在飞书确认 | requirement-status-change | ✅ 评审人确认 |
| 待评审 | 已关闭 | 评审人拒绝 | requirement-status-change | ✅ 评审人确认 |
| 已通过 | PRD编写中 | 状态变更事件 | requirement-prd-generate | ❌ 自动触发 |
| PRD编写中 | 设计中 | 产品经理审阅 PRD | requirement-status-change | ✅ PM 确认 |
| 设计中 | 开发中 | 设计评审通过 | requirement-status-change | ✅ 设计评审 |
| 开发中 | 待审查 | 开发者提交 PR | code-pr-review | ❌ 自动检测 |
| 待审查 | 测试中 | CR 通过并合并 | requirement-status-change | ✅ Reviewer 确认 |
| 待审查 | 开发中 | CR 打回 | requirement-status-change | ✅ Reviewer 确认 |
| 测试中 | 待部署 | 测试通过 | requirement-status-change | ✅ 测试确认 |
| 测试中 | 开发中 | 测试不通过 | bug-create | ✅ 测试确认 |
| 待部署 | 已上线 | 部署完成 | ops-deploy-trigger | ✅ 运维确认 |
2. 事件驱动触发
2.1 事件源
| 事件源 | 事件类型 | 触发的 Skill |
|---|---|---|
| 飞书消息 | 用户 @机器人 说”创建需求” | requirement-create |
| 飞书消息 | 用户 @机器人 说”生成 PRD” | requirement-prd-generate |
| 多维表格 | 需求状态字段变更 | requirement-status-change |
| 多维表格 | 缺陷状态字段变更 | bug-status-change |
| GitHub | PR 创建/更新 | code-pr-review |
| GitHub | CI 完成 | code-ci-trigger |
| 定时 | 每天 9:30 | 站会提醒 Skill |
| 定时 | 每周五 17:00 | 迭代总结 Skill |
2.2 事件路由流程
事件到达 OpenClaw
│
▼
识别事件类型
│
├─→ 飞书消息事件 → 意图识别 → 匹配 Skill
├─→ 多维表格变更事件 → 解析变更字段 → 匹配状态转换 Skill
├─→ GitHub Webhook → 解析 PR/CI 事件 → 匹配代码 Skill
└─→ 定时事件 → 直接触发对应 Skill
│
▼
加载上下文(从记忆系统读取相关信息)
│
▼
执行 Skill
│
▼
写入记忆 → 回复用户/更新表格/发送通知3. 核心 Skill 实现
3.1 需求收集 Skill
创建 skills/requirement/requirement-create.md:
# requirement-create
从用户消息中提取需求信息,创建需求记录并归档到飞书多维表格。
## 触发条件
用户消息包含"创建需求"、"新需求"、"提需求"、"我想做一个"等关键词。
## 执行步骤
1. 从用户消息中提取以下信息:
- 标题(必填)
- 描述(可选,如果用户未提供则追问)
- 优先级(可选,默认 P2)
- 所属模块(可选,根据内容自动推断)
2. 如果标题或描述信息不完整,向用户追问缺失字段
3. 从记忆中读取多维表格 app_token 和需求表 table_id
4. 调用 lark-mcp 在需求多维表格中创建记录,状态设为"待评审"
5. 在需求评审群发送通知消息,包含需求摘要和多维表格链接
6. 将需求信息写入记忆,格式:
- 记忆键:requirement_{record_id}
- 内容:标题、描述、优先级、创建人、创建时间
## 输出格式
✅ 需求已创建
- 标题:{title}
- 优先级:{priority}
- 状态:待评审
- 模块:{module}
- 多维表格:[查看]({bitable_link})
已通知评审群,等待评审。
## 示例输出
✅ 需求已创建
- 标题:新增 Solana 课程模块
- 优先级:P1
- 状态:待评审
- 模块:课程
- 多维表格:[查看](https://xxx.feishu.cn/base/xxx)
已通知评审群,等待评审。
## 权限要求
- 飞书多维表格写入权限
- 飞书消息发送权限
## 错误处理
- 多维表格写入失败:提示用户稍后重试,记录错误日志
- 用户信息不完整:最多追问 2 次,仍不完整则创建草稿状态3.2 PRD 生成 Skill
创建 skills/requirement/requirement-prd-generate.md:
# requirement-prd-generate
根据需求信息和知识库上下文,自动生成 PRD 文档草稿。
## 触发条件
- 需求状态从"待评审"变为"已通过"时自动触发
- 用户消息包含"生成 PRD"、"写 PRD"
## 执行步骤
1. 从记忆中读取需求详情(标题、描述、优先级、模块)
2. 调用 knowledge-rag-search 检索相关的历史需求和技术文档
3. 基于需求信息和检索结果,生成 PRD 文档,包含:
- 背景与目标
- 用户故事
- 功能需求(按优先级排列)
- 非功能需求(性能、安全、兼容性)
- 技术方案建议(基于知识库中的架构文档)
- 验收标准
- 里程碑计划
4. 调用 lark-mcp 创建飞书文档,写入 PRD 内容
5. 更新需求多维表格的 PRD 链接字段
6. 在需求评审群发送通知:"PRD 已生成,请 @产品经理 审阅"
7. 将 PRD 文档 token 写入记忆
## 输出格式
📄 PRD 已生成
- 需求:{requirement_title}
- PRD 文档:[查看]({doc_link})
- 状态:AI 生成-待审阅
请 @产品经理 审阅后确认。
## PRD 模板
### {需求标题} — 产品需求文档
#### 1. 背景与目标
(基于需求描述和知识库上下文生成)
#### 2. 用户故事
- 作为 [角色],我希望 [功能],以便 [价值]
#### 3. 功能需求
| 编号 | 功能点 | 优先级 | 描述 |
|------|--------|--------|------|
#### 4. 非功能需求
- 性能:
- 安全:
- 兼容性:
#### 5. 技术方案建议
(基于知识库中的架构文档生成)
#### 6. 验收标准
- [ ] 标准 1
- [ ] 标准 2
#### 7. 里程碑
| 阶段 | 时间 | 交付物 |
## 权限要求
- 飞书文档创建权限
- 飞书多维表格读写权限
- 向量数据库读取权限(RAG 检索)
- 飞书消息发送权限3.3 代码审查 Skill
创建 skills/code/code-pr-review.md:
# code-pr-review
当 GitHub PR 创建或更新时,自动生成审查摘要并关联需求。
## 触发条件
- GitHub PR 创建或更新事件
- 用户消息包含"查看 PR"、"PR 审查"
## 执行步骤
1. 通过 GitHub MCP 获取 PR 详情(标题、描述、变更文件列表、diff)
2. 从 PR 描述或分支名中提取关联的需求编号
3. 从记忆中读取关联需求的上下文
4. 分析 PR 变更:
- 变更文件数和行数统计
- 主要变更内容摘要
- 潜在风险点(大文件变更、敏感文件修改、缺少测试)
5. 生成审查摘要并发送到开发群
6. 如果 PR 关联了需求,更新需求状态为"待审查"
## 输出格式
🔍 PR 审查摘要:#{pr_number} {pr_title}
📊 变更统计:
- 文件数:{files_changed}
- 新增:+{additions} 行
- 删除:-{deletions} 行
📝 主要变更:
- {change_summary_1}
- {change_summary_2}
⚠️ 关注点:
- {risk_point_1}
- {risk_point_2}
🔗 关联需求:{requirement_title}
🔗 PR 链接:{pr_url}
## 权限要求
- GitHub MCP(PR 读取权限)
- 飞书消息发送权限
- 飞书多维表格读写权限(更新需求状态)3.4 测试验收 Skill
创建 skills/requirement/requirement-test-verify.md:
# requirement-test-verify
测试完成后更新需求状态,生成测试报告摘要。
## 触发条件
- 用户消息包含"测试通过"、"验收通过"、"测试不通过"
- 缺陷表中关联需求的所有缺陷状态变为"已关闭"
## 执行步骤
### 测试通过
1. 更新需求状态为"待部署"
2. 统计该需求关联的缺陷数量和修复情况
3. 生成测试报告摘要
4. 通知运维团队准备部署
### 测试不通过
1. 保持需求状态为"测试中"
2. 自动创建缺陷记录(调用 bug-create)
3. 通知开发负责人
## 输出格式(测试通过)
✅ 测试验收通过
- 需求:{requirement_title}
- 关联缺陷:{bug_count} 个(全部已关闭)
- 状态:待部署
- 已通知运维团队
## 权限要求
- 飞书多维表格读写权限
- 飞书消息发送权限4. 跨 Skill 编排
完整的多 Agent 配置和编排文件格式见 37d 第 3 节:多 Agent 编排与配置。跨部门 Agent 全链路协作(如线上故障→修复→复盘的 4 Agent 接力)见 37d 3.9 节:跨部门 Agent 全链路协作。本节聚焦研发工作流中 Skill 之间的上下文传递和链式调用。
4.1 编排配置:研发流程状态机
在 skills/_orchestration/requirement-lifecycle.md 中定义完整的研发流程编排(详见 37d 3.6 节)。核心是将第 1 节的状态机转化为 OpenClaw 可执行的编排配置:
# requirement-lifecycle
需求全生命周期编排。
## 编排类型
事件驱动状态机
## 状态转换定义
### 待评审 → 已通过
- 触发:飞书卡片回调,action = "approve"
- 执行:requirement-status-change(PM Agent)
- 自动链式触发:requirement-prd-generate(PM Agent)
- 委派:dev-agent → code-issue-create
### 已通过 → 开发中
- 触发:PM 确认 PRD + 设计评审通过
- 执行:requirement-status-change(PM Agent)
### 开发中 → 待审查
- 触发:GitHub PR 创建事件
- 执行:code-pr-review(Dev Agent)
- 读取共享记忆:requirement_{id}
### 待审查 → 测试中
- 触发:GitHub PR 合并事件
- 执行:requirement-status-change(PM Agent)
### 测试中 → 待部署
- 触发:用户消息"测试通过"
- 执行:requirement-test-verify(PM Agent)
- 委派:dev-agent → ops-deploy-trigger(需人工确认)
### 待部署 → 已上线
- 触发:运维确认部署(飞书卡片回调)
- 执行:requirement-status-change(PM Agent)
- 通知:项目群上线公告这个编排文件让 OpenClaw 知道”什么事件触发什么 Skill、由哪个 Agent 执行、需不需要委派”,而不是完全依赖 LLM 隐式判断。
4.2 记忆系统传递上下文
OpenClaw 的记忆系统是 Skill 之间传递上下文的核心机制。每个 Skill 执行后将结果写入记忆,下一个 Skill 可以读取。
requirement-create
│ 写入记忆:requirement_rec001 = {title, priority, status, creator}
│
▼
requirement-prd-generate
│ 读取记忆:requirement_rec001
│ 写入记忆:prd_doc_token = {doc_token, doc_url}
│
▼
code-pr-review
│ 读取记忆:requirement_rec001, prd_doc_token
│ 写入记忆:pr_info = {pr_number, pr_url, review_summary}
│
▼
requirement-test-verify
│ 读取记忆:requirement_rec001, pr_info
│ 写入记忆:test_result = {passed, bug_count}
│
▼
ops-deploy-trigger
读取记忆:requirement_rec001, pr_info, test_result4.3 记忆键命名规范
| 记忆键格式 | 说明 | 示例 |
|---|---|---|
requirement_{record_id} | 需求详情 | requirement_rec001 |
bug_{record_id} | 缺陷详情 | bug_rec042 |
prd_{requirement_id} | PRD 文档信息 | prd_rec001 |
pr_{pr_number} | PR 信息 | pr_156 |
sprint_{sprint_name} | 迭代信息 | sprint_2026-W28 |
deploy_{date} | 部署记录 | deploy_2026-07-15 |
4.4 Skill 链式调用
某些场景需要一个 Skill 主动触发另一个 Skill:
## 链式调用示例:需求通过 → 自动生成 PRD
requirement-status-change Skill 检测到状态变为"已通过"后:
1. 更新多维表格状态
2. 将需求信息写入记忆
3. 在回复消息中提示:"需求已通过,正在自动生成 PRD..."
4. OpenClaw 识别到需要调用 requirement-prd-generate
5. requirement-prd-generate 从记忆中读取需求信息,生成 PRD4.5 错误处理和重试
| 错误类型 | 处理策略 |
|---|---|
| MCP 工具调用超时 | 自动重试 1 次,仍失败则通知用户 |
| 飞书 API 限流 | 等待 1 秒后重试,最多 3 次 |
| LLM 生成内容不符合格式 | 重新生成 1 次,附加更严格的格式约束 |
| 记忆读取失败 | 从多维表格重新查询数据 |
| 权限不足 | 立即通知用户,不重试 |
5. Human-in-the-Loop 设计
5.1 审批节点
| 审批节点 | 审批人 | 审批方式 | 超时处理 |
|---|---|---|---|
| 需求评审 | 产品负责人 | 飞书消息卡片(通过/拒绝) | 24h 未处理提醒,48h 升级到 CTO |
| PRD 审阅 | 产品经理 | 飞书文档评论 + 确认消息 | 24h 提醒 |
| 设计评审 | 设计负责人 + 技术负责人 | 飞书消息卡片 | 24h 提醒 |
| 代码审查 | 指定 Reviewer | GitHub PR Review | 48h 未处理自动提醒 |
| 测试验收 | 测试负责人 | 飞书消息卡片 | 24h 提醒 |
| 部署确认 | 运维 + 技术负责人 | 飞书消息卡片(双重确认) | 不超时,必须人工确认 |
5.2 飞书消息卡片交互
需求评审的消息卡片示例:
{
"msg_type": "interactive",
"card": {
"header": {
"title": { "tag": "plain_text", "content": "📋 需求评审" },
"template": "blue"
},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
"content": "**需求标题**:新增 Solana 课程模块\n**优先级**:P1\n**提出人**:张三\n**描述**:用户对 Solana 生态学习需求增长,需要新增完整的 Solana 开发课程,包含基础、智能合约、DApp 开发三个阶段。"
}
},
{
"tag": "action",
"actions": [
{
"tag": "button",
"text": { "tag": "plain_text", "content": "✅ 通过" },
"type": "primary",
"value": { "action": "approve", "record_id": "rec001" }
},
{
"tag": "button",
"text": { "tag": "plain_text", "content": "❌ 拒绝" },
"type": "danger",
"value": { "action": "reject", "record_id": "rec001" }
},
{
"tag": "button",
"text": { "tag": "plain_text", "content": "💬 需要讨论" },
"value": { "action": "discuss", "record_id": "rec001" }
}
]
}
]
}
}5.3 超时升级机制
审批请求发出
│
├─→ 24h 内确认 → 正常流转
│
├─→ 24h 未确认 → 发送提醒消息
│ │
│ ├─→ 48h 内确认 → 正常流转
│ │
│ └─→ 48h 未确认 → 升级到上级审批人
│
└─→ 部署确认:无超时,必须人工确认6. 完整示例:HackQuest “新增 Solana 课程模块”
以下演示一个需求从提出到上线的完整 Agent 辅助流程。
6.1 第一步:需求提出
张三(前端开发)在飞书群 @机器人:
@HackQuest AI Agent 创建一个 P1 需求:新增 Solana 课程模块,包含 Solana 基础、智能合约开发、DApp 实战三个阶段,目标用户是有以太坊基础的开发者
Agent 回复:
✅ 需求已创建
- 标题:新增 Solana 课程模块
- 优先级:P1
- 状态:待评审
- 模块:课程
- 多维表格:查看
已通知评审群,等待评审。
同时,Agent 在需求评审群发送消息卡片(含通过/拒绝按钮)。
6.2 第二步:需求评审
李四(产品负责人)点击消息卡片的”✅ 通过”按钮。
Agent 自动执行:
- 更新需求状态为”已通过”
- 自动触发 PRD 生成
Agent 回复:
✅ 需求”新增 Solana 课程模块”已通过评审 正在自动生成 PRD…
6.3 第三步:PRD 生成
Agent 自动执行(无需人工触发):
- 从记忆读取需求详情
- 检索知识库中的相关文档(课程体系架构、已有课程模板、Solana 技术资料)
- 生成 PRD 文档
Agent 回复:
📄 PRD 已生成
- 需求:新增 Solana 课程模块
- PRD 文档:查看
- 状态:AI 生成-待审阅
请 @李四 审阅后确认。
6.4 第四步:设计与开发
李四审阅 PRD 后确认 → Agent 更新状态为”设计中”
设计完成后,设计评审通过 → Agent 更新状态为”开发中”
张三在 GitHub 创建 PR:
PR #156: feat: add solana course module
Agent 自动检测到 PR 创建,生成审查摘要:
🔍 PR 审查摘要:#156 feat: add solana course module
📊 变更统计:
- 文件数:23
- 新增:+1,850 行
- 删除:-120 行
📝 主要变更:
- 新增 Solana 课程数据模型和 API
- 新增课程页面组件(3 个阶段)
- 更新课程导航配置
⚠️ 关注点:
- 缺少单元测试文件
api/courses/solana.ts中有硬编码的 RPC 端点🔗 关联需求:新增 Solana 课程模块 🔗 PR 链接:https://github.com/hackquest/web/pull/156
6.5 第五步:测试与部署
CR 通过,PR 合并 → Agent 更新需求状态为”测试中”
测试通过后,王五(测试)@机器人:
@HackQuest AI Agent 需求”新增 Solana 课程模块”测试通过
Agent 回复:
✅ 测试验收通过
- 需求:新增 Solana 课程模块
- 关联缺陷:2 个(全部已关闭)
- 状态:待部署
- 已通知运维团队
Agent 在运维群发送部署确认卡片 → 运维确认后触发部署 → 部署完成后 Agent 更新状态为”已上线”
6.6 全流程时间线
| 时间 | 事件 | Agent 行为 | 人工操作 |
|---|---|---|---|
| Day 1 09:00 | 张三提出需求 | 创建记录,通知评审群 | 张三 @机器人 |
| Day 1 14:00 | 李四评审通过 | 更新状态,触发 PRD 生成 | 李四点击”通过” |
| Day 1 14:05 | PRD 生成完成 | 创建文档,通知 PM | — |
| Day 2 10:00 | PRD 审阅通过 | 更新状态为”设计中” | 李四确认 |
| Day 3 16:00 | 设计评审通过 | 更新状态为”开发中” | 设计评审会 |
| Day 7 11:00 | 张三提交 PR | 生成审查摘要,关联需求 | 张三提交 PR |
| Day 8 15:00 | CR 通过 | 更新状态为”测试中” | Reviewer 合并 |
| Day 10 17:00 | 测试通过 | 更新状态,通知运维 | 王五确认 |
| Day 11 10:00 | 部署上线 | 更新状态为”已上线” | 运维确认部署 |
整个流程中,Agent 自动完成了 12 次状态更新、3 次通知发送、1 次 PRD 生成、1 次 PR 审查摘要。人工只需要在 6 个关键节点做确认操作。
7. 工具与资源推荐
| 工具 | 用途 | 价格 | 适用场景 |
|---|---|---|---|
| OpenClaw 记忆系统 | Skill 间上下文传递 | 内置免费 | 所有跨 Skill 编排 |
| 飞书消息卡片 | Human-in-the-Loop 审批 | 免费 | 需求评审、部署确认 |
| GitHub MCP Server | PR 检测和代码审查 | 开源免费 | 代码 Skill |
| Mermaid | 状态机可视化 | 开源免费 | 流程文档 |
下一篇: 37g 数据分析与运营 Agent — 搭建数据查询和运营分析 Agent,实现即时数据洞察