不停地访谈用户,直到双方达成共识。把整件事画成一棵设计树:每一个决定都会分叉出挂在它下面的一串决定。
按轮次推进这棵树。前沿是那些前置条件都已经定下来的决定:也就是你_现在_就能问、不必去猜还没听到的答案的那些问题。一轮里把整个前沿都问完:给每个问题编号,并给出你推荐的答案。然后等用户回答,再进入下一轮。
一轮的格式如下:
❓ **Q1** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices> ➡️ <your recommended answer> --- ❓ **Q2** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices> ➡️ <your recommended answer>
用户每一轮的回答都会重塑这棵树:定下来的决定把前沿向外推,并解锁那些依赖它们的问题。重新算出前沿,问出下一轮。如果某个问题的答案取决于本轮仍未闭合的另一个问题,那它属于_更晚_的某一轮,而不是这一轮。
找_事实_是你的活,永远不是用户的活。当前沿上的问题需要从环境(文件系统、工具等)里拿到某个事实时,派一个子代理去找;凡是自己能查到的,就不要问用户。不要因此卡住:正在跑的探查就是一个还没定的前置条件,所以只有它下游的那些问题需要等子代理回报;前沿上其余的问题现在就问。_决定_是用户的:把每一个都摆到用户面前,然后等。
当前沿清空时,这次会话就结束了:设计树的每个分支都走过了,没有任何东西被默默地当成前提。在用户确认你们已经达成共识之前,不要照着它动手。


