18 KiB
Purpose
以用户友好的方式审查内部研究发现。通过场景化描述和引导式问题,帮助用户理解并确认约束,无需深入技术细节。
Core Principles
- 场景驱动:将技术约束转化为用户场景
- 选择优先:尽量提供选项而非开放式问题
- 关联解释:说明每个决策对后续的影响
- 渐进深入:先确认大方向,再处理细节
- 智能分组:将相关约束串联成有意义的主题
Guardrails
- MUST use
AskUserQuestionstool for all confirmations - MUST translate technical constraints into user-understandable language
- MUST explain WHY each confirmation matters
- NEVER dump raw technical details without context
- NEVER ask users to confirm things they cannot reasonably evaluate
Steps
Step 0: Load and Analyze Internal Document
cat gudaspec/research/<requirement-id>/internal.md
After loading, perform Constraint Clustering:
- Group related constraints by theme/scenario
- Identify dependencies between constraints
- Rank by importance (blocking vs nice-to-have)
- Prepare user-friendly translations
Step 1: Welcome and Context Setting
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 需求审查: <Requirement Description>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
需求ID: <requirement-id>
我已完成代码库分析,发现了一些需要您确认的关键点。
接下来我会通过几个简单的问题来确认这些发现。
📊 审查概览:
┌─────────────────────────────────────┐
│ 核心场景确认 ████████░░ 3 个 │
│ 技术适配确认 ██████░░░░ 2 个 │
│ 实施边界确认 ████░░░░░░ 1 个 │
│ 开放问题 ██░░░░░░░░ 2 个 │
└─────────────────────────────────────┘
预计用时: 5-10 分钟
准备好开始了吗?
Use AskUserQuestions:
options: ["开始审查", "先看一下完整的研究文档"]
Step 2: Core Scenario Confirmation (场景化约束确认)
Strategy: Group related constraints into user scenarios, ask about the scenario rather than individual constraints.
Example Transformation:
| 原始约束 (技术) | 转化后 (场景) |
|---|---|
| HC-1: 密码必须bcrypt, cost=12 | |
| HC-2: 登录失败5次锁定30分钟 | → "用户登录安全" 场景 |
| HC-3: JWT用HS256算法 | |
| SC-1: 错误响应用RFC 7807格式 |
Scenario Presentation Format:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔐 场景 1/3: 用户登录安全
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
我发现项目中已有一套完整的登录安全机制:
【当前实现方式】
• 密码存储:使用 bcrypt 加密(业界推荐的安全方案)
• 防暴力破解:连续失败 5 次后锁定账户 30 分钟
• 登录凭证:使用 JWT Token,15分钟过期
【这意味着什么】
您的新功能需要 [复用/适配/绕开] 这套机制。
如果您的功能涉及用户身份验证,必须走这套流程。
【对您需求的影响】
<根据具体需求说明影响,例如>
- 如果需要新增登录方式,需要集成到现有的 AuthService
- 如果需要延长登录时间,需要调整 JWT 配置
Use AskUserQuestions:
question: "您的需求与用户登录安全的关系是?"
options: [
"需要复用现有登录机制(如:新增OAuth登录方式)",
"需要修改现有机制(如:调整锁定策略)",
"与登录无关,可以跳过",
"不确定,需要更多解释"
]
If user selects "不确定", provide deeper explanation:
让我举个具体例子:
假设您要添加"Outlook邮件集成"功能:
- 如果用户需要登录才能使用邮件功能 → 复用现有机制
- 如果Outlook需要单独的OAuth认证 → 可能需要扩展机制
- 如果只是后台同步邮件,用户无感知 → 与登录无关
您的需求更接近哪种情况?
Record Decision: Update internal.md with user's choice and rationale.
Step 3: Technical Adaptation Confirmation (技术适配确认)
Strategy: Present technical constraints as "project rules" that need to be followed, ask if there are special reasons to deviate.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 技术适配: 项目规范
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
我发现项目遵循以下规范,新代码应保持一致:
【代码风格】
┌────────────────────────────────────────────┐
│ 📁 目录结构: src/<模块>/[router|service|models].py
│ 📝 命名规范: 函数用 snake_case, 类用 PascalCase
│ 🧪 测试要求: 每个模块需要对应的 tests/<模块>/ 目录
│ 📦 依赖管理: 使用 pyproject.toml + poetry
└────────────────────────────────────────────┘
【API规范】
┌────────────────────────────────────────────┐
│ 🔗 路由风格: RESTful (如 /users/{id}/emails)
│ 📄 响应格式: 统一的 JSON 结构
│ ❌ 错误处理: 使用项目自定义的 AppException
└────────────────────────────────────────────┘
【为什么这很重要】
遵循这些规范可以:
• 让代码更容易被团队其他成员理解
• 复用现有的工具函数和中间件
• 保持项目整体一致性
Use AskUserQuestions:
question: "关于项目规范,请确认:"
options: [
"遵循以上所有规范(推荐)",
"大部分遵循,但有特殊情况需要说明",
"这是一个独立模块,可能需要不同的规范"
]
If user selects special case, follow up:
请告诉我特殊情况:
• 哪些规范可能需要调整?
• 调整的原因是什么?
Step 4: Integration Points Confirmation (集成点确认)
Strategy: Visualize where new code connects to existing code, confirm the connection points.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔌 集成点: 新代码如何接入现有系统
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
根据您的需求,新功能需要在以下位置与现有代码对接:
现有系统 您的新功能 ───────── ─────────
┌─────────────┐ ┌─────────────┐ │ 用户模块 │◄─────────────│ Outlook │ │ users/ │ 获取用户 │ 集成模块 │ └─────────────┘ 信息 └─────────────┘ │ │ │ │ ▼ ▼ ┌─────────────┐ ┌─────────────┐ │ 认证模块 │◄─────────────│ OAuth │ │ auth/ │ 复用认证 │ 处理 │ └─────────────┘ └─────────────┘
【具体对接点】
1️⃣ 用户信息获取
位置: src/users/service.py → UserService.get_by_id()
用途: 获取用户邮箱配置
2️⃣ 认证复用
位置: src/auth/deps.py → get_current_user()
用途: 验证用户身份
【这意味着什么】
• 您的代码需要导入并调用这些现有函数
• 如果这些函数不满足需求,可能需要扩展(而非重写)
Use AskUserQuestions:
question: "这些集成点是否符合您的预期?"
options: [
"符合,按此方案集成",
"基本符合,但可能还需要其他集成点",
"不太确定,能否解释一下替代方案?"
]
Step 5: Scope Boundary Confirmation (边界确认)
Strategy: Clearly state what IS and IS NOT included, get explicit confirmation.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📐 实施边界: 明确范围
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
根据我的分析,本次实施的范围建议如下:
【✅ 包含在内】
• <功能点1>
• <功能点2>
• <功能点3>
【❌ 不包含(建议后续处理)】
• <排除项1> — 原因: <简要说明>
• <排除项2> — 原因: <简要说明>
【⚠️ 需要您决定】
• <边界模糊项> — 包含它会增加约 X 天工作量
Use AskUserQuestions:
question: "关于实施边界:"
options: [
"同意以上边界划分",
"需要包含更多功能(请说明)",
"范围太大,需要进一步缩减"
]
Step 6: Open Questions (开放问题 - 智能提问)
Strategy: Transform technical open questions into business decisions with clear options.
Example Transformation:
| 原始问题 (技术) | 转化后 (业务决策) |
|---|---|
| "JWT TTL 设置多少?" | "用户需要多久重新登录一次?" |
| "是否需要 rate limiting?" | "如何防止用户过于频繁调用?" |
| "缓存策略用什么?" | "数据实时性要求高吗?" |
Presentation Format:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❓ 需要您决定: 邮件同步频率
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【背景】
Outlook邮件集成需要定期从服务器获取新邮件。
同步频率会影响:
• 实时性:频率越高,用户越快看到新邮件
• 成本:频率越高,API调用次数越多
• 性能:频率越高,服务器负载越大
【选项对比】
┌─────────────────────────────────────────────┐
│ 选项 │ 延迟 │ API成本 │ 适用场景 │
├─────────────────────────────────────────────┤
│ A. 实时推送 │ < 1秒 │ 高 │ 即时通讯 │
│ B. 每5分钟 │ ≤ 5分钟│ 中 │ 一般办公 │
│ C. 每30分钟 │ ≤ 30分钟│ 低 │ 非紧急 │
│ D. 手动刷新 │ 用户控制│ 最低 │ 低频使用 │
└─────────────────────────────────────────────┘
Use AskUserQuestions:
question: "邮件同步频率选择哪个方案?"
options: ["A. 实时推送", "B. 每5分钟(推荐)", "C. 每30分钟", "D. 手动刷新", "需要更多信息来决定"]
Step 7: External Research Determination (智能判断)
Strategy: Don't just ask "need external research?", explain what would be researched and why.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 是否需要外部调研?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
基于以上讨论,我识别到以下可能需要外部调研的点:
【需要调研的内容】
┌─────────────────────────────────────────────┐
│ 1. Microsoft Graph API vs EWS │
│ 原因: 项目中没有Outlook集成先例 │
│ 影响: 决定整体技术架构 │
│ 调研内容: API能力对比、认证方式、限制 │
├─────────────────────────────────────────────┤
│ 2. OAuth 2.0 最佳实践 │
│ 原因: 现有OAuth实现仅支持Google │
│ 影响: Token管理和刷新策略 │
│ 调研内容: Microsoft OAuth流程差异 │
└─────────────────────────────────────────────┘
【如果跳过外部调研】
• 我将基于通用知识进行实施
• 可能无法选择最优方案
• 后续可能需要返工
【如果进行外部调研】
• 预计额外需要 1 轮对话
• 将获得针对性的技术选型建议
• 降低实施风险
Use AskUserQuestions:
question: "是否进行外部调研?"
options: [
"是,进行调研(推荐:涉及新技术)",
"否,我对技术选型已有明确想法",
"否,这是简单需求,不需要调研"
]
If user skips and has clear idea, follow up:
您提到已有明确想法,请告诉我:
• 您倾向使用什么技术方案?
• 有什么特殊考虑因素吗?
Step 8: Summary and Confirmation (总结确认)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 审查总结
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
感谢您的耐心确认!以下是本次审查的结果:
【您的关键决策】
┌─────────────────────────────────────────────┐
│ 1. 登录安全: 复用现有机制 │
│ 2. 项目规范: 完全遵循 │
│ 3. 集成方案: 按建议的3个点对接 │
│ 4. 实施边界: 同意建议范围 │
│ 5. 同步频率: 每5分钟 │
│ 6. 外部调研: 需要 │
└─────────────────────────────────────────────┘
【这些决策的影响】
• 实施复杂度: 中等
• 预计涉及文件: 8-12 个
• 需要新增依赖: 2 个 (msgraph-sdk, msal)
【下一步】
<根据是否需要外部调研显示不同内容>
Use AskUserQuestions:
question: "以上总结是否准确?"
options: [
"准确,继续下一步",
"需要修改某项决策",
"需要补充说明"
]
Step 9: Output and Next Steps
If External Research Needed:
✅ Internal Research 审查完成
需求ID: <requirement-id>
审查状态: 已确认,待外部调研
📋 下一步操作:
1. 输入 /clear 清空当前上下文
2. 输入 /gudaspec:deepresearch <requirement-id> 开始外部调研
外部调研将解答:
• Microsoft Graph API 技术选型
• OAuth 2.0 集成方案
If No External Research Needed:
✅ Research 全部完成
需求ID: <requirement-id>
最终需求文档: gudaspec/research/<requirement-id>/requirement.md
📋 下一步操作:
1. 输入 /clear 清空当前上下文
2. 输入 /gudaspec:plan gudaspec/research/<requirement-id>/requirement.md
Question Design Patterns (问题设计模式)
Pattern 1: Scenario-Based (场景式)
【场景描述】
当用户执行 <动作> 时,系统当前会 <行为>。
【问题】
您的需求是否需要改变这个行为?
Pattern 2: Impact-Driven (影响驱动)
【发现】
项目使用 <技术/模式>。
【如果遵循】<好处>
【如果偏离】<代价>
【问题】
您希望如何处理?
Pattern 3: Trade-off (权衡式)
【权衡点】
<选项A> vs <选项B>
【A的特点】<优劣>
【B的特点】<优劣>
【问题】
哪个更符合您的需求?
Pattern 4: Clarification (澄清式)
【我的理解】
您希望实现 <功能描述>
【确认点】
- <细节1>: 是这样吗?
- <细节2>: 还是这样?
【问题】
我的理解正确吗?
Exit Criteria
- All scenarios confirmed via interactive questions
- All user decisions recorded with rationale
- External research need determined with clear reasoning
- User explicitly confirmed summary
- Document updated with confirmed decisions
- User directed to appropriate next step