TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

链式提示:把大任务拆成几步

链式提示把大任务拆成子任务,让前一个提示的输出成为下一个提示的输入。看完能把长文档问答拆成两环提示链,掌握拆链的时机和三条实用原则。

一个提示塞不下的大任务——长文档问答、多步处理、要中间校验的流程——硬塞给模型一次做完,往往哪一步都不稳定。链式提示(prompt chaining)的思路是把任务拆成几个子任务,让前一个提示的输出成为后一个提示的输入,一步步逼近最终结果。读完这篇你能把一个复杂任务拆成提示链,还会知道拆链子的时机和原则。

链式提示是什么

链式提示把任务分解为若干子任务:先确定子任务,把子任务的提示词交给语言模型,得到的结果作为新提示词的一部分,继续下一步 [1]。提示链对每一步生成的回应执行转换或其他处理,直到达到期望结果 [1]。

它解决的问题很具体:有些复杂任务,一个写得再细的提示也做不好 [1]。拆成链之后,每一环只干一件事,出错范围小;结果在链上流动时,你可以在中间插入检查或清理步骤。这句话的另一面是:链上的每一环都是独立可测的——把某一环的输入输出存下来,单独重跑、单独评估,这正是单提示应用做不到的。

除了性能,链式提示还提高了 LLM 应用的透明度、可控性和可靠性:模型哪里出了问题更容易定位,各阶段的性能也能分别分析和改进 [1]。构建 LLM 驱动的对话助手、改进应用的个性化体验,都能用上这套思路 [1]。举一个运维场景:一条「读文档—提取要点—生成回复」的链跑了一个月突然质量下降,单提示的应用你只能对着最终输出猜原因,链式应用则可以直接翻出中间环节,看是文档变了、要点漏了,还是回复环节的提示失效了——定位成本完全不同。

文档问答怎么拆成两步

以一个最常见的场景为例:根据一篇很长的文档回答问题。直接把文档和问题一起丢给模型,它经常漏掉关键段落。更好的做法是拆成两个提示 [1]。

第一步,从文档里提取和问题相关的引文。提示里用 {{文档}} 占位符放文档,引文用 <quotes></quotes> 包起来输出;找不到相关引文就明确回答「未找到相关引文!」[1]:

你是一个很有帮助的助手。你的任务是根据文档回答问题。第一步是从文档中提取与问题相关的引文,由####分隔。请使用<quotes></quotes>输出引文列表。如果没有找到相关引文,请回应“未找到相关引文!”。

####
{{文档}}
####

这个任务上下文很长,示例用的是 OpenAI 的 gpt-4-1106-preview 模型;Claude 这类长上下文模型同样适用 [1]。注意提示里的两句关键设计:引文必须「与问题相关」,这一句把模型的注意力从通读全文压缩到只找有用段落;「没有就明说」这一句给模型留了退路,防止它为了交差硬凑引文。提取出来的引文长这样 [1]:

<quotes>
- Chain-of-thought (CoT) prompting[27]
- Generated knowledge prompting[37]
- Least-to-most prompting[38]
- Self-consistency decoding[39]
- Complexity-based prompting[41]
- Self-refine[42]
- Tree-of-thought prompting[43]
- Maieutic prompting[45]
- Directional-stimulus prompting[46]
- Textual inversion and embeddings[59]
- Using gradient descent to search for prompts[61][62][63][64]
- Prompt injection[65][66][67]
</quotes>

第二步,把引文连同原始文档一起交给第二个提示,让它根据引文构建回答 [1]:

根据从文档中提取的相关引文(由<quotes></quotes>分隔)和原始文档(由####分隔),请构建对问题的回答。请确保答案准确、语气友好且有帮助。

####
{{文档}}
####

<quotes>
- Chain-of-thought (CoT) prompting[27]
- Generated knowledge prompting[37]
- Least-to-most prompting[38]
- Self-consistency decoding[39]
- Complexity-based prompting[41]
- Self-refine[42]
- Tree-of-thought prompting[43]
- Maieutic prompting[45]
- Directional-stimulus prompting[46]
- Textual inversion and embeddings[59]
- Using gradient descent to search for prompts[61][62][63][64]
- Prompt injection[65][66][67]
</quotes>

输出 [1]:

文档中提到的提示技术包括:

1. Chain-of-thought (CoT) prompting[27]
2. Generated knowledge prompting[37]
3. Least-to-most prompting[38]
4. Self-consistency decoding[39]
5. Complexity-based prompting[41]
6. Self-refine[42]
7. Tree-of-thought prompting[43]
8. Maieutic prompting[45]
9. Directional-stimulus prompting[46]
10. Textual inversion and embeddings[59]
11. Using gradient descent to search for prompts[61][62][63][64]
12. Prompt injection[65][66][67]

每一种技术都采用独特的策略来增强或明确与大型语言模型的互动,以产生期望的结果。

输出的答案确实基于第二步的提示而非空想:十二条技术名一字不差地来自第一步提取的引文。两步之后,答案建立在第一步筛出的引文上,而不是模型对整篇文档的模糊印象上——这正是拆两环的价值:第一环负责「找得全」,第二环负责「答得准」,各自的提示都可以单独调优。引文在进第二环之前还可以清理,比如去掉引用标志;按同样的思路,你可以再加一环,在把回答发给应用用户之前移除响应里的引用标志(如 [27])[1]。

链式提示的代价

拆链不是免费的,先算清三笔账再动手:

  1. 调用次数成倍增加。原来一次调用完成的任务,两环就是两次调用、三次生成,费用和延迟都按倍数涨;
  2. 中间结果会膨胀。像文档问答这样把引文和原始文档都传给下一环的用法,第二环的输入比第一环还大,上下文费用要注意;
  3. 状态要自己管。环与环之间的输出格式、变量传递、失败重试,都成了你要写的代码,链越长工程负担越重。

所以环数要克制:能合并的步骤合并,只为真正需要独立校验或独立格式的环节单开一环。

拆链子的三个原则

把大任务拆成提示链时,可以按下面三条来切:

  1. 每一环只做一类操作:提取、改写、校验、总结分开,哪一环出问题立刻知道;
  2. 环与环之间约定明确的交接格式,比如 <quotes></quotes> 这样带标记的包装,下一步的提示才知道从哪里开始读输入;格式一旦定下来不要轻易改,改格式等于改下游每一环的提示;
  3. 给关键环节准备「空结果」的出路:第一环什么都没找到时,让它明确说「未找到相关引文!」,而不是硬编一个答案 [1]。

什么时候用链式提示

判断标志有两个:任务需要多次不同类型的转换,或者一个提示怎么写都顾不全所有细节。拿不准的时候,先按单提示做,出了具体问题再拆。前者拆成链,后者至少能换来可控性——每一步的输入输出都能单独检查。反过来说,如果一个任务一次调用就能稳定完成,不必为了架构好看硬拆成链,多出来的费用和延迟没有回报。想看更多例子,Anthropic 的文档里有配合 Claude 使用的提示链示例 [1]。

本文改编自 DAIR.AI 开源教程《Prompt Engineering Guide》的链式提示一节[1],原文以 MIT 许可证发布。

来源

  1. 1
    链式提示 | Prompt Engineering GuideDAIR.AI Prompt Engineering Guide (MIT)

引用本页: 链式提示:把大任务拆成几步. TellWorld, https://www.tellworld.net/zh/practice/practice-prompt-chaining. 更新于 2026-11-14

相关动态