Prompt Chaining
拆分任务、逐步生成,让输出更可控
#简介
为了提高大语言模型的性能使其更可靠,一个重要的提示工程技术是将任务分解为许多子任务。 确定子任务后,将子任务的提示词提供给语言模型,得到的结果作为新的提示词的一部分。 这就是所谓的链式提示(prompt chaining),一个任务被分解为多个子任务,根据子任务创建一系列提示操作。
https://www.youtube.com/embed/CKZC5RigYEc?si=EG1kHf83ceawWdHX
链式提示可以完成很复杂的任务。LLM 可能无法仅用一个非常详细的提示完成这些任务。在链式提示中,提示链对生成的回应执行转换或其他处理,直到达到期望结果。
除了提高性能,链式提示还有助于提高 LLM 应用的透明度,增加控制性和可靠性。这意味着您可以更容易地定位模型中的问题,分析并改进需要提高的不同阶段的性能。
链式提示在构建 LLM 驱动的对话助手和提高应用程序的个性化用户体验方面非常有用。
#链式提示使用示例
#文档问答中的链式提示
提示链可以用于不同的场景,这些场景可能涉及多个操作或转换。例如,LLM 的一个常见用途是根据大型文本文档回答问题。想要更好阅读大文本文档,可以设计两个不同的提示,第一个提示负责提取相关引文以回答问题,第二个提示则以引文和原始文档为输入来回答给定的问题。换句话说,可以创建两个不同的提示来执行根据文档回答问题的任务。
下面的第一个提示根据问题从文档中提取相关引文。请注意,为了简化,我们为文档添加了一个占位符
{{document}}gpt-4-1106-preview提示 1:
codeYou are a helpful assistant. Your task is to answer a question based on a document. Step 1: Extract quotes that are relevant to the question from the document delimited by ####. Output the quote list using <quotes></quotes>. If you cannot find any relevant quotes, respond with "No relevant quotes found!". #### {{document}} ####
这是整个提示的截图,包括通过
user
提示 1 的输出:
code<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>
在第一个提示中返回的引文现在可以用作下面第二个提示的输入。您可以对这些引文进行清理,比如移除引用标志。可以在提示链中新建另一个提示来移除或使用这些引用标志,但现在您可以忽略这些。然后,第二个提示接收由第一个提示提取的相关引文,并根据文档和这些提取的引文生成一个有帮助的回答。第二个提示可以是以下内容:
提示 2:
codeUsing the relevant quotes extracted from the document (delimited by <quotes></quotes>) and the original document (delimited by ####), write an answer to the question. Make sure the answer is accurate, friendly, and helpful. #### {{document}} #### <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>
提示 2 的输出:
codeThe prompt techniques mentioned in the document include: 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] Each technique applies a distinct strategy to improve or constrain interactions with large language models to produce desired outputs.
如您所见,简化并创建提示链是一种有用的提示方法,其中响应需要经过多个操作或转换。作为练习,您可以自由设计一个提示,它会在将响应作为最终回应发送给应用程序用户之前,移除响应中的引用标志(例如,
[27]您还可以在这份文档中找到更多关于提示链的示例,这些示例利用了 Claude LLM。我们的示例灵感来源于他们,并采用了他们的示例。