需求返讲助手 - 帮助研发人员进行需求评审和返讲文档撰写。 触发关键词: 需求返讲、评审需求、返讲文档、检查需求、需求拆解、PBI评审、需求完整性。 输入: DevOps PBI链接、需求描述、或PBI内容。 输出: 需求返讲文档、检查清单结果、风险点、遗漏项。 适用场景: 收到PM需求后进行评审、检查需求完整性、撰写返讲文档。
Scanned 5/30/2026
Install via CLI
openskills install gabrielmoreira/agent-skills-mirror---
name: pbi-reviewer
description: |
需求返讲助手 - 帮助研发人员进行需求评审和返讲文档撰写。
触发关键词: 需求返讲、评审需求、返讲文档、检查需求、需求拆解、PBI评审、需求完整性。
输入: DevOps PBI链接、需求描述、或PBI内容。
输出: 需求返讲文档、检查清单结果、风险点、遗漏项。
适用场景: 收到PM需求后进行评审、检查需求完整性、撰写返讲文档。
---
# 需求返讲助手
帮助研发人员高效完成需求返讲工作,包括需求理解、完整性检查、文档撰写。
---
## 执行声明规范
**AI 在执行此 Skill 时,必须向用户明确告知执行状态:**
### 开始执行时
```markdown
📝 **正在执行: 需求返讲助手** (`#pbi-reviewer`)
✅ 已加载 Skill 指引
⭕ 当前步骤: 步骤1 - 解析需求
```
### 调用其他专家时
```markdown
🔗 **调用领域专家**: `#{{PLATFORM_REPO}}-roi-expert`
原因: 需求涉及 ROI 测量功能
```
### 每个步骤完成时
```markdown
✅ 步骤1 完成: 解析需求
提取到 3 个功能点、2 个验收标准
⭕ 当前步骤: 步骤2 - 识别模块
```
### 遇到问题时
```markdown
⚠️ **问题提示**:
- 未配置需求检查清单,将使用通用检查项
- 如需自定义检查清单,请在 UI 中配置 `需求检查清单` 路径
```
### 执行完成时
```markdown
✅ **执行完成**: 需求返讲助手
参考来源:
- Skill: `#pbi-reviewer`
- 领域专家: `#{{PLATFORM_REPO}}-roi-expert`, `#{{PLATFORM_REPO}}-layout-expert`
- 检查清单: 通用检查项 / 自定义清单
产出物: 需求返讲文档
```
---
## 适用场景
- 收到PM的PBI需求,需要进行返讲评审
- 检查需求是否有遗漏或理解偏差
- 撰写标准格式的需求返讲文档
- 拆解复杂需求为可执行的开发任务
## 工作流程
```
输入: PBI链接/ID/标题/内容
↓
步骤0: 智能解析输入 → 识别PBI来源,自动获取详情
↓
步骤1: 解析需求 → 提取功能点、业务场景、验收标准
↓
步骤1-B: 🔴 搜索历史PBI → 从 CSV 查找相关/相似 PBI(必须执行)
↓
步骤2: 识别模块 → 根据关键词匹配功能模块,调用领域专家
↓
步骤3: 应用检查清单 → 逐项检查影响范围
↓
步骤4: 生成文档 → 输出标准格式的返讲文档
↓
步骤5: 发布文档(默认) → 优先飞书MCP,不可用时降级为本地MD
↓
输出: 飞书文档链接 / 本地Markdown + 检查清单 + 风险点
```
## 详细步骤
### 🔴 前置检查:一次性请求拦截(需求返讲 + 设计评审)
> 当用户请求中**同时包含**「需求返讲」和「设计评审/圆桌会议/出设计」关键词时,
> **必须**先拦截,引导用户分步执行。
**检测规则**: 用户输入同时匹配以下两组关键词:
- 组A(需求返讲): `需求返讲` / `评审需求` / `返讲` / `PBI评审`
- 组B(设计评审): `设计评审` / `圆桌会议` / `出设计` / `写设计` / `设计文档`
**匹配到时,使用 `ask_questions` 拦截**:
```
header: "分步确认"
question: "检测到您希望同时进行需求返讲和设计评审。\n\n⚠️ 建议分步执行:先完成需求返讲,与 PM 澄清所有待确认问题后,再启动设计评审。否则设计方案可能因需求理解偏差而返工。\n\n请选择执行方式:"
options:
- label: "先做需求返讲,稍后再出设计"
description: "完成返讲后,您可以与 PM 确认问题,再单独启动设计评审"
recommended: true
- label: "我已确认需求,直接做完返讲后继续设计"
description: "跳过中间确认环节,返讲完成后自动启动圆桌会议"
```
- 用户选择「先做需求返讲」→ 只执行需求返讲(步骤0-6),不自动触发圆桌会议
- 用户选择「直接做完返讲后继续设计」→ 执行完需求返讲后,自动加载 `#roundtable-debate` 继续
> 📌 如果用户请求中只提到「需求返讲」,不触发此拦截,直接执行。
---
### 步骤0: 智能解析 PBI 输入 ⭐ 必须执行
> ⚠️ **强制规则**: 如果从用户输入中检测到 PBI ID(数字),**必须先调用 MCP 获取 PBI 详情**,不得跳过!
**支持的输入格式(按优先级):**
| 格式 | 示例 | 解析方式 |
|------|------|----------|
| DevOps 链接 | `https://your-devops-server.example.com/YourProject/_queries/edit/1073716/...` | 从 URL 提取数字 ID |
| 工作项格式 | `Product Backlog Item 1073716: PBI_Func_...` | 提取 "Item" 后的数字 |
| 纯数字 ID | `1073716` | 直接使用 |
| PBI 标题 | `PBI_Func_{{APP_NAME}}_Feature_XXX_功能优化
| 自然语言 | `帮我评价下PBI PBI_Func_{{APP_NAME}}_Feature_XXX_功能优化
**解析正则表达式:**
```javascript
// 1. 从 URL 提取 ID
url.match(/\/_(?:queries|workitems)\/(?:edit\/)?([0-9]+)/)
// 2. 从标准格式提取
text.match(/(?:Product Backlog Item|PBI|Work Item|Bug)\s*#?([0-9]+)/i)
// 3. 纯数字 (5-8位,符合 DevOps ID 范围)
text.match(/\b([0-9]{5,8})\b/)
// 4. PBI 标题 (用于搜索)
text.match(/PBI_[A-Za-z0-9_]+/)
```
**🔴 强制执行:MCP 调用**
当检测到 PBI ID 时,**必须**尝试以下 MCP 工具调用:
```
工具名称: mcp_azuredevops_get_work_item
参数:
- id: <提取到的PBI数字ID>
示例调用:
mcp_azuredevops_get_work_item(id=1073716)
```
**⚠️ API 返回内容对比(务必选对工具)**
| API | Description | AcceptanceCriteria | 适用场景 |
|-----|:-----------:|:------------------:|----------|
| `get_work_item` | ✅ 完整返回 | ✅ 完整返回 | 获取单个 PBI 详情(**必须用这个**) |
| `list_work_items` | ❌ 始终为空 | ❌ 始终为空 | 仅用于批量查 ID/Title/State |
| `search_work_items` | ⚠️ 仅摘要 | ❌ 不返回 | 关键词模糊搜索 |
> 🔴 **禁止**:用 `list_work_items`(WIQL)获取单个 PBI 详情。WIQL 不返回 HTML/大文本字段,即使 SELECT 中指定了 `[System.Description]`,返回值也为空。
如果只有标题没有 ID,使用搜索:
```
工具名称: mcp_azuredevops_search_work_items
参数:
- query: <PBI标题>
```
**🟡 MCP 不可用时的备选方案**
当 MCP 工具不存在或调用失败时,执行以下备选流程:
```markdown
⚠️ **MCP 状态**: Azure DevOps 工具不可用
原因: [工具未加载 / 连接失败 / 认证错误]
🔄 **启用备选方案**:
1. 查询历史 PBI 知识库
2. 请用户手动提供 PBI 内容
```
**步骤0-B: MCP 不可用时的处理**
> 历史 PBI CSV 搜索已提升为独立步骤(步骤1-B),无论 MCP 是否可用都会自动执行。
> 此处仅需告知用户 MCP 状态,请求粘贴 PBI 完整内容。
**执行流程:**
```markdown
📥 **步骤0: 解析 PBI 输入** (强制)
1️⃣ 识别输入类型:
- 检测到: [链接/ID/标题/内容]
- 提取的 ID: [具体数字,如 1073716]
2️⃣ 🔴 尝试调用 MCP 获取详情:
→ 调用 mcp_azuredevops_get_work_item(id=1073716)
→ 如果成功,提取: 标题、描述、验收标准、状态、迭代
→ 如果失败,转到步骤 2-B
2️⃣-B 🟡 MCP 不可用,启用备选:
→ 告知用户 MCP 状态,请求粘贴完整内容
→ 历史 PBI CSV 搜索将在步骤1-B 自动执行
3️⃣ 提取关键信息:
- System.Title: 标题
- System.Description: 需求描述 (HTML格式,需解析)
- Microsoft.VSTS.Common.AcceptanceCriteria: 验收标准
- System.State: 状态
- System.IterationPath: 迭代路径
📚 **参考来源声明** (必须输出):
- MCP DevOps: [成功/不可用]
- 历史PBI: 将在步骤1-B 填充
```
### 步骤1: 解析需求
**从PBI中提取以下信息**:
1. **基本信息**
- PBI编号和标题
- 所属迭代/版本
- 优先级
2. **功能描述**
- 业务背景
- 用户故事
- 功能点列表
3. **验收标准**
- 功能验收条件
- 非功能性要求(性能、兼容性等)
4. **关联信息**
- 相关PBI链接
- 设计稿/原型链接
- 二级链接(如果有)
5. **术语确认** 🔍
- 对 PBI 描述中出现的技术术语、模块名、组件名
- 如果 AI 不确定其含义 → `grep_search` 搜索项目代码或查询 expert skill 确认
- 如果搜索后仍不确定 → 在返讲文档「待确认问题」中标注
### 步骤1-B: 搜索历史 PBI 知识库 🔴 必须执行
> ⚠️ **强制规则**: 无论 MCP 是否可用,此步骤都**必须执行**。这是填充返讲文档 `### 相关PBI` 表格的唯一来源。
**获取 PBI 文件路径**(本地优先):
1. **优先**: 检查 `.github/copilot-resources/data/` 目录下是否有 `*-index.md` 和 `*-detail.md` 文件(CSV 已自动转换为分层 Markdown) → 如果有,直接读取(工作区内文件,无需授权)
2. **降级**: 查看 `.github/copilot-instructions.md` 中「项目文档配置」段落,获取 PBI 索引/详情路径
> 📁 `.github/copilot-resources/` 是工具自动复制的本地副本。PBI 数据已分为**索引文件**(轻量表格,含关键词列)和**详情文件**(完整描述),避免一次性加载过多 token。
**如果已配置 PBI 知识库** — 双路搜索工作流:
```
路径A: read_file 索引文件 → 按标题/关键词匹配
路径B: grep_search 详情文件 → 按描述内容匹配
合并去重 → read_file 按需读取详情片段
```
**路径A — 索引匹配**:
1. 用 `read_file` 读取索引文件(`*-index.md`,~400行,轻量)
2. 索引表列结构:
- `ID`: PBI 编号
- `Title`: 标题
- `State`: 状态
- `Keywords`: 从描述中自动提取的领域关键词
- `RefLinks`: 描述中引用的 URL
3. 搜索策略:
- 按当前 PBI ID 精确匹配(排除自身,查找关联记录)
- 按标题关键词模糊匹配(提取功能关键词,如 `配准`、`Spectrum`、`CT`)
- 按 Keywords 列匹配功能模块名(如 `ROI`、`Layout`、`DataLoad`)
**路径B — 详情搜索**(补充路径A遗漏):
1. 从当前 PBI 标题/描述中提取 2-3 个核心功能关键词
2. 用 `grep_search` 在详情文件(`*-detail.md`)中搜索每个关键词
3. 从搜索结果中提取匹配到的 `## PBI-{id}` section 标题
**合并与去重**:
1. 将路径A和路径B的匹配结果合并,按 PBI ID 去重
2. 对路径B新发现的 PBI,用 `read_file` 读取详情文件中对应 section 获取完整描述
3. 返回最相关的 **3-5 条**记录
4. 将结果填充到返讲文档模板的 `### 相关PBI` 表格
**如果未配置 PBI 知识库**:
```markdown
⚠️ 未配置历史 PBI 知识库,跳过历史搜索。
如需启用,请在 GUI 向导中配置 `PBI CSV 路径`。
```
**输出格式**:
```markdown
✅ 步骤1-B 完成: 搜索历史 PBI
索引文件: [文件名] | 详情文件: [文件名]
路径A(索引匹配): X 条 | 路径B(详情搜索): Y 条
合并去重后: Z 条相关记录
- PBI-XXXXXX: [标题] (关系: [依赖/关联/相似])
- PBI-YYYYYY: [标题] (关系: [依赖/关联/相似])
```
**📚 参考来源更新**:
```
- 历史PBI: [索引文件名] + [详情文件名] (Z 条相关记录) / 未配置
```
### 步骤2: 识别功能模块
**根据需求内容的关键词,识别涉及的功能模块并调用对应专家**:
**🔴 扫描 Skills 目录进行专家匹配**
```python
# 扫描 .github/skills/ 目录
for skill_dir in list_dir(".github/skills/"):
if skill_dir.startswith("_"): # 跳过 _templates
continue
skill_md = read_file(f".github/skills/{skill_dir}/SKILL.md")
# 解析 frontmatter 的 description,提取触发关键词
# 与 PBI 内容进行正则匹配
if keywords_match(pbi_content, skill_description):
call_expert(skill_name)
output(f"🔗 调用领域专家: #{skill_name}\n 原因: 匹配关键词")
```
> 💡 每个 SKILL.md 的 description 包含触发关键词,格式如:
> `触发关键词: ROI、轮廓、测量、标注`
**降级策略:关键词未匹配任何 expert 时**
如果 PBI 涉及的功能模块没有对应的 expert skill,执行以下降级:
```python
# 降级:搜索项目代码确认影响范围
if matched_experts == 0:
# 1. 从 PBI 标题/描述中提取技术关键词
keywords = extract_technical_keywords(pbi_title, pbi_desc)
# 2. 搜索项目代码
for kw in keywords:
grep_search(kw, includePattern="**/*.cs")
# 3. 根据搜索结果识别涉及的文件和模块
output("⚠️ 未找到对应领域专家,基于代码搜索分析影响范围")
```
**平台项目工作区检测**: 当匹配到的关键词涉及平台组件(如 `DataLoad`、`DataSave`、`ROI`、`VOI`、`Layout`、`Volume` 等 平台 平台关键词)时,检查用户是否具备平台代码访问能力:
1. 检查工作区是否包含 `{{PLATFORM_REPO}}` 文件夹
2. 检查 `.github/copilot-instructions.md` 中是否配置了 DevOps MCP 仓库
如果**两者都没有**,使用 `ask_questions` 提示用户:
```
header: "平台项目"
question: "检测到 PBI 可能涉及平台组件(匹配关键词: {关键词}),但工作区未打开平台项目且未配置 DevOps 远程仓库。\n\n后续设计评审阶段需要读取平台源码进行接口分析,建议提前配置。"
options:
- label: "我来添加平台项目到工作区"
description: "将 {{PLATFORM_REPO}} 添加到多根工作区"
- label: "已有 DevOps MCP,继续"
description: "DevOps MCP 已配置,可远程搜索平台代码"
- label: "跳过,继续返讲"
description: "先完成需求返讲,后续设计评审时再处理"
recommended: true
```
> 📌 此检测为**提示性的**,不阻断需求返讲流程。主要目的是让用户提前知晓,以便在进入设计评审阶段前做好准备。
### 步骤3: 应用检查清单
**根据识别的模块,应用对应的检查清单**:
> 🔴 **全面匹配原则(强制)**
>
> 检查清单是用户最信任的产出物之一,**任何遗漏都可能导致后续分析出现毁灭性错误**。
> 宁可多花资源全面分析,绝不能遗漏。
>
> 1. **穷尽所有章节**: 必须扫描检查清单的**每一个章节**,不能只看"最明显相关"的一两个
> 2. **多维度关键词匹配**: 从 PBI 标题和内容中提取**所有功能关键词**,分别与每个章节匹配
> - 示例: PBI「保存_VOI轮廓导入导出_ExportFormat」→ 关键词: `保存` + `VOI` + `轮廓` + `导入导出` + `ExportFormat`
> - 必须匹配: 保存功能章节 ✖ VOI管理章节 ✖ 数据加载章节 ✖ 配准联动章节 ✖ ...
> 3. **每个匹配章节的每一项都要列出**: 不得只挑"高频影响"项,普通项也必须列出并给出判断
> 4. **跨章节关联检查**: 当一个功能点在多个章节出现时(如 VOI 出现在加载/管理/保存多个章节),**每个章节都要检查**
>
> ❗ **反例警示**: PBI"保存_VOI轮廓导入导出_ExportFormat"——如果只检查了「保存功能」章节,而遗漏了「VOI管理」「数据加载」「配准联动」等章节中的 VOI 相关项,就是严重遗漏。
>
> 🔍 **代码验证(可选但推荐)**: 对于“是否影响现有功能”“是否影响其他模块”等检查项,
> 如果仅靠 expert skill 文本描述无法确认,可用 `grep_search` 搜索项目代码中的调用关系来确认实际影响范围。
> **📁 用户配置的文档(本地优先)**
>
> 🔴 **优先从 `.github/copilot-resources/docs/` 读取**,避免工作区外文件授权弹窗。
> 降级时才从 `.github/copilot-instructions.md` 中的「项目文档配置」段落获取绝对路径。
>
> | 配置项 | 本地优先路径 | 用途 | 使用时机 |
> |------|----------------|------|----------|
> | 需求检查清单 | `.github/copilot-resources/docs/` | 检查需求完整性 | 步骤3 检查时读取 |
> | 功能模块清单 | `.github/copilot-resources/docs/` | 识别受影响模块 | 步骤2 识别模块时参考 |
> | 功能依赖关系 | `.github/copilot-resources/docs/` | 分析影响范围 | 步骤2/3 分析影响时参考 |
>
> ⚠️ 如果配置了这些文档,**必须读取并在回复中声明参考了哪些文件**
>
> 如未配置,使用以下通用检查项:
通用检查项:
#### 功能完整性检查
- [ ] 需求描述是否清晰完整?
- [ ] 是否有遗漏的功能点?
- [ ] 边界条件是否明确?
- [ ] 异常场景是否考虑?
#### 兼容性检查
- [ ] 是否影响现有功能?
- [ ] 是否需要数据迁移?
- [ ] 是否影响其他模块?
#### 非功能性检查
- [ ] 性能要求是否明确?
- [ ] 多模态支持是否考虑?(PT/CT/MR/NM)
- [ ] 多语言是否需要支持?
- [ ] 多分辨率是否需要适配?
#### 配置文件影响检查(FE↔BE 通路)
> 💡 当需求涉及新增功能、新消息通路或新界面组件时,检查是否需要修改运行时 XML 配置文件。
> 配置文件通常位于 `appdata/{appname}/config/` 下。
- [ ] 是否需要新增 Operation/Widget/Model 注册?(`[后端配置文件]`)
- [ ] 是否需要新增 BE→FE 消息路由?(`[前端命令配置]`)
- [ ] Controller 级 Operation 链是否需要修改?(`BE/WorkflowController.xml`)
- [ ] 是否需要新增 Cell 初始化链?(`[前端配置文件]`)
- [ ] 是否需要新增 IoC 容器注册?(`[前端容器配置]`)
### 步骤4: 生成返讲文档
> 💡 **金字塔原则**: 结论先行,先给核心结论,再展开详细分析
>
> **文档结构要求**:
> 1. 摘要先行: 开篇给出需求概要和核心结论
> 2. 支撑论点: 列出主要影响和风险
> 3. 详细展开: 功能拆解、检查清单、计划等
>
> **不进行分步确认**: 直接输出完整文档
>
> **📌 模板填写提示**:
> - `### 相关PBI` 表格数据来自步骤1-B 的 CSV 搜索结果
> - 如果步骤1-B 找到相关记录,**必须**填入表格,不得留空
> - 如果未配置 CSV 或无匹配,填写 "无历史相关PBI" 并注明原因
**使用以下模板生成返讲文档**:
---
## 返讲文档模板
```markdown
# [PBI编号] 需求返讲
## 1. 需求概述
### 1.1 基本信息
| 属性 | 值 |
|------|-----|
| PBI编号 | [填写] |
| 需求标题 | [填写] |
| 所属迭代 | [填写] |
| 优先级 | [填写] |
| 预估工作量 | [填写] |
### 1.2 业务背景
[描述需求的业务背景和用户痛点]
### 1.3 功能点列表
| 序号 | 功能点 | 描述 | 优先级 |
|------|--------|------|--------|
| 1 | [功能点名称] | [简要描述] | P0/P1/P2 |
| 2 | ... | ... | ... |
## 2. 需求理解
### 2.1 用户故事
作为 [用户角色],
我希望 [功能描述],
以便 [业务价值]。
### 2.2 业务流程
```mermaid
flowchart LR
A[开始] --> B[步骤1]
B --> C[步骤2]
C --> D[结束]
```
### 2.3 界面交互
[如有原型图,附上链接或描述关键交互]
## 3. 影响分析
### 3.1 涉及模块
| 模块 | 影响程度 | 说明 |
|------|----------|------|
| [模块名] | 高/中/低 | [影响说明] |
### 3.2 检查清单结果
[根据 docs/需求检查清单.md 逐项检查的结果]
| 检查项 | 结果 | 备注 |
|--------|------|------|
| [检查项] | Y/N/待确认 | [备注] |
### 3.3 依赖关系
- 上游依赖: [列出依赖的模块/功能]
- 下游影响: [列出会影响的模块/功能]
## 4. 风险与问题
### 4.1 识别的风险
| 风险 | 等级 | 缓解措施 |
|------|------|----------|
| [风险描述] | 高/中/低 | [措施] |
### 4.2 待确认问题
<!-- CLARIFICATION_LIST_START -->
| ID | 问题 | 状态 | 负责人 | PM答复 |
|----|------|------|--------|--------|
| Q1 | [问题描述] | 🔴待确认 | [PM/研发] | - |
<!-- CLARIFICATION_LIST_END -->
> 📌 **状态说明**:🔴待确认 → ✅已确认 → ❌已取消。PM答复列填写沟通结果。
## 5. 开发计划
### 5.1 任务拆解
| 任务 | 预估工时 | 依赖 |
|------|----------|------|
| [任务描述] | [X]h | [依赖任务] |
### 5.2 里程碑
| 里程碑 | 日期 | 交付物 |
|--------|------|--------|
| 需求返讲 | [日期] | 返讲文档 |
| 设计评审 | [日期] | 设计文档 |
| 开发完成 | [日期] | 代码提交 |
| 测试完成 | [日期] | 测试报告 |
## 6. 验收标准
### 6.1 功能验收
- [ ] [验收条件1]
- [ ] [验收条件2]
### 6.2 非功能验收
- [ ] 性能: [具体指标]
- [ ] 兼容性: [支持的模态/设备]
---
## 附录
### 相关PBI
| PBI编号 | 标题 | 关系 |
|---------|------|------|
| [编号] | [标题] | 依赖/关联/冲突 |
### 参考资料
- [设计稿链接]
- [原型链接]
- [相关文档]
```
---
## 输出说明
完成需求返讲后,输出以下内容:
1. **返讲文档** - 按上述模板填写的完整文档
2. **检查清单** - 各模块检查项的结果汇总
3. **风险清单** - 识别的风险和待确认问题
4. **遗漏建议** - 可能遗漏的功能点或场景
## 示例
### 输入示例
**方式1: DevOps 链接**
```
帮我做需求返讲: https://your-devops-server.example.com/YourProject/_queries/edit/1073716/?triage=true
```
**方式2: 标准格式**
```
请分析这个 PBI:
Product Backlog Item 1073716: PBI_Func_{{APP_NAME}}_Feature_XXX_功能优化
```
**方式3: 纯 ID**
```
需求返讲 1073716
```
**方式4: PBI 标题**
```
帮我评价下PBI PBI_Func_{{APP_NAME}}_Feature_XXX_功能优化
```
**方式5: 直接粘贴内容**
```
帮我做一下这个PBI的需求返讲:
PBI-123456: VOI分割支持多阈值配置
需求描述: 用户希望在进行PET病灶分割时,能够配置多个阈值策略...
```
### 输出示例(自动获取 PBI 详情)
```markdown
📝 **正在执行: 需求返讲助手** (`#pbi-reviewer`)
✅ 已加载 Skill 指引
⭕ 当前步骤: 步骤0 - 智能解析 PBI 输入
---
📥 **步骤0: 解析 PBI 输入**
1️⃣ 识别输入类型:
- 检测到: DevOps 链接
- 提取 ID: 1073716
2️⃣ 获取 PBI 详情:
🔧 调用 MCP: azureDevOps.get_work_item
✅ 获取成功
3️⃣ PBI 基本信息:
- 标题: PBI_Func_{{APP_NAME}}_Feature_XXX_功能优化
- 状态: Active
- 迭代: Sprint 42
- 优先级: P1
✅ 步骤0 完成
⭕ 当前步骤: 步骤1 - 解析需求
---
# PBI-1073716 需求返讲
## 1. 需求概述
...
```
## 相关资源
### 🔴 文档读取优先级(强制)
> 所有文档必须按以下优先级读取,**禁止跳过本地副本直接读取绝对路径**。
| 优先级 | 路径 | 说明 |
|--------|------|------|
| ➀ 本地副本(优先) | `.github/copilot-resources/docs/` 和 `.github/copilot-resources/data/` | 工具自动复制,工作区内文件,无需授权 |
| ➁ 配置路径(降级) | `.github/copilot-instructions.md` 中的「项目文档配置」表格 | 可能是绝对路径,会触发授权弹窗 |
**具体操作**:
1. 先执行 `list_dir(".github/copilot-resources/")` 检查目录是否存在
2. 如果存在 → 从 `docs/` 读取检查清单/模块清单/依赖关系,从 `data/` 读取 PBI CSV
3. 如果不存在 → 从 copilot-instructions.md 获取路径后读取
### 历史 PBI 知识库
如果配置了 PBI CSV,工具会自动将其转换为分层 Markdown 存放在 `.github/copilot-resources/data/` 下:
- **索引文件** (`*-index.md`): 轻量表格(~400行),含 ID/Title/State/Keywords/RefLinks 列,优先读取
- **详情文件** (`*-detail.md`): 完整内容(~10000行),每个 PBI 一个 `## PBI-{id}` section,按需用 `grep_search` + `read_file` 读取
**双路搜索工作流**: 先读索引匹配 → 再 grep_search 详情补充 → 合并去重 → read_file 读取目标 section
| 索引表列名 | 说明 |
|------|------|
| `ID` | PBI 编号 |
| `Title` | 标题 |
| `State` | 状态 |
| `Keywords` | 从描述中自动提取的领域关键词 |
| `RefLinks` | 描述中引用的 URL |
### 默认资源
- 检查清单: `.github/copilot-resources/docs/` 下的检查清单文件
- 功能模块: `.github/copilot-resources/docs/` 下的模块清单文件
- 依赖关系: `.github/copilot-resources/docs/` 下的依赖关系文件
- 历史PBI: `.github/copilot-resources/data/` 下的 Markdown 文件(从CVS自动转换)
- 专家索引: `#expert-index`
### 📚 参考来源声明模板
执行完成时,**必须**输出以下声明:
```markdown
📚 **参考来源**:
- MCP DevOps: [成功获取 PBI-XXXXXX / 不可用]
- 历史PBI: [索引文件名] + [详情文件名] (X 条相关记录) / 未配置
- 检查清单: [文件路径] / 使用通用检查项
- 功能模块: [文件路径] / 未配置
- 依赖关系: [文件路径] / 未配置
- 领域专家: [调用的专家列表]
```
---
## 步骤5: 发布文档(默认执行)
> ⚙️ **默认策略**: 飞书优先,MCP 不可用时自动降级为本地 Markdown
**执行流程**:
```
生成返讲文档
│
▼
检测飞书 MCP 工具是否可用
│
├── 可用 → 调用 #lark-doc-generator → 输出飞书文档链接
│
└── 不可用 → 输出本地 Markdown 文档 + 配置提示
```
### 5.1 飞书 MCP 可用时(默认路径)
```markdown
🔗 **自动调用**: `#lark-doc-generator`
原因: 默认发布到飞书
⭕ 正在将返讲文档发布到飞书...
```
### 5.2 完整示例
**用户输入**:
```
需求返讲 1073716
```
**AI 执行流程**:
```markdown
📝 **正在执行: 需求返讲助手** (`#pbi-reviewer`)
✅ 步骤0-4 完成: 生成返讲文档
产出: [PBI-1073716 需求返讲文档]
🔗 **自动调用**: `#lark-doc-generator`
原因: 默认发布到飞书(飞书优先策略)
---
🚀 **正在执行: 飞书文档生成器** (`#lark-doc-generator`)
✅ 已将文档发布到飞书
📄 飞书文档链接: https://xxx.feishu.cn/docx/xxxxx
---
✅ **执行完成**: 需求返讲助手
参考来源:
- Skill: `#pbi-reviewer` → `#lark-doc-generator`
- MCP DevOps: 成功获取 PBI-1073716
- 飞书文档: 已发布
产出物:
1. 飞书文档链接(主要)
2. 本地 Markdown 备份
```
### 5.3 飞书 MCP 不可用时(降级路径)
如果飞书 MCP 工具不可用,自动降级为本地 Markdown:
```markdown
⚠️ **飞书 MCP 不可用,已降级为本地 Markdown**
✅ 已生成本地文档: `docs/PBI-1073716-需求返讲.md`
💡 如需发布到飞书,请先配置飞书 MCP:
1. 运行 `docs/setup-lark-mcp.ps1` 配置飞书 MCP
2. 或参考 `#lark-mcp-troubleshooting` 排查连接问题
3. 配置完成后重新执行本命令
```
### 5.4 禁用飞书发布(可选)
如用户明确要求**只生成本地文档**,可跳过飞书发布:
```
需求返讲 1073716 --local-only
需求返讲 1073716,只生成本地文档
```
---
## 步骤6: 产出持久化 + 下一步建议(自动输出)
### 6.0 持久化返讲文档(强制)
> 🔴 **必须在输出返讲文档后,将完整文档写入文件**,供后续对话(如圆桌会议)直接读取。
```python
# 根据 PBI ID 生成文件路径
review_path = f".copilot-temp/pbi-{pbi_id}-review.md"
create_file(review_path, review_document_with_context_summary)
```
> 📌 如果 `.copilot-temp/` 目录不存在,自动创建。该目录已通过 `.git/info/exclude` 排除。
#### 🔴 持久化文件必须包含的内容结构
写入文件的内容必须按以下结构组织,确保新对话能仅通过读取此文件就完全恢复上下文:
```markdown
# PBI {ID} 需求返讲文档
## 上下文摘要(供新对话读取)
| 属性 | 值 |
|------|------|
| PBI ID | {ID} |
| 标题 | {标题} |
| 模块 | {所属功能模块} |
| 涉及平台组件 | {是/否 + 组件名} |
| 创建时间 | {YYYY-MM-DD HH:mm} |
| 待澄清问题数 | {N 个待确认 / M 个已确认} |
### 关键文件路径
- FE: `src/{{PLATFORM_NAMESPACE}}.{Module}/...`
- BE: `src/{{PLATFORM_NS_PREFIX}}{Module}/...`
- 平台: `{{PLATFORM_REPO}}/{Component}/...`
### 关键技术决策
- {决策1}: {简述}
- {决策2}: {简述}
---
## 正文(返讲文档内容)
{完整的返讲文档内容,包含所有分析、检查清单、待澄清问题等}
## CLARIFICATION_LIST
<!-- CLARIFICATION_LIST_START -->
{待确认问题表格}
<!-- CLARIFICATION_LIST_END -->
## 下一步建议
- 用圆桌会议分析 PBI {ID}: `用圆桌会议分析 PBI {ID}`
```
> 🔴 **禁止写入的内容**:
> - 中间搜索过程(grep_search 结果、MCP 调用记录)
> - 文件全文副本(只保留路径,新对话自己读取)
> - 对话中的来回讨论和已淘汰的备选方案
> - 多轮修正中的历史错误版本(只保留最终正确版本)
#### 🔴 修正场景处理
如果用户在文档生成后要求修正(“这里分析不对,应该是XXX”):
1. **修正内容后,必须立即覆写持久化文件**:
```python
# 修正后立即覆写,不是追加
create_file(f".copilot-temp/pbi-{pbi_id}-review.md", corrected_full_content)
```
修正完成后输出:`📄 返讲文档已更新并重新保存到 .copilot-temp/pbi-{ID}-review.md`
2. **修正超过 3 轮时,建议新开对话**(避免历史错误版本污染上下文)
### 6.1 下一步建议 + 新对话引导
返讲文档生成并发布后,**自动输出以下提示**:
```markdown
---
💡 **下一步 & 对话建议**:
- 产出已保存到: `.copilot-temp/pbi-{ID}-review.md`
- 如需进入设计评审阶段,建议**新开对话**输入:
`用圆桌会议分析 PBI {ID}`
- 在新对话中,AI 会自动读取本次返讲文档作为设计输入
> ⚠️ 建议先与 PM 确认所有待澄清问题后,再启动设计评审。
```
### 6.2 需求澄清检查(ask_questions 引导)
如果返讲过程中发现了**待确认/待澄清**的问题,**必须**使用 `ask_questions` 对话框提醒用户:
```
header: "需求澄清"
question: "返讲中发现以下待确认问题,建议进入设计阶段前与 PM/相关人士沟通确认:\n\n[列出所有待确认问题,含 ID]\n\n⚠️ 未澄清的问题如果直接进入设计阶段,可能导致设计方案偏离实际需求。"
options:
- label: "我已了解,稍后去确认"
description: "记录待确认问题,后续与 PM 沟通后再启动设计评审"
recommended: true
- label: "这些问题可以跳过,直接出设计"
description: "基于当前理解直接进入圆桌会议设计评审"
- label: "帮我整理澄清沟通要点"
description: "生成一份可以发给 PM 的问题清单"
- label: "部分问题已确认,帮我更新状态"
description: "录入 PM 答复,更新待确认问题的状态"
allowFreeformInput: true
```
> 🔴 **如果没有待确认问题**,跳过此对话框,直接输出下一步建议。
> 📌 **用户选择“部分问题已确认”时**:根据用户输入的 PM 答复,更新返讲文档中 `CLARIFICATION_LIST` 标记区段内对应行的状态(🔴待确认 → ✅已确认)和 PM答复列,使用 `replace_string_in_file` 更新本地文档。
No comments yet. Be the first to comment!