当下,纯强化学习(RL)的影响仍在持续,视觉语言模型(VLM)的发展更是突飞猛进。我所关注的众多领域,无一例外地正朝着先前预测的方向稳步前行。
当我们让智能体开展工作时,常常需要为其提供各类数据作为参照,如此才能让智能体把任务出色完成。
打个比方,就好比你要组装一台婴儿车,倘若毫无头绪,这时给你一份说明书,你只需依照步骤一步步操作,就能顺利组装成功。在多智能体系统(MAS)里也是同样的道理,得让智能体的行动决策能够遵循我们的指引。
今天,我们要将 langchain 的知识库接入工作流,如此一来,后续智能体在进行决策行动时便都能加以运用。这是一个完整的从 0 到 1 的动手实践内容,前后紧密相连,每一部分都不可或缺!整个系列的具体安排如下(可直接点击跳转):
day1:动手开启 0 - 1 学 LangGraph 工作流,探究节点和边的关系。
day2:让知识库为 Agent 提供支持,将 RAG 接入 LangGraph,实现无缝连接。
day3:构建意图分流路由,确保人尽其责,让智能体各自承担合适的任务。
day4:为智能体添加长期和短期记忆,让该记住的信息都能被留存。
day5:学习如何管理短期记忆,使智能体记住最新且重要的事项。
day6:掌握管理长期记忆的方法,让智能体长久记住用户特性,诸如姓名、生日等信息。
至于是否增加额外内容,我会根据大家的反馈情况来决定!人的专注力通常只有 10 分钟,话不多说,让我们赶紧动手实践吧!
智能体接入要素与用途
智能体可接入的内容丰富多样,其接入范畴很大程度上取决于所选用的技术栈。例如,当下开发检索增强生成(RAG)时,langchain 是最为热门的框架,其次则是 llama - index。
langchain 所支持的生态极为广泛,本次我就以它为例进行演示。
若你也在使用 langchain 开发 RAG,那可实现的功能会更多。智能体支持接入的内容包括(但不限于)以下几类:
SystemMessage
专门用于传递指导性对话内容,以此引导对话流程。
HumanMessage
负责记录用户输入内容,保证对话中的用户反馈得以妥善处理。
AIMessage
用于展示大语言模型(LLM)的响应内容,是智能体与用户互动的直接呈现。
Multimodality
提供多模式内容的额外信息,有效增强对话的丰富性与多样性。
交互消息接入
工具接入
以代码块形式呈现,赋予智能体在现实世界中执行操作的能力,比如调用外部 API、执行代码等。
状态管理器接入
Reducer 函数用于精准控制状态更新,既能保留聊天历史,又能避免状态被覆盖。
对话模型接入
为智能体提供处理和生成对话内容的核心能力。
大家不妨留言分享一下自己在做 RAG 时所使用的框架,或者给大家推荐好用的框架。
接下来,我们将深入介绍具体的接入方式,并一步步深入代码,探究如何实现这些接入操作。
接入方式详解
接入交互消息
在 langchain 中,消息属于结构化对象,用于表示 LangGraph 里不同类型的对话交流,涵盖用户消息、AI 响应以及系统级消息等。每种消息类型在管理和组织应用程序内的聊天流时都具备特定用途。
其中,最为常用的四种消息类型为:SystemMessage、HumanMessage、AIMessage 和 Multimodality 。关于这些消息类型,大家可以在相关官方文档或教程中全面学习。
接入 tools / 工具
智能体能够生成一行行函数代码作为工具,用于查询数据库或者借助函数查询最新的联网知识,可将其理解为智能体在现实世界执行操作的 “手脚”。
此前,有相关基础教程可供大家深入学习函数调用相关知识,例如以慢病 MAS 为例,对 model 的函数调用能力进行微调。
工具接入也有相应的操作步骤,具体代码
接入状态管理器
在常规的智能体工作流里,状态管理至关重要。默认情况下,处于上游的旧节点会被覆盖,但这并非绝对,有时节点需要被保留下来。
比如智能体的长期记忆,若已获取某个人物的背景信息,且该信息是后续智能体决策的重要依据,我们就不希望它被覆盖,而是希望能够留存。
本次我们借助 LangGraph 实现有选择性地记住或延续历史图形节点,此时就需要接入状态管理器,具体实现代码。
环境准备
day2 的内容相对简单。所需环境如下:
操作系统
win11
Python 版本
3.10
环境管理
conda、jupyter
大家可以自行按照以下步骤搭建环境:
创建 conda 环境
打开 miniconda 窗口,输入指令conda create -n agent python = 3.10,创建名为 “agent” 的环境,并指定 Python 版本为 3.10。
进入 conda 环境
执行conda activate agent,进入该环境。养成一个项目对应一个环境的良好习惯,进入后所有操作都仅在该环境内进行。当看到前面出现括号圈起来的 “agent”,即表明激活成功。
进入实践代码路径
通过cd指令进入存放实践代码的目录,例如cd G:\LangGraph\day2,此目录下包含代码和依赖。
安装依赖
自行准备好依赖文件,执行conda install --file requirements.txt即可完成安装。
进入 jupyter 实操
输入jupyter notebook指令,系统会自动进入并跳转到浏览器。双击 day2 文件,便可成功开启实操,接下来只需一条条执行代码,大家在过程中若有疑问,可查阅相关资料或在交流区提问。
代码实操与细节探讨
今天的内容属于基础部分,大家务必认真理解,否则后续深入学习时可能会遇到困难。
若有不理解之处,可以查阅资料或者在相关技术论坛寻求帮助。前面我们介绍了如何接入消息、工具以及状态管理器,接下来会展示具体应用这些知识的代码示例,
比如接入工具 tools,我们将今天所学的所有知识整合应用,即接入模型、tools、消息等,具体代码如下(可在实操时根据实际情况进行调整):
接入完成后,我们就可以利用这些构建工作流:
这便是最经典的用法,基于此,日后大家可以进行无数种组合,从而指引智能体高效完成任务。
领取专属 10元无门槛券
私享最新 技术干货