re-align · 需求重对齐
> 不删掉旧方案,而是先修好那个"被理解错的起点"。
0. 核心思想
用户的第一句提示词往往没把需求说清,主 agent 顺着错误理解越走越远,后续所有修改都被困在同一个认知框架里——改第 5 版和第 2 版长得几乎一样。
本技能的做法:
- 跳出当前上下文——重新澄清需求,写一份自包含简报;
- 双路并行——派给两个看不到任何历史对话的子 agent 独立产出;
- 显式差异化——两条路线用不同的思考取向,避免产出雷同;
- 结构化对比——主 agent 只做对比和呈现,决策权交给用户。
子 agent 的"无上下文"是特性不是缺陷:它让方案摆脱主 agent 的既有偏见。但也因此,简报必须自包含且干净——它是子 agent 唯一的信息来源。
> 一条硬原则:永远先确认"改还是重来",再动手。
> 重对齐的成本是普通修改的两倍以上,误触发就是纯浪费。
1. Step 0 · 触发闸门
先判断用户说的是哪一种,不要对所有不满都启动重流程:
| 用户的表达 | 动作 |
|---|---|
| 「重来 / 换个思路 / 重新理一遍 / 推倒重做 / 别改了重写」——明确指令 | 跳过问句,直接进 Step 1。 他已经给了答案,再问一遍只是消耗信任 |
| 「感觉不对 / 说不上来哪怪 / 跟我想的不一样 / 方向好像有点偏」——模糊不满 | 问一句:「是要在现有方案上继续改,还是推倒重来、重新理一遍需求?」答"继续改"→ 退出本技能 |
| 「把这句改短 / 换个标题 / 配色再深一点」——局部修改 | 退出本技能,走普通编辑 |
同时过一遍不适用清单,命中任意一条则不启用:
| 不适用 | 原因 |
|---|---|
| 只想改一处措辞、一个参数 | 普通编辑成本更低 |
| 任务非常明确,只是执行有 bug | 需求没歪,是实现的错 |
| 用户已给出完整规格说明书 | 澄清问不出增量信息 |
| 一次性小任务(< 1 分钟可完成) | 双跑成本大于收益 |
> 闸门只决定"要不要走重流程",不决定"走哪一档"。介于中间的任务(半小时到一小时的量、值得换个视角但不值得开两个会话)走 §7 轻量档。
2. Step 1 · 需求澄清
原则
- 一轮问完 3–4 个问题,不要一问一答挤牙膏。(多数工具的选项式提问一次上限是 4 个,别设计 5 个再拆两批)
- 尽量给选项,每个问题 2–4 个候选 + 允许自由输入。
- 问「为什么」和「边界」,不要重复问「要什么」——第一句已经说过了。
- 允许说"不确定",此时按推荐项兜底,不要追问。
- 最多两轮。第二轮还问不出增量,直接让用户给样例。
推荐问题骨架(按任务性质裁剪 3–4 个)
| # | 维度 | 怎么问 | 它在防什么 |
|---|---|---|---|
| ① | 排除项 | 上一版里最让你不能接受的是哪一点? | 防止新方案踩同一个坑 |
| ② | 真实目标 | 如果这一版只能解决一个问题,你希望是什么? | 从"都要"收敛到核心诉求 |
| ③ | 成功画面 | 什么样的产出你会直接说"就是这个"? | 建立可判定的验收标准 |
| ④ | 硬约束 | 长度 / 格式 / 风格 / 受众 / 时间 / 禁忌? | 圈住解空间 |
| ⑤ | 参照物 | 有没有接近你想要的东西?或者最不想做成什么样? | 用样例代替抽象描述 |
> ⑤ 是性价比最高的一问。用户给不出"想要什么",但几乎总能指出"讨厌什么"。
澄清结束的标志
你能不引用任何历史上下文,独立写出一份让用户点头的简报。写不出 → 继续问(总计不超过 2 轮)。
3. Step 2 · 生成自包含简报
简报是子 agent 唯一的信息来源,必须自包含:不出现"上面那个""老方案""跟之前一样",不假设读者看过任何对话。
简报七要素(缺一不可)
# 任务简报
## 1. 背景
(为什么需要这份产出;用户是谁、谁会看、看完要做什么动作)
## 2. 目标
(一句话:这份产出要达成什么效果,不是"写一份 X"这种形式描述)
## 3. 已完成/已尝试
(走过的弯路 + 明确禁止的做法,写具体)
## 4. 硬约束
(格式、长度、风格、技术栈、截止时间、禁忌;必须是可判定的)
## 5. 验收标准
(3 条以内,每条能用"是/否"回答)
## 6. 输出要求
(结构、文件名、是否要表格/代码/图)
## 7. 参考材料
(原文粘贴或附路径,不要写"见历史对话")
完整可填写的模板见 prompts/brief-template.md。
简报自检
- [ ] 陌生人读完能直接开工吗?
- [ ] 有没有提到"上一版""之前""老方案"?有 → 改写成具体内容。
- [ ] 禁忌写清楚了吗?("不要写营销腔""不要用 Markdown 表格")
- [ ] 验收标准能不能用"是/否"判定?
- [ ] 内部有没有自相矛盾?(硬约束和参考材料对同一件事的说法是否一致?)
> 最后一条最容易漏。实测中,简报里"硬约束写某模块已停用、参考材料写它仍在运行"这类
> 前后矛盾,是被子 agent 顺手抓出来的——那属于运气。子 agent 抓到时会把它混进自己的判断,
> 抓不到时两条路线会各自照着一个错的前提往下走。写完后自己回头捋一遍。
4. Step 3 · 双路并行
4.1 派发铁律
做不到第 1 条,整个技能就是白跑,而且你看不出来。
- 必须是全新会话。 子 agent 不能继承当前对话的任何历史。若框架提供"继承上下文 / 复用当前会话 / fork"这类选项,一律关闭。
- 派发后自检上下文泄漏。 子 agent 的产出里若出现"上一版""之前那版""用户说过"这类表述,说明它看到了历史——本次产出作废,重跑。
- 同一轮并行派发,两个子 agent 互不通信,也都不被告知自己是被对比的一方(否则会刻意求异)。
- 产出落盘。 让子 agent 写文件,主 agent 只引用路径。两份上千字的正文直接回贴会把对话淹没,也会让你不自觉地开始总结它们——那就变成站队了。
4.2 取向设定
给两个子 agent 完全相同的简报,只在末尾追加不同的取向提示词。
| 路线 A · 保守派 | 路线 B · 激进派 | |
|---|---|---|
| 定位 | 最贴合字面需求、风险最低 | 重新定义问题、上限最高 |
| 适合 | 合规、工程、有明确规格的任务 | 创意、定位、方向性任务 |
| 风险 | 可能平庸、没惊喜 | 可能偏离、不落地 |
| 作用 | 保下限:至少有一版能直接用 | 探上限 + 暴露假设:让"需求本身可能就错了"被看见 |
4.3 两段提示词(直接复制)
路线 A
【执行取向 · 严格遵循】
你是一个执行者,不是顾问。
1. 严格按简报执行。简报里写什么就做什么,不要自作主张地扩展范围。
2. 逐条满足硬约束。完成后自查每一条约束,说明你是怎么满足的。
3. 不要质疑简报的前提假设。如果你觉得目标可以更好,把建议写在末尾的
「补充说明」里,但主体产出仍严格按简报来。
4. 优先保证"能直接用"。宁可稳妥、少惊喜,也不要冒险发挥。
5. 遇到简报没覆盖的细节,选择最常规、最不会出错的做法。
输出:
- 主体产出(按简报第 6 节的输出要求)
- 约束自查清单(逐条对应简报第 4 节)
- 补充说明(可选,≤ 3 条建议)
路线 B
【执行取向 · 重新定义问题】
你是一个顾问,不是执行者。
1. 先质疑简报。用不超过 100 字回答:
- 简报里最可能出错的假设是哪一条?
- 用户嘴上说要 A,但他真实想解决的其实是 B —— 如果是,B 是什么?
2. 给出你的判断后,产出你认为「正确问题」的最优解,而不是简报字面问题的解。
但你必须仍然产出一份可用的成品,不能只给分析。
3. 允许打破简报里的软性约束(风格、结构、长度),但:
- 硬约束(数据准确性、合规、事实、技术限制)不得打破;
- 每一处打破都要说明理由。
4. 追求上限。宁可锋利、有观点、有风险,也不要四平八稳。
如果你认为存在一条用户完全没想到的路,走那条。
输出:
- 我的判断(≤ 100 字:你认为真正的问题是什么)
- 主体产出
- 与简报的偏离清单(改了什么 + 为什么)
4.4 差异化自检
产出回来先看一眼:两份是不是 80% 像?
- 像 → 差异化不足(或上下文泄漏)。拉大取向差距后重跑,不要硬着头皮对比。
- 不像 → 进入 Step 4。
> 实测参考:同一份简报、同一模型,健康的两版在 3-gram 上相似度通常在 0.05 上下;
> 如果眼睛扫过去"结构几乎一样",基本就是失败了。
5. Step 4 · 结构化对比
四条纪律
- 不预先站队:不做"我推荐 A",只描述差异。
- 不悄悄融合:未经用户选择,不得自行拼合 A 和 B。
- 不省略差异:哪怕差异很小也要写出来,小差异往往是用户真正在意的。
- 不隐藏越界:B 破了哪几条硬约束,必须摆在用户面前的表格里。
对比呈现模板
## 两个方向,你选一个
### 路线 A · 保守派
一句话思路:
核心做法(3 点):
优点风险:
### 路线 B · 激进派
一句话思路:
核心做法(3 点):
优点风险:
### 关键差异
| 维度 | A | B |
| --- | --- | --- |
| 核心思路 | | |
| 满足了你哪条诉求 | | |
| 硬约束达标 | 5/5 | 3/5,见下方偏离清单 |
| 主要风险 | | |
| 改动/落地成本 | | |
<附上 B 的「与简报的偏离清单」原文,不要压缩成一句话——
那几条理由本身就是 B 的价值,也是用户判断能不能接受的全部依据>
**下一步四选一:**
1. 选 A
2. 选 B
3. 按维度融合(告诉我哪些取 A、哪些取 B)
4. 都不满意 → 回到 Step 1 重新澄清(最多再来一轮)
6. Step 5 · 收敛与熔断
- 用户选 A / B → 以该方案为基线继续,退出本技能。
- 用户选融合 → 明确到"哪些维度取 A、哪些取 B",融合后退出。
- 用户都不满意 → 最多再跑一轮(重新澄清 → 换一组差异化维度 → 再双跑)。
熔断规则
第二轮仍不满意时,停止双跑,改为:
> 「两次重对齐都没对上。我们换个方式:你直接给我一份你觉得'接近对'的样例
> (哪怕只有片段),我照着它的结构和语气做,不再猜了。」
猜的成本已经高于问的成本时,就别再猜了。
7. 轻量档 · 快车道
不是所有"重来"都值得开两个会话。判断标准:
| 症状 | 走哪一档 |
|---|---|
| 方向可能就错了、用户说不清要什么、已改 3 版以上 | 双跑(Step 1–4) |
| 方向没大问题,是写法 / 结构 / 语气不对 | 轻量档 |
| 只是一处措辞 | 普通编辑,别启动本技能 |
轻量档做法:主 agent 在同一对话里,先用 B 取向写一版,再用 A 取向写一版,然后自己对比,给出同样的四选一。
代价要讲明白:隔离性差,第二版仍然受第一版影响,差异会明显变小。所以它只适合"换个写法",不适合"方向可能就错了"。
> 一句话:轻量档治写法,双跑治方向。
8. 常见失败模式
| 症状 | 原因 | 处理 |
|---|---|---|
| 两版高度雷同 | 取向差异不足 或 子 agent 继承了上下文 | 先查是不是用了 fork 模式;再拉大 A/B 差距重跑 |
| 子 agent 提到"上一版" | 上下文泄漏 | 本次产出作废,关闭继承选项后重跑 |
| 两版都没对上需求 | 简报不自包含,或简报内部有矛盾 | 回到 Step 1,用样例代替提问 |
| B 的产出跑得没边 | 简报没写禁忌 / 硬约束不够硬 | 补全"走过的弯路"和"明确禁止" |
| 用户觉得"太慢了" | 小任务误触发,或该走轻量档却开了双跑 | 下次先过不适用清单 |
| 对比时忍不住说"我推荐 A" | 站队冲动 | 删掉推荐句,只留差异,把选择权还回去 |
9. 无子 agent 环境的手工版
当前工具不支持派发子 agent 时,用两个全新的空白对话手动复现:
- 在主对话完成 Step 1 → 2,拿到简报。
- 新对话 A:粘贴简报 + §4.3 的路线 A 提示词。
- 新对话 B:粘贴同一份简报 + §4.3 的路线 B 提示词。
- 把两份结果贴回主对话,按 Step 4 模板对比。
关键是新对话——不共享上下文,才有效果。在同一个对话里连说两次"换个思路",第二次仍然带着第一次的记忆,那是无效双跑。
10. 设计取舍说明
- 为什么是两条不是三条:第三条几乎总是前两条的平均,信息增量低,成本 +50%,还加重用户的决策疲劳。
- 为什么不自动融合:融合权在用户手上。自动融合会抹掉两条路线的锋利度,也让用户失去"我到底想要什么"的判断机会。
- 为什么必须先问"改还是重来":双跑成本是单跑的两倍(还要写简报、做对比)。这一问成本几乎为零,换掉的是最贵的误触发。但用户已经明说"重来"时不再问——闸门拦的是模糊,不是指令。
- 为什么要有熔断:两轮都对不上,通常意味着需求存在于用户看过但描述不出的某个样例里。此时"承认猜不动"比"再猜一次"值钱。
- 为什么加轻量档:双跑是好东西,但它只对"方向可能错了"有效。把写法问题也塞进双跑,用户会先嫌慢,然后弃用整个技能。