大模型 | 智能体RAG的基础知识、什么是Agentic RAG?实施智能体RAG

在2023年,检索增强型生成(RAG)技术占据了主导地位,而在2024年,智能体工作流程正在推动巨大的进步。使用AI智能体为构建更强大的、健壮的、多功能的大型语言模型(LLM)驱动的应用开辟了新的可能性。其中一个可能性是在智能体RAG流程中增强RAG流程中的AI智能体。

在这里插入图片描述

一、智能体RAG的基础知识

1、什么是检索增强型生成(RAG)

检索增强型生成(RAG)是一种构建LLM驱动应用的技术。它利用外部知识源为LLM提供相关上下文,减少幻觉现象。

一个简单的RAG流程包括一个检索组件(通常由一个嵌入模型和一个向量数据库组成)和一个生成组件(一个LLM)。在推理时,用户查询用于在索引文档上运行相似性搜索,检索与查询最相似的文档,并为LLM提供额外的上下文。

典型的RAG应用有两个相当大的局限性

  • 简单的RAG流程只考虑一个外部知识源。然而,一些解决方案可能需要两个外部知识源,一些解决方案可能需要外部工具和API,例如网络搜索。

  • 它们是一次性解决方案,这意味着上下文只检索一次。没有对检索到的上下文的质量进行推理或验证。

2、AI系统中的智能体是什么

随着LLM的流行,AI智能体和多智能体系统的新范式已经出现。AI智能体是具有角色和任务的LLM,它们可以访问内存和外部工具。LLM的推理能力帮助智能体规划所需的步骤并采取行动来完成手头的任务。

因此,AI智能体的核心组件包括:

  • LLM(具有角色和任务)

  • 内存(短期和长期)

  • 规划(例如,反思、自我批评、查询路由等)

  • 工具(例如,计算器、网络搜索等)

在这里插入图片描述

一个流行的框架是ReAct框架。ReAct智能体可以在保持状态(在内存中)的同时处理顺序多部分查询,通过将路由、查询规划和工具使用结合为一个单一实体。

ReAct = 推理 + 行动(使用LLM)

这个过程包括以下步骤:

  • 思考:在接收到用户查询后,智能体推理下一步行动

  • 行动:智能体决定行动并执行它(例如,工具使用)

  • 观察:智能体观察行动的反馈

  • 这个过程一直迭代,直到智能体完成任务并响应用户。

在这里插入图片描述

二、什么是Agentic RAG?

Agentic RAG描述了基于AI智能体实现的RAG。具体来说,它将AI智能体纳入RAG流程中,以协调其组件并执行超出简单信息检索和生成的额外行动,以克服非智能体流程的局限性。

Agentic RAG描述了基于AI智能体实现的RAG。

1、Agentic RAG如何工作?

尽管智能体可以被纳入RAG流程的不同阶段,智能体RAG最常用于检索组件中的智能体。

具体来说,检索组件通过使用具有访问不同检索工具的检索智能体而变得智能体化,例如:

  • 向量搜索引擎(也称为查询引擎),它在向量索引上执行向量搜索(像典型的RAG流程中一样)

  • 网络搜索

  • 计算器

  • 任何用于以编程方式访问软件的API,例如电子邮件或聊天程序

  • 等等。

然后RAG智能体可以在以下示例检索场景中进行推理和行动:

  • 决定是否检索信息

  • 决定使用哪个工具检索相关信息

  • 制定查询本身

  • 评估检索到的上下文,并决定是否需要重新检索。

2、Agentic RAG架构

与顺序的简单RAG架构相比,智能体RAG架构的核心是智能体。智能体RAG架构可以有不同程度的复杂性。在最简单的形式中,单智能体RAG架构是一个简单的路由器。然而,你也可以将多个智能体添加到多智能体RAG架构中。本节讨论了两个基本的RAG架构。

  • 单智能体RAG(路由器)

在其最简单的形式中,智能体RAG是一个路由器。这意味着你至少有两个外部知识源,智能体决定从哪一个检索额外的上下文。然而,外部知识源不必局限于(向量)数据库。你也可以从工具中检索更多信息。例如,你可以进行网络搜索,或者你可以使用API从Slack频道或你的电子邮件账户中检索额外的信息。

  • 多智能体RAG系统

正如你可以猜到的,单智能体系统也有其局限性,因为它仅限于一个智能体进行推理、检索和答案生成。因此,将多个智能体链入多智能体RAG应用是有益的。

例如,你可以有一个主智能体,它协调多个专业检索智能体之间的信息检索。例如,一个智能体可以从专有的内部数据源检索信息。另一个智能体可以专门从你的个人账户(如电子邮件或聊天)检索信息。另一个智能体也可以专门从网络搜索中检索公共信息。

  • 超越检索智能体

上述示例显示了使用不同的检索智能体。然而,你也可以使用智能体用于检索之外的其他目的。智能体在RAG系统中的可能性是多种多样的。

三、Agentic RAG与(普通)RAG

虽然RAG(发送查询、检索信息、生成响应)的基本概念保持不变,但工具使用扩展了它,使其更加灵活和强大。

可以这样想普通的(普通)RAG就像在图书馆(在智能手机出现之前)回答一个具体问题。另一方面,智能体RAG就像手中有一部带有网络浏览器、计算器、电子邮件等的智能手机。

普通RAG智能体RAG访问外部工具否是查询预处理否是多步骤检索否是验证检索到的信息否是

四、实施智能体RAG

如前所述,智能体由多个组件组成。要构建智能体RAG流程,有两种选择:具有函数调用的语言模型或智能体框架。两种实现都能达到相同的结果,只是取决于你想要的控制和灵活性。

具有函数调用的语言模型

语言模型是智能体RAG系统的主要组件。另一个组件是工具,它们使语言模型能够访问外部服务。具有函数调用的语言模型提供了一种构建智能体系统的方法,允许模型与预定义的工具进行交互。语言模型提供商已将此功能添加到他们的客户端中。

2023年6月,OpenAI为gpt-3.5-turbo和gpt-4发布了函数调用。它使这些模型能够可靠地将GPT的能力与外部工具和API连接起来。开发人员迅速开始构建应用程序,将gpt-4插入代码执行器、数据库、计算器等。

Cohere进一步推出了他们的连接器API,为Command-R模型套件添加工具。此外,Anthropic和Google为Claude和Gemini发布了函数调用。通过为这些模型提供外部服务,它可以访问并引用网络资源,执行代码等。

函数调用不仅适用于专有模型。Ollama为流行的开源模型如Llama3.2、nemotron-mini等引入了工具支持。

要构建一个工具,你首先需要定义一个函数。在这个片段中,我们正在编写一个使用Weaviate的混合搜索从数据库检索对象的函数:

def get_search_results(query: str) -> str:
    """Sends a query to Weaviate's Hybrid Search. Parses the response into a {k}:{v} string."""
    
    response = blogs.query.hybrid(query, limit=5)
    
    stringified_response = ""
    for idx, o in enumerate(response.objects):
        stringified_response += f"Search Result: {idx+1}:\n"
        for prop in o.properties:
            stringified_response += f"{prop}:{o.properties[prop]}"
        stringified_response += "\n"
    
    return stringified_response

然后我们将函数通过`tools_schema`传递给语言模型。该模式然后在提示中用于语言模型:

tools_schema=[{
    'type': 'function',
    'function': {
        'name': 'get_search_results',
        'description': 'Get search results for a provided query.',
        'parameters': {
          'type': 'object',
          'properties': {
            'query': {
              'type': 'string',
              'description': 'The search query.',
            },
          },
          'required': ['query'],
        },
    },
}]

由于你直接连接到语言模型API,你需要编写一个循环,该循环在语言模型和工具之间进行路由:

def ollama_generation_with_tools(user_message: str,
                                 tools_schema: List, tool_mapping: Dict,
                                 model_name: str = "llama3.1") -> str:
    messages=[{
        "role": "user",
        "content": user_message
    }]
    response = ollama.chat(
        model=model_name,
        messages=messages,
        tools=tools_schema
    )
    if not response["message"].get("tool_calls"):
        return response["message"]["content"]
    else:
        for tool in response["message"]["tool_calls"]:
            function_to_call = tool_mapping[tool["function"]["name"]]
            print(f"Calling function {function_to_call}...")
            function_response = function_to_call(tool["function"]["arguments"]["query"])
            messages.append({
                "role": "tool",
                "content": function_response,
            })
    
    final_response = ollama.chat(model=model_name, messages=messages)
    return final_response["message"]["content"]

然后你的查询将如下所示:

ollama_generation_with_tools("How is HNSW different from DiskANN?",
                            tools_schema=tools_schema, tool_mapping=tool_mapping)

五、智能体框架

DSPy、LangChain、CrewAI、LlamaIndex和Letta等智能体框架的出现,为使用语言模型构建应用程序提供了便利。这些框架通过将预构建的模板组合在一起,简化了构建智能体RAG系统的过程。

  • DSPy支持ReAct智能体和Avatar优化。Avatar优化描述了使用自动化提示工程来描述每个工具的使用。

  • LangChain为使用工具提供许多服务。LangChain的LCEL和LangGraph框架进一步提供了内置工具。

  • LlamaIndex进一步引入了QueryEngineTool,这是一个用于检索工具的模板集合。

  • CrewAI是开发多智能体系统的领先框架之一。用于工具使用的一个关键概念是智能体之间共享工具。

  • Swarm是由OpenAI构建的多智能体协调框架。Swarm同样专注于智能体之间如何共享工具。

  • Letta将反映和提炼内部世界模型作为函数。这意味着可能使用搜索结果来更新聊天机器人用户的智能体内存,除了回答问题。

https://weaviate.io/blog/what-is-agentic-rag

六、最后分享

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 2024行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方优快云官方认证二维码,免费领取【保证100%免费

### 豆包与文心一言的 RAG 技术类型分析 豆包(Doubao)和文心一言(ERNIE Bot)作为当前主流的大语言模型工具,其背后的技术架构在信息检索与生成方面均有不同程度的 RAG(Retrieval-Augmented Generation)应用。然而,从公开资料和实际应用表现来看,两者在 RAG 技术的实现上存在差异。 豆包在信息检索与生成的流程中更倾向于采用**传统 RAG**架构。其核心在于通过预定义的检索器(如 BM25、DPR 等)从外部知识库中提取相关信息,并结合语言模型进行生成。这种方式在结构上较为固定,适合处理标准化的查询任务,例如事实性问答或文档摘要生成。这种架构的优势在于实现简单、响应速度快,适合大规模部署[^2]。 文心一言则在部分高级功能中引入了**Agentic RAG**的思想。其系统架构中包含了任务分解、多步骤推理、工具调用等机制,使得模型能够根据用户意图动态地构建检索路径,并在多个知识源之间切换。这种架构具备更高的灵活性和适应性,适用于复杂查询、多轮对话以及需要上下文感知的场景[^1]。 在具体实现上,文心一言的 Agentic RAG 模块可能包含以下特征: - **任务规划器**:能够根据用户输入自动生成检索策略,并决定是否需要调用外部数据库或API。 - **多级检索器**:结合关键词检索与语义向量检索,提升信息召回率与相关性。 - **动态生成器**:在生成阶段引入反馈机制,确保生成内容与原始查询保持高度一致,并支持引用标注功能。 豆包虽然在基础层面上仍采用传统 RAG,但其后续版本中也逐步引入了部分 Agentic RAG 的优化策略,如查询改写、内容压缩、答案引用标注等,以提升系统的智能化程度[^1]。 ### 示例:传统 RAGAgentic RAG 的对比代码结构 以下是一个简化版的 RAG 流程代码,分别展示传统 RAGAgentic RAG 的实现方式: #### 传统 RAG 示例 ```python from langchain.retrievers import BM25Retriever from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI # 初始化检索器 retriever = BM25Retriever.from_documents(documents) # 初始化问答链 qa = RetrievalQA.from_chain_type( llm=ChatOpenAI(), chain_type="stuff", retriever=retriever ) # 执行问答 response = qa.run("什么是量子计算?") print(response) ``` #### Agentic RAG 示例 ```python from langchain.agents import initialize_agent, AgentType from langchain.chains import RetrievalQA from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings # 构建向量数据库 vectorstore = FAISS.from_documents(documents, OpenAIEmbeddings()) retriever = vectorstore.as_retriever() # 初始化检索问答链 qa = RetrievalQA.from_chain_type( llm=ChatOpenAI(), chain_type="map_reduce", retriever=retriever ) # 构建智能体 agent = initialize_agent( tools=[qa], llm=ChatOpenAI(), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True ) # 执行智能体驱动的查询 response = agent.run("请解释 RAGAgentic RAG 的区别") print(response) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值