提示链
提示链介绍
为了提高LLMs的可靠性和性能,其中一个重要的提示工程技术是将任务分解为其子任务。一旦这些子任务被识别出来,LLM就会被提示一个子任务,然后其响应被用作另一个提示的输入。这就是所谓的提示链,其中任务被分解为子任务,目的是创建一系列提示操作。
提示链对于完成复杂任务非常有用,如果一个LLM被提示一个非常详细的提示,它可能会难以解决。在提示链中,链提示在达到最终期望状态之前对生成的响应执行转换或附加处理。
除了实现更好的性能,提示链还有助于提高您的LLM应用程序的透明度,增加可控性和可靠性。这意味着您可以更轻松地调试模型响应中的问题,并在需要改进的不同阶段分析和提高性能。
提示链在构建基于LLM的对话助手以及提升应用程序的个性化和用户体验方面特别有用。
提示链的使用案例
文档问答的提示链
提示链可以用于涉及多个操作或转换的不同场景。例如,LLMs的一个常见用例是回答关于大型文本文档的问题。如果你设计两个不同的提示,其中第一个提示负责提取相关引用来回答问题,而第二个提示将引用和原始文档作为输入来回答给定的问题,这会很有帮助。换句话说,你将创建两个不同的提示来执行回答文档中给定问题的任务。
下面的第一个提示从给定问题的文档中提取相关引用。请注意,为了简单起见,我们为文档添加了一个占位符 {{document}}
。要测试提示,您可以复制并粘贴维基百科上的文章,例如提示工程(在新标签页中打开)的页面。由于此任务使用了较大的上下文,我们使用了OpenAI的gpt-4-1106-preview
模型。您可以将此提示与其他长上下文LLM(如Claude)一起使用。
提示 1:
You are a helpful assistant. Your task is to help answer a question given in a document. The first step is to extract quotes relevant to the question from the document, delimited by ####. Please output the list of quotes using <quotes></quotes>. Respond with "No relevant quotes found!" if no relevant quotes were found.
####
{{document}}
####
这是整个提示的截图,包括使用user
角色传递的问题。
提示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提取的相关引文,并为文档中给出的问题和那些提取的引文准备一个有用的回答。第二个提示可以是以下内容:
提示 2:
Given a set of relevant quotes (delimited by <quotes></quotes>) extracted from a document and the original document (delimited by ####), please compose an answer to the question. Ensure that the answer is accurate, has a friendly tone, and sounds 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的输出:
The prompting 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 of these techniques employs unique strategies to enhance or specify the interactions with large language models to produce the desired outcomes.
正如你所见,简化和创建提示链是一种有用的提示方法,其中响应需要经过多次操作或转换。作为练习,请随意设计一个提示,在将此作为最终响应发送给应用程序用户之前,从响应中删除引用(例如,[27])。
你也可以在这份文档 (在新标签页中打开)中找到更多关于提示链的示例,这些示例利用了Claude LLM。我们的示例灵感来源于并改编自他们的示例。