链式提示(Prompt Chaining)
一、概念
把一个复杂任务拆成多个子任务,每个子任务一个提示词,上一步的输出作为下一步输入的一部分,串成一条链输出最终结果。
本质:串行拆解——不是用一个超详细的大提示硬扛,而是”分而治之”,每步只做一件明确的子操作。
二、类型
| 维度 | 单个复杂提示 | 链式提示 |
|---|---|---|
| 任务复杂度 | LLM 可能撑不住 | 靠拆分逐步完成 |
| 透明度 | 黑盒,难定位问题 | 每步可单独检查、定位是哪一环节出错 |
| 控制性 | 中间过程不可控 | 可对中间结果做转换/清洗 |
| 可靠性 | 一步错全错 | 分阶段验证、改进 |
| 索引性 | 无法定位 | 能分析改进每个阶段的性能 |
三、机制
任务 → 子任务1 → 子任务2 → ... → 子任务N → 最终结果
(提示1) (提示2) (提示N)
↓输出 ↓输出 ↓输出
作为提示2输入 作为提示3输入 作为最终回应
两个关键点:
- 提示链对生成的回应执行转换或其他处理,直到达到期望结果。
- 拆出的每一步都是一个独立可验证的环节——这是”控制性、透明度、可靠性”的来源。
四、实例
一个典型的”多操作/多转换”场景。长文档问答被拆成两步:
步骤 1 — 提取(Extraction)
- 任务:从文档中找出与问题相关的引文
- 输出要求:用
<quotes></quotes>标记包裹的引文列表;找不到就回”未找到相关引文!” - 用
####包裹文档占位符{{文档}}
步骤 2 — 生成(Generation)
- 输入:
<quotes></quotes>里的引文 + 原始文档(####分隔) - 任务:基于引文构建准确、友好、有帮助的回答
可扩展的第三步(练习版)
作者提示可以再加一个提示,在最终回应发给用户前移除引用标志(如 [27])——即”清洗/后处理”环节,进一步验证”每一步都是独立转换”的设计思想。
模型/上下文说明
- 长上下文任务用了
gpt-4-1106-preview(也适用于 Claude 等长上下文 LLM) - 灵感来源于 Anthropic 的 prompt-chaining 文档
五、场景
- 文档问答/长文本处理(提取 → 生成,多步转换)
- 构建 LLM 驱动的对话助手
- 提升个性化用户体验的 App
- 任何需要多个操作/多次转换才能完成的任务
链式提示是把复杂任务串行拆成子任务,上一步输出喂给下一步,逐步转换直到最终结果。
分四点:
- 为什么:复杂任务单个提示撑不住;拆开能提升性能、透明度、控制性、可靠性。
- 怎么做:确定子任务 → 每步写一个提示 → 输出作为下一步输入的一部分。
- 典型例子:文档问答拆成「提取引文 → 基于引文生成回答」两步。
- 适用:对话助手、个性化体验、需要多步转换的任务。
一点研究向思考
- 链式提示是”流程控制”层面的设计,不同于 CoT 那种”单次推理内”的引导——链式是在多次调用之间编排,CoT 是在一次调用内部引导推理。
- 拆链时每一步的输出格式要结构化约束(如
<quotes>标记),否则下一步输入会脏(如引用标志[27]污染)——这引出了”清洗步骤”作为独立环节的设计。 - 与 Self-consistency(同题多次采样+投票,偏并行)相对,链式提示是串行的;两者可组合。