增强RAG应用:让模型自动添加引用的五种方法

224 阅读3分钟
# 引言

在生成式问答系统中,确保模型输出的信息有明确的来源是至关重要的。特别是在基于检索-生成(RAG)的应用中,能够标明模型引用的文档部分会极大提升系统的可靠性和用户信任度。本指南将介绍五种方法来让模型在生成回答时自动引用其参考的文档部分。

# 主要内容

## 1. 使用工具调用标识文档ID
如果你的语言模型(LLM)支持工具调用功能,可以使用它让模型标记其参考的具体文档。这样的方法通过直接在模型输出中包含文档标识符,使引用变得简单明了。

## 2. 使用工具调用标识文档ID并提供文本片段
除了文档ID,还可以提供文本片段,这样可以为用户提供更明确的引用。在长文档中,这种方法尤其有效。

## 3. 直接提示
对于不支持工具调用的模型,直接提示是一种替代策略。通过精心设计的提示,可以让模型在输出中自动生成引用。

## 4. 检索后处理
通过后处理步骤压缩检索到的内容,使得模型不需要精确引用具体的文档或片段。这通常通过将文档分割成更小的单元来实现。

## 5. 生成后处理
生成后处理策略涉及两步调用:第一步生成回答,第二步让模型标记回答中的引用部分。这种方法的缺点是增加了时间和成本。

# 代码示例

以下是如何实现使用工具调用标识文档ID的方法的一个示例:

```python
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_community.retrievers import WikipediaRetriever
from langchain_core.prompts import ChatPromptTemplate

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

# 使用API代理服务提高访问稳定性
retriever = WikipediaRetriever(top_k_results=6, doc_content_chars_max=2000)
prompt = ChatPromptTemplate.from_messages([("system", "你是一个帮助用户问题的AI助手."), ("human", "{input}")])

# 示例调用
result = chain.invoke({"input": "猎豹能跑多快?"})
print(result["answer"])  # 输出答案

常见问题和解决方案

挑战:模型输出的引用不准确 解决方案:通过增加训练数据或调整提示来改进模型对引用的理解。

挑战:处理长文档时性能降低 解决方案:使用文档分割与过滤技术,确保模型接收到最相关的内容。

总结和进一步学习资源

本文介绍了五种在RAG应用中添加引用的方法,每种方法都有其适用场景和优势。选择合适的方法将确保系统提供可靠和可验证的信息。

进一步学习资源

参考资料

  1. LangChain介绍
  2. Pydantic使用指南

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

---END---