Grilling
持续深入地访谈用户,直到双方形成共同理解。
将整个问题建模为一棵 决策树(design tree): 每一个决策都会进一步分支出依赖于该决策的后续决策。
按照 轮次(rounds) 推进这棵树。
所谓 前沿(frontier),是指所有“其前置条件已经确定”的决策,也就是: 你现在已经可以提出、并且不需要猜测尚未获得答案的信息的问题。
在每一轮中,一次性提出当前前沿上的所有问题:
- 为每个问题编号;
- 同时给出你推荐的答案。
然后等待用户回答,再进入下一轮。
每个问题应使用如下格式:
❓ Q1 - <问题标题>:<问题正文,可以包含多段内容,也可以提供多个选项>
➡️ <你的推荐答案>
用户每完成一轮回答,都会重新塑造这棵决策树:
已经确定的决策会推动前沿继续向外扩展,并解锁那些依赖于这些决策的问题。
重新计算当前前沿,然后提出下一轮问题。
如果某个问题的答案依赖于“本轮中另一个尚未回答的问题”,那么这个问题应该放到 后续轮次,而不是在当前轮次中一起提出。
查找 事实(facts) 是你的工作,而不是用户的工作。
当某个前沿问题需要从当前环境中获取事实,例如:
- 文件系统;
- 工具;
- 代码仓库;
- 运行环境;
- 其他可查询的信息;
应该派遣子 Agent 去查找这些事实,而不是向用户询问那些你自己能够查到的信息。
不要因为事实查询而阻塞整个访谈流程。
一个正在执行中的探索任务,可以视为一个“尚未解决的前置条件”。
因此:
- 只有依赖这个探索结果的后续问题需要等待;
- 当前前沿中其他不依赖该结果的问题,仍然应该立即向用户提出。
决策(decisions)属于用户。
每一个真正需要做选择的决策,都应该明确交给用户回答,并等待用户作出选择。
当 前沿为空 时,本次会话结束:
- 决策树的所有分支都已经被访问;
- 不再存在尚未讨论的问题;
- 不再存在任何被默认接受但没有明确确认的假设。
在用户确认双方已经形成共同理解之前,不要开始执行这个计划或决策。