基于博文 Advanced RAG Techniques: an Illustrated Overview 的学习和练习的记录。
中文内容可以查看博主@宝玉的译文 高级 RAG 技术:图解概览 [译]
系列笔记:
RAG 学习笔记(一)
RAG 学习笔记(二)
RAG 学习笔记(三)
RAG 学习笔记(四)
RAG 学习笔记(五)
RAG 学习笔记(六)
RAG 中的 Agent
Agent 本身就是一个大的话题,本文只讨论 RAG 涉及的相关内容
Agent
Agent 是使用 LLM 进行推理,为其提供一系列工具完成一个任务。
工具包括一系列定义好的函数,比如:代码函数、外部API、其他的 Agent。
OpenAI 助理
OpenAI 助理基本上实现了很多工具供 LLM 选择,比如:
- 对话历史
- 知识库
- 文档上传
- 函数调用 API
函数调用可以将自然语言转换为对外部工具、数据库查询的API调用
LlamaIndex 中的 OpenAIAgent ,将函数调用与 ChatEngine 和 QueryEngine 结合起来,提供了基于知识和上下文感知的对话功能,并能够在单轮对话中进行多次 OpenAI 函数调用,带来了智能 Agent 的能力。
多文档 Agent 架构
- 多文档 Agent 包括:
- 对每个文档初始化一个 Agent (OpanAIAgent),可以完成文档总结和问答
- 一个顶级 Agent,负责将查询路由到文档 Agent 和进行最后回答的合成
- 文档 Agent 有两个工具:向量索引和摘要索引,根据查询决定使用哪个工具
- 对于顶级 Agent,所有的文档 Agent 都是工具
优点:
- 可以支持“文档集合对话” 场景中的几乎所有的用例,比如:对比不同文档中描述的方案或实体,传统的单文档总结、问答。
缺点
- Agent 内部需要进行多次来回迭代,所以执行速度会比较慢。
- 在 RAG pipeline 中,LLM 调用时最耗时的。
对于大型的多文档存储,作者建议简化架构,使其具有可扩展性。
响应内容合成器
内容响应合成是 RAG pipeline 的最后一步,根据检索到的上下文内容和用户原始的查询,生成最后的响应内容。
- 简单方法:将检索到的上下文和查询拼接,一起发送给 LLM
- 高级方法:多次调用 LLM,优化检索到的上下文,从而生成更好的回答
主要合成响应内容的高级方法有:
- 迭代细化答案:逐个将检索到的上下文文本块发送给 LLM,根据上一个文本块生成的答案会和下一个文本块内容一同发送给 LLM
- 总结检索到的上下文
- 根据每一个检索到的文本块生成各自的答案,然后将答案拼接或者总结。
详细可以查看 LlamaIndex 文档的介绍:Response Synthesizer