LlamaIndex 讲解 Agentic RAG:用多文档 Agent 构建可扩展的 RAG 架构
Agentic RAG With LlamaIndex
LlamaIndex 博客介绍 Agentic RAG 架构:将最多 100 篇文档拆分后,为每篇文档创建具备嵌入搜索与摘要能力的文档 Agent,再由顶层 meta-agent 通过工具检索和 CoT 回答用户问题,并用 Rerank 端点对文档按相关性排序。
原文拆解了多文档 Agent 与顶层 meta-agent 的编排结构,并给出可运行的 Colab 示例,读者可据此理解 Agentic RAG 的扩展方式。
Agentic RAG 这一主题探讨了如何将智能体融入现有的 RAG 流程,以实现增强的对话式搜索与检索。
立即探索我们的免费和付费方案。
简介
观察下面的架构,可以明显看出 Agentic RAG 如何构建出一个易于扩展的实现。可以添加新文档,每一组新文档都由一个子智能体管理。
LlamaIndex 所采用的方法称为 Agentic RAG,其基本结构如下图所示:大量文档被摄取,在此例中限制为 100 份。
庞大的数据语料被拆分为较小的文档。为每个文档创建一个智能体,众多文档智能体中的每一个都具备通过嵌入进行搜索以及对响应进行摘要的能力。
在这些文档智能体之上创建一个顶层智能体。元智能体/顶层智能体执行工具检索,然后使用思维链来回答用户的问题。
Rerank 端点会为查询和每个文档计算相关性得分,并返回从最相关到最不相关的排序列表。
Notebook 示例
在这里你可以找到一个 Colab notebook ,其中包含此 实现的完整可运行并已执行的示例。
要运行该 notebook,你需要一个 OpenAI 和 Cohere API 密钥……
import os
import openai
import cohereos.environ["OPENAI_API_KEY"] = "Your API Key goes here"
os.environ["COHERE_API_KEY"] = "Your API Key goes here"
对于每个文档智能体,系统提示词为:
You are a specialized agent designed to answer queries about the
`{file_base}.html` part of the LlamaIndex docs.You must ALWAYS use at least one of the tools provided when answering a
question; do NOT rely on prior knowledge.
元智能体/顶层智能体的系统提示词:
You are an agent designed to answer queries about the documentation.
Please always use the tools provided to answer a question.
Do not rely on prior knowledge工作示例
我向智能体提出了以下问题:
Tell me about LlamaIndex connectors
以下是智能体生成的详细回答:
思考:我需要使用一个工具来帮助我回答问题。
操作:tool_latest_search 操作输入:{‘input’: ‘LlamaIndex connectors’}
已将用户消息添加到记忆:LlamaIndex connectors
=== 调用函数 ===
调用函数:vector_tool_latest_search
参数:{
“input”: “LlamaIndex connectors”
}
获得输出:
LlamaIndex 连接器可在
/content/docs.llamaindex.ai/en/latest/search.html 页面找到。
========================
观察:LlamaIndex 连接器并未在 LlamaIndex 文档的 `latest_search.html` 部分中特别提及。你可能需要查看文档的其他部分,以获取有关 LlamaIndex 连接器的详细信息。
思考:我需要在另一个工具中搜索有关 LlamaIndex 连接器的信息。
操作:tool_latest_index 操作输入:{‘input’: ‘LlamaIndex connectors’}
已将用户消息添加到记忆:LlamaIndex connectors
=== 调用函数 ===
调用函数:vector_tool_latest_index,
参数:{
“input”: “LlamaIndex connectors”
}
获得输出:LlamaIndex 提供数据连接器,允许你从各种来源和格式中摄取现有数据。这些连接器可与 API、PDF、SQL 等配合使用。通过使用 LlamaIndex 连接器,你可以轻松地将数据引入 LlamaIndex 生态系统,并使其可用于自然语言访问和检索。 ========================
观察:LlamaIndex 提供数据连接器,使你可以从各种来源和格式导入现有数据。这些连接器兼容 API、PDF、SQL 等。利用 LlamaIndex 连接器,你可以将数据无缝集成到 LlamaIndex 生态系统中,使其可随时用于自然语言访问和检索。
思考:我无需使用更多工具即可回答。
回答:LlamaIndex 连接器用于将来自各种来源和格式的现有数据导入 LlamaIndex 生态系统。这些连接器兼容 API、PDF、SQL 等,可实现数据的无缝集成,以便进行自然语言访问和检索。
以下是 Colab notebook 中的一段代码片段:
这个来自 LlamaIndex 的复杂实现是多文档代理的一个示例,它可以:
- 选择与用户查询相关的文档
- 对与查询相关的文档执行代理循环;包括思维链、摘要和重排序。
结论
LlamaIndex 的这一实现说明了几个关键原则……
- 代理式 RAG,即在 RAG 实现中采用代理方法,为 RAG 实现增加了韧性和智能。
- 这是多代理编排的一个很好的示例。
- 这种架构作为一个很好的参考框架,说明了如何通过第二层更小的工作代理来优化代理的扩展。
- 代理式 RAG 是受控且定义明确的 自主 代理 实现的一个示例。
- 最受追捧的企业 LLM 实现类型之一是 RAG,代理式 RAG 是它的自然演进。
- 很容易设想这种架构如何在组织中发展壮大,并添加更多子机器人。
⭐️ 在 LinkedIn 上关注我,获取大语言模型的最新动态 ⭐️
来源:LlamaIndex:产品、工程与评测 · llamaindex.ai