ChatGPT、Midjourney等生成式人工智能(GenAI)在文本生成、文本到图像生成等任务中表现出令人印象深刻的性能。然而,生成模型也不能避免其固有的局限性,包括产生幻觉的倾向,在数学能力弱,而且缺乏可解释性。因此,提高他们能力的一个可行办法是让他们能够与外部世界互动,以不同的形式和方式获取知识,从而提高所生成内容的事实性和合理性。
检索增强生成(Retrieval-Augmented Generation, RAG)技术研究旨在提供更有依据、更依赖事实的信息来帮助解决生成式AI的幻觉倾向、专业力弱等固有缺陷。RAG最新科研综述可以参考:面向AI内容生成的检索增强生成(RAG)技术全面综述:背景、基础、进阶、应用、展望。
检索增强生成智能体(Agentic RAG)的核心是将智能和自主性注入到RAG框架中。这就像是给一个普通的RAG系统进行了重大升级,将其转变为一个能够自主决策并采取行动以实现特定目标的自主智能体。本文帮助理解RAG智能体方法并了解它如何彻底改变我们处理信息的方式。
作者:张长旺,图源:旺知识
作为对照,您可以参考我们以前的相关文章来了解经典RAG系统的特性和特点:
高级检索增强生成技术(RAG)全面指南:原理、分块、编码、索引、微调、Agent、展望
检索增强生成技术(RAG)深度优化指南:原理、挑战、措施、展望
1 - RAG智能体特性特点
上下文至上:传统RAG实现的最大局限之一是它们无法真正理解并考虑更广泛的对话上下文。而RAG智能体则被设计成具有上下文感知能力。它们可以把握对话的微妙之处,考虑历史,并相应地调整行为。这意味着更连贯和相关的回应,就像智能体真正参与了一场自然对话一样。
智能检索策略:RAG系统过去依赖静态规则进行检索,RAG智能体比规则那聪明多了。它们采用智能检索策略,动态评估用户的查询、可用工具(数据来源)和上下文线索,以确定最合适的检索行动。就像有一个知道在哪里找到你需要的信息的私人助手一样。
多智能体协作:复杂的查询通常涉及多个文档或数据源,在RAG智能体的世界里,我们有多智能体协作的能力。想象一下有多个专门的智能体,每个智能体都是自己领域或数据源的专家,共同合作并综合他们的发现,为用户提供全面的回应。就像有一组专家一起解决你最棘手的问题一样。
智能推理:RAG智能体不仅擅长检索信息;它们还配备了远远超越简单检索和生成的推理能力。这些智能体可以对检索到的数据进行评估、校正和质量检查,确保用户收到的输出是准确可靠的。不再担心获取到可疑信息了!
生成后验证:RAG智能体可以进行生成后的检查。它们可以验证生成内容的真实性,甚至运行多次生成并为用户选择最佳结果。
适应性与学习:RAG智能体架构可以设计成包含学习机制,使智能体能够随着时间的推移适应和改进其性能。这就像有一个系统,你使用得越多,它就越聪明、越高效!
2 - RAG智能体参考架构
好了,现在我们已经对RAG智能体的基本原理有了很好的理解,让我们深入探讨一下使整个系统运行的参考架构。
在这个架构的核心,我们有RAG智能体——智能指挥官,负责接收用户查询并决定适当的行动方针。把它想象成交响乐团的指挥,协调所有不同的乐器(工具)以创造和谐的表演。
现在,这个智能体并不孤单。它配备了一套工具,每个工具都与特定的一组文档或数据源相关联。这些工具就像是专门的智能体或函数,可以从各自的数据源中检索、处理和生成信息。
例如,假设你有工具1,负责访问和处理财务报表,以及工具2,处理客户数据。RAG智能体可以根据你的查询动态选择和组合这些工具,使其能够从多个来源合成信息,为你提供全面的回应。
检索的信息来自于自定义文档和数据源。这些信息可以是结构化的或非结构化的,包括数据库、知识库、文本文档和多媒体内容等。它们是工具处理的原材料。
现在,假设你向智能体提出了一个涉及多个领域或数据源的复杂问题:RAG智能体规划整个过程,确定使用哪些工具,从相关的数据源检索相关信息,并生成针对你查询的最终回应。
在整个过程中,智能体利用智能推理、上下文感知和生成后验证技术,确保你收到的输出不仅准确,而且符合你的需求。
当然,这只是参考架构的简化表示。在现实世界中,RAG智能体的实现可能涉及其他组件,例如语言模型、知识库和其他支持系统,具体取决于特定的用例和需求。
3 - RAG智能体开发实例
我们这里实现一个RAG智能体的实例(arXiv文章检索智能体)来具体说明RAG智能体的开发实现。
3.1 开发架构
这里RAG智能体的开发架构是为每份文档设置一个文档智能体,每个文档智能体都能在自己的文档中进行问题解答和总结。然后建立一个顶级智能体(元智能体),管理所有低级文档智能体。
3.2 开发技术栈
Langchain: 更具体地说是 LCEL:开发 LLM 应用程序的协调框架
OpenAI: 提供大语言模型(LLM)服务
FAISS-cpu: 向量存储
3.3 数据源
在这里,我们将利用ArxivLoader来检索发表在arXiv上的文章的元数据。
3.4 代码实现
安装所需的依赖项:
!pip install -qU langchain langchain_openai langgraph arxiv duckduckgo-search
!pip install -qU faiss-cpu pymupdf
设置环境变量:
from google.colab import userdata
from uuid import uuid4
import os
#
os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = f"AIE1 - LangGraph - {uuid4().hex[0:8]}"
os.environ["LANGCHAIN_API_KEY"] = userdata.get('LANGCHAIN_API_KEY')