成功实现RAG的提示工程模式

Prompt Engineering Patterns for Successful RAG Implementations

成功实现RAG的提示工程模式
作者 | Ideogram 提供图片

你我心知肚明:人们越来越依赖生成式人工智能(AI)和大型语言模型(LLM)来快速便捷地获取信息。这些模型通过传递简单的指令提示,就能返回通常令人印象深刻的生成文本。然而,有时输出结果不准确或与提示无关。这就是检索增强生成(Retrieval-Augmented Generation, RAG)技术思想的由来。

RAG,即检索增强生成,是一种利用外部知识来改进LLM生成结果的技术。通过构建一个包含所有用例详尽相关信息的知识库,RAG能够检索最相关的信息,为生成模型提供额外的上下文。

RAG的一个关键部分是提示(prompting),无论是用于获取相关信息的检索部分,还是我们将上下文传递给模型以生成文本的生成部分。因此,正确管理提示至关重要——这样RAG才能提供最佳、最相关的可能输出。

本文将探讨各种提示工程方法,以改进您的RAG结果。

检索提示

在RAG结构中,检索提示的作用是改进检索过程的查询。它并非必须存在,因为检索提示通常用于查询增强,例如重写。通常,一个简单的RAG实现只会将原始查询传递给知识库进行检索。这就是检索提示存在的原因:为了增强查询。

Prompt Engineering Patterns for Successful RAG Implementations

让我们逐一探讨这些方法。

查询扩展

查询扩展,顾名思义,是提示您扩展当前用于检索的查询。其目标是通过使用更好的措辞重写查询,以检索到更多相关的文档。

我们可以通过要求LLM重写查询来扩展它,例如生成同义词或利用领域专业知识添加上下文关键词。以下是一个扩展当前查询的示例提示。

“将查询 {query} 扩展为3个适合搜索的版本,使用同义词和相关术语。优先使用 {domain} 领域的专业术语。”

我们可以使用模型来扩展当前查询,使用特定于您用例的提示。您甚至可以添加更多细节,并提供您已知效果良好的提示示例。

上下文连续性

如果用户已经有使用系统的历史记录,我们可以将之前的历史迭代添加到当前查询中。我们可以利用对话历史来优化检索查询。

该技术旨在优化查询,前提是假设对话历史对于后续查询也至关重要。这项技术非常依赖于具体用例,因为在许多情况下,历史记录可能对用户输入的后续查询并不必要。

例如,提示可以写成如下形式:

“根据用户先前关于 {history} 的历史查询,将其新查询:{new query} 重写为一个独立的搜索查询。”

您可以通过添加更多查询结构或要求在将历史记录添加到上下文连续性提示之前对其进行总结,来进一步调整查询。

假设性文档嵌入(HyDE)

假设性文档嵌入(HyDE)是一种通过生成假设性答案来增强查询的技术。在这种技术中,我们要求LLM思考查询的理想输出,并利用这些输出来优化结果。

这是一种可以提高检索结果的技术;例如,一个假设性文档可以为检索模型指明方向。假设性文档的质量也将取决于LLM的质量。

例如,我们可以使用以下提示:

“写一个假设性的段落来回答 {user query}。使用这段文本来查找相关文档。”

我们可以直接使用这个查询,或者将假设性文档添加到我们使用其他技术优化过的查询中。重要的是,生成的假设性文档与原始查询相关。

生成提示

RAG由检索和生成两个方面组成。生成方面是将检索到的上下文传递给LLM以回答查询。很多时候,我们为生成部分设置的提示非常简单,即使我们拥有相关的文档块,生成的输出也不够理想。我们需要一个合适的生成提示来改进RAG的输出。

我之前写过更多关于提示工程技术的文章,您可以在这篇文章中阅读。不过,现在让我们进一步探讨对RAG系统生成部分有用的提示。

明确的检索约束

RAG的核心是将检索到的上下文传递到生成提示中。我们希望LLM根据传递给模型的文档来回答查询。然而,许多LLM的回答超出了给定上下文的范围。因此,我们可以强制LLM仅根据检索到的文档来回答。

例如,这是一个明确强制模型仅通过文档回答的查询:

“仅使用提供的文档来源回答:{documents}。如果答案不在其中,请回答‘我不知道’。不要使用先验知识。”

使用上述提示,我们可以消除生成器模型的任何幻觉。我们限制了其固有的知识,只使用上下文知识。

思维链(CoT)推理

思维链(CoT)是一种推理性的提示工程技术,它确保模型在得出输出之前先分解复杂问题。它鼓励模型使用中间推理步骤来增强最终结果。

在RAG系统中,CoT技术将有助于提供更结构化的解释,并根据检索到的上下文来证明响应的合理性。这将使结果更加连贯和准确。

例如,我们可以在生成提示中使用以下查询进行CoT:

“根据检索到的上下文:{retrieved documents},分步回答问题 {query},首先识别关键事实,然后进行推理得出答案。”

尝试使用上述提示来改进RAG的输出,特别是当用例涉及复杂的问答过程时。

抽取式回答

抽取式回答是一种提示工程技术,它尝试仅使用所传递文档中的相关文本来产生输出,而不是从中生成详尽的响应。通过这种技术,我们可以返回检索到文档中的确切部分,以确保幻觉最小化。

提示示例如下:

“从检索到的文档 {retrieved documents} 中提取最相关的段落来回答查询 {query}。
仅返回 {retrieved documents} 中的确切文本,不作任何修改。”

使用上述提示,我们将确保知识库中的文档内容不被改变。在各种用例中,例如法律或医疗案例,我们不希望对文档有任何偏离。

对比式回答

对比式回答是一种技术,它根据给定的上下文从多个角度生成响应来回答查询。当单一视角可能不足时,它被用来权衡不同的观点和论据。

如果我们的RAG用例处于需要持续讨论的领域,这项技术将非常有用。它将帮助用户看到不同的解释,并鼓励对文档进行更深入的探索。

例如,这是一个使用文档的优缺点来提供对比式答案的查询:

“根据检索到的文档:{retrieved documents},通过列出以下内容,对 {query} 进行均衡分析:
– 优点(支持性论据)
– 缺点(反驳性论据)
用检索到的上下文中的证据支持每个观点。”

您总是可以将提示调整为更详细的结构和讨论格式。

结论

RAG通过利用外部知识来改进LLM的输出。使用RAG,模型可以利用实时数据提高结果的准确性和相关性。

一个基本的RAG系统分为两部分:检索和生成。在每个部分中,提示都可以在改进结果方面发挥作用。本文探讨了几种可以促进RAG成功实施的提示工程模式。

希望这对您有所帮助!

暂无评论。

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。