PaperAgent 2024年11月25日
再见RAG,你好Agentic RAG!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

2024年,智能体工作流程正推动大型语言模型(LLM)应用的巨大进步。智能体RAG(检索增强型生成)通过将AI智能体融入RAG流程,克服了传统RAG的局限性。它赋予LLM访问外部知识源和工具的能力,如向量搜索引擎、网络搜索、计算器等,并能自主推理、选择工具、评估信息,从而构建更强大、健壮、多功能的LLM应用。Agentic RAG架构可以是单智能体或多智能体,通过智能体的协调和工具使用,实现更复杂的检索和信息处理。构建Agentic RAG可以使用函数调用的语言模型或智能体框架,如LangChain、LlamaIndex等,为LLM应用带来新的可能性。

🤔 **检索增强型生成(RAG)** 是一种利用外部知识源为LLM提供上下文的技术,它通过检索组件和生成组件协同工作,减少LLM的幻觉现象,但传统RAG存在局限性,例如只能处理单一知识源且无法验证信息质量。

🤖 **AI智能体** 是具有角色和任务的LLM,它可以访问内存和外部工具,通过推理和规划来完成任务,ReAct框架是其中一种流行的实现方式,它将推理和行动结合起来,迭代执行直到完成任务。

💡 **Agentic RAG** 将AI智能体引入RAG流程,使检索组件能够利用多种工具,如向量搜索引擎、网络搜索和API等,智能体可以自主决策检索策略、选择工具并评估信息,从而构建更强大的LLM应用。

⚙️ **构建Agentic RAG** 可以通过两种方式实现:使用支持函数调用的语言模型或智能体框架。前者允许LLM与预定义工具交互,后者则提供构建智能体的便捷工具和模板。

📚 **Agentic RAG的应用场景** 非常广泛,例如构建更强大的聊天机器人、知识问答系统、自动化任务执行等,它为LLM应用的未来发展提供了新的方向。

2024-11-25 10:50 湖北

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

智能体RAG的基础知识

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

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

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

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

AI系统中的智能体是什么

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

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

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

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

这个过程包括以下步骤:

什么是Agentic RAG?

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

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

Agentic RAG如何工作?

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

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

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

Agentic RAG架构

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

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

正如你可以猜到的,单智能体系统也有其局限性,因为它仅限于一个智能体进行推理、检索和答案生成。因此,将多个智能体链入多智能体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系统的过程。

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

推荐阅读


欢迎关注我的公众号“PaperAgent”,每天一篇大模型(LLM)文章来锻炼我们的思维,简单的例子,不简单的方法,提升自己。

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

智能体RAG 大型语言模型 AI智能体 检索增强生成 LLM应用
相关文章