盘问
来源。 由 Matt Pocock 编写于 mattpocock/skills (MIT),固定提交为
49dd158。 除 UPSTREAM.md 中列出的编辑外,上游文本完全逐字转录。我们的补充内容位于末尾的 现场笔记 下。
毫不留情地询问用户,直到达成共识。将此映射为一个 设计树:每个决策分支成其依赖的决策。
按 轮次 处理这个树。前沿 是那些前提条件已经确定的决策:即你现在可以提出的问题,而无需猜测尚未听到的答案。在一轮中询问整个前沿:为每个问题编号,并给出你的推荐答案。然后等待用户的回答,再进行下一轮。
一轮的格式如下:
❓ **Q1** - **<问题标题>**:<问题正文,可能为多段落,包含多个选项>
➡️ <你的推荐答案>
---
❓ **Q2** - **<问题标题>**:<问题正文,可能为多段落,包含多个选项>
➡️ <你的推荐答案>
每个问题的措辞应使得回答“是”即表示接受你的推荐答案。
每一轮用户的回答都会重塑这棵树:已确定的决策将前沿向外推进,并解除依赖于它们的其他问题的阻塞。重新计算前沿,并开始下一轮。一个问题的答案如果依赖于同一轮中另一个仍开放的问题,则该问题属于 后续 轮次,而非本轮。
查找 事实 是你的工作,永远不是用户的。当一个前沿问题需要从环境(文件系统、工具等)中获取一个事实时,派发一个子代理去查找;不要询问用户你自己可以查到的东西。不要因此阻塞:正在进行的探索是一个未决的前提条件,因此只有依赖于它的那些下游问题需要等待子代理报告;现在就提出前沿中的其余问题。决策 是用户的任务:将每个决策交予用户,并等待。
当前沿为空时,会话结束:设计树的每个分支都已经过探索,没有任何遗留的隐含假设。在用户确认你们已达成共识之前,不要执行任何操作。
现场笔记
证据:26 个加载了盘问的真实会话(方法见 docs/field-data.md)。
- 维护一个用户可以回退的决策日志。 用户有 3 次回溯之前的回答(“撤回决策,我选错了”)。每轮结束后,打印一个已确定决策的编号列表。回溯只会重新打开该决策下游的分支。
- 为选项添加字母。 用户在 16 次简短回复中仅用单个字母或编号列表回答。为每个多选题添加带字母的选项,以便
Q2: b就是一个完整的答案。 - 自我盘问模式。 大约 19 个请求要求代理 盘问自身(“你自己完成盘问会话,针对安全方面”)。当被要求时,以代理作为受访者,运行同样的设计树。根据你收集的证据确认每个事实性问题。在此模式下,上述等待和确认规则仅适用于偏好判断,这些判断将作为一个批次(附有推荐答案)交给用户。
principal-autopilot在其步骤 3(任何代码之前)运行此模式。