基于博文 Advanced RAG Techniques: an Illustrated Overview 的学习和练习的记录。
中文内容可以查看博主@宝玉的译文 高级 RAG 技术:图解概览 [译]
系列笔记:
RAG 学习笔记(一)
RAG 学习笔记(二)
RAG 学习笔记(三)
RAG 学习笔记(四)
RAG 学习笔记(五)
参考引用
用户最终获得的回答来自于多个源:
- 复杂查询:使用多个子查询检索获得的上下文整合为一个回答
- 单个查询:从各种文档中检索到的相关上下文合并成一个回答
问题:如何准确回溯回答内容的来源
方法:
- 将内容引用的任务增加到 prompt 中,让 LLM 来提示内容引用来源的 id
-
将生成的回答与检索到的文本块匹配。
- LlamaIndex 实现:Fuzzy Citation Query Engine Pack
- LangChain 实现:CitationFuzzyMatch_chain
- 使用技术:字符串模糊匹配
参考引用是一个工具,并不是改进检索性能的方法。
对话引擎(Chat Engine)
RAG 系统,只有单次查询是不够的。一个优秀的 RAG 系统需要支持对话逻辑,在查询的时候能够将对话的上下文考虑在内。
技术点
查询压缩技术(query compression)
- 将对话历史和用户查询语句一并考虑
实现方法
-
ContextChatEngine:简单且流行的方法
- 使用用户查询语句获取相关内容
- 将检索结果和对话历史一并发送给 LLM,用于生成回答
-
CondensePlusContextMode:更为复杂的实现
- 将用户查询语句和对话历史一并发送给 LLM,生成一个新的查询语句
- 使用新的查询语句获取检索结果
- 将检索结果和用户的原始查询语句一并发送给 LLM,生成回答
ReAct Agent:内容和 Agent 相关,后面一并介绍
动手练习
LangChain ConversationalRetrievalChain 对话方法实现
查询路由(Query Routing)
- 由 LLM 支持的决策步骤
- 用来决定根据用户的查询,下面要做什么事情。通常有以下任务:
- 内容总结
- 从某个数据源检索数据(关系型数据库,图数据库,向量数据库等)
- 执行多个不同的路由,并将各个路由的执行结果合并,提供给 LLM 生成回答。
技术说明
- 查询路由的定义中包含可以执行的选项,可以是
- 检索某个数据源的数据
- 如果是 Agent 应用,可能是执行子任务链或者其他的 Agent(如多文档 Agent,后面会介绍)
- 通过 LLM 决定具体执行的选项,返回的结果是预先定义的格式,方便程序调用方法执行具体任务。