在人工智能快速发展的今天,检索增强生成(Retrieval-Augmented Generation,简称 RAG)技术已经成为大语言模型(LLM)应用的关键突破。RAG 框架不断推陈出新、日新月异,从 Navie RAG、高级 RAG、模块化 RAG,发展到现在的 Graph based RAG,甚至混合高级 RAG 与 GraphRAG 的 HybridRAG。那么,如何在日新月异的 RAG 技术下,开发一种能够不断适应的框架呢?今天,我们将深入探讨 Agentic RAG,这一革命性的方法正在重新定义智能信息检索与生成的边界。
本文先讨论 Agentic RAG 常见范式,然后推荐一些流行的 Agentic RAG 开发示例:Nvidia 的 Agentic RAG 案例和基于 LlamaIndex 的 Agentic RAG 设计等。
传统 RAG 系统的工作方式相对简单:接收用户查询 → 检索相关文档 → 基于文档生成答案。但在实际应用中,这种线性模式通常显得过于刻板和局限。现实世界的问题往往错综复杂,需要更加智能和灵活的方案。
Agentic RAG 引入了一个关键概念:让 Agent 在整个信息检索和生成过程中主动思考和决策。这不仅仅是一个技术术语,而是一种全新的智能工作范式。
在 Agentic RAG 中,原始用户查询不再被直接照搬,而是经过精细的分析和重构:
想象一下,用户询问"最近的天气对公司销售有什么影响"。传统 RAG 可能会束手无策,而 Agentic RAG 会:
Agentic RAG 的一大优势在于其灵活的数据检索能力:
举个例子,对于一个客户支持场景,系统可以:
Agentic RAG 不满足于仅仅给出一个答案,而是通过多轮迭代不断优化:
传统系统遇到无法回答的问题往往会直接告诉用户"无法解决"。而 Agentic RAG 则会:
Nvidia 展示的 Agentic RAG 只是一个示例,参考了如下 3 篇论文实现。
它基本实现了如下图所示的框架,它使用打分机制评判答案是否包含幻觉,是否需要加入新的信息。具体地址可以参考:https://github.com/NVIDIA/workbench-example-agentic-rag/blob/main/code/langgraph_rag_agent_llama3_nvidia_nim.ipynb,整个代码基于Langchain开发,使用流程编排完成,包含大量的Prompt设计。
这个项目还包含ChatUI,可以显示具体的运行流程,如下图所示。
DeepLearning.ai 的课程Agentic RAG[4],由 LlamaIndex 的创始人 Jerry Liu 讲授,描述了一种使用 LlamaIndex 如何构建 Agentic RAG 的流程。它将文档包含检索等流程包装成为一个 Tool,然后包装到 Agent 中,供路由选择调用。而在路由前,它会尝试分解或重写用户查询,然后交给 Router,大概设计流程如下。
agentic-rag-llama
比如你可能会问:“比较一下 adapt rag 和 self-rag,首先分析各个论文中的方法”,查询重写模块可能会将用户提问分解为:
然后 Router 会分别调用 self rag 的 summary tool 和 adapt rag 的 summary tool,然后由 LLM 进行总结输出。
更为具体代码设计,可访问课程:https://learn.deeplearning.ai/courses/building-agentic-rag-with-llamaindex。
Agentic RAG 不仅仅是一种技术,更是一种思维方式。它代表了从被动检索到主动学习、从静态匹配到动态智能的巨大飞跃。
[1]
Adaptive-RAG:https://arxiv.org/abs/2403.14403
[2]
Corrective RAG:https://arxiv.org/pdf/2401.15884.pdf
[3]
Self-RAG:https://arxiv.org/abs/2310.11511
[4]
Agentic RAG:https://learn.deeplearning.ai/courses/building-agentic-rag-with-llamaindex/lesson/5/building-a-multi-document-agent