1.1 为什么要有智能体
大语言模型毕竟是一个基于一定算法与机器运行基础的模型,存在一定局限性,比如会有幻觉:出现虚假信息。有时效性限制:数据过时时无法反应最新趋势和信息。可靠性得不到保障:在面对复杂任务时,可能频发错误输出现象,影响信任度。这就使得智能体应运而生。
1.2 智能体简介
智能体三要素:感知环境中的动态条件;采取动作影响环境;运用推理能力理解信息、解决问题、产生推断、决定动作。
智能体包括:
大脑:记忆、思考和决策任务。接受来自感知模块的信息,采取相应的动作。
感知:对外部环境的多模态信息进行感知和处理。
动作:利用并执行工具以影响环境。
1.3 智能体范式
1.4 智能体范式
2.1 环境配置
2.1.1 创建开发机和 conda 环境
在创建开发机界面选择镜像为 Cuda12.2-conda,并选择 GPU 为30% A100。这里前面几节课已经做过介绍,这里不再赘述。
进入开发机后,为了方便使用,我们需要配置一个环境以同时满足 Lagent 和 AgentLego 运行时所需依赖。在开始配置环境前,我们先创建一个用于存放 Agent 相关文件的目录,可以执行如下命令:
输入如下指令配置 conda 环境:
2.1.2 安装 Lagent 和 AgentLego
安装 Lagent 和 AgentLego,可以使用pip安装。这里为了方便使用 Lagent 的 Web Demo 以及 AgentLego 的 WebUI,选择直接从源码进行安装。
执行如下命令进行安装:
2.1.3 涉及到轻量化的部署应用,安装lmdeploy
执行如下命令安装lmdeploy:
2.1.4 准备 Tutorial
由于后续的 Demo 需要用到 tutorial 已经写好的脚本,因此我们需要将 tutorial 通过 git clone 的方法准备好,以备后续使用:
2.2 Lagent:轻量级智能体框架实践
2.2.1. Lagent Web Demo
2.2.1.1 使用 LMDeploy 部署
在 vscode terminal 中执行如下代码使用 LMDeploy 启动一个 api_server。
2.2.1.2 启动并使用 Lagent Web Demo
按照下图指示新建一个 terminal 以启动 Lagent Web Demo。在新建的 terminal 中执行如下指令:
2.2.2. 用 Lagent 自定义工具
Lagent 中关于工具部分的介绍文档位于 https://lagent.readthedocs.io/zh-cn/latest/tutorials/action.html 。使用 Lagent 自定义工具主要分为以下几步:
1、继承 BaseAction 类
2、实现简单工具的 run 方法;或者实现工具包内每个子工具的功能
3、简单工具的 run 方法可选被 tool_api 装饰;工具包内每个子工具的功能都需要被 tool_api 装饰
下面我们将实现一个调用和风天气 API 的工具以完成实时天气查询的功能。
2.2.2.1 创建工具文件
2.2.2.2 获取 API KEY
2.2.2.3 体验自定义工具效果
在两个 terminal 中分别启动 LMDeploy 服务和 Tutorial 已经写好的用于这部分的 Web Demo(注意要关闭之前已经启动的 LMDeploy 和Web Demo 服务):
2.3.1 直接使用 AgentLego
首先下载 demo 文件:
使用 新建一个direct_use.py 以直接使用目标检测工具,代码如下:
2.3.2 作为智能体工具使用
2.3.2.1 修改相关文件
由于 AgentLego 算法库默认使用 InternLM2-Chat-20B 模型,因此我们首先需要修改 /root/agent/agentlego/webui/modules/agents/lagent_agent.py 文件的第 105行位置,将 internlm2-chat-20b 修改为 internlm2-chat-7b,即
2.3.2.2 使用 LMDeploy 部署
使用 LMDeploy 部署
由于 AgentLego 的 WebUI 需要用到 LMDeploy 所启动的 api_server,因此我们首先按照下图指示在 vscode terminal 中执行如下代码使用 LMDeploy 启动一个 api_server。
2.3.2.3 启动 AgentLego WebUI
接下来我们按照下图指示新建一个 terminal 以启动 AgentLego WebUI。在新建的 terminal 中执行如下指令:
根据报错,将所需要的库进行修正。执行如下代码:
在本地进行端口映射,打开本地PowerShell,输入如下代码和开发机SSH密码即可
2.3.2.4 使用 AgentLego WebUI
2.3.3 用 AgentLego 自定义工具
我们将基于 AgentLego 构建自己的自定义工具。AgentLego 在这方面提供了较为详尽的文档,文档地址为 https://agentlego.readthedocs.io/zh-cn/latest/modules/tool.html 。自定义工具主要分为以下几步:
1、继承 BaseTool 类
2、修改 default_desc 属性(工具功能描述)
3、如有需要,重载 setup 方法(重型模块延迟加载)
4、重载 apply 方法(工具功能实现)
其中第一二四步是必须的步骤。下面我们将实现一个调用 MagicMaker 的 API 以实现图像生成的工具。
MagicMaker 是汇聚了优秀 AI 算法成果的免费 AI 视觉素材生成与创作平台。主要提供图像生成、图像编辑和视频生成三大核心功能,全面满足用户在各种应用场景下的视觉素材创作需求。体验更多功能可以访问 https://magicmaker.openxlab.org.cn/home 。
其中第一二四步是必须的步骤。下面我们将实现一个调用 MagicMaker 的 API 以实现图像生成的工具。
2.3.3.1 创建工具文件
首先通过 (大小写敏感)的方法新建工具文件。该文件的内容如下:
2.3.3.2 注册新工具
接下来修改 /root/agent/agentlego/agentlego/tools/init.py 文件,将我们的工具注册在工具列表中。如下所示,我们将 MagicMakerImageGeneration 通过 from .magicmaker_image_generation import MagicMakerImageGeneration 导入到了文件中,并且将其加入了 all 列表中。修改后的代码如下,直接全部复制黏贴进去保存即可。
3.3.3.3 体验自定义工具效果
与2.3.2.2,2.3.2.3,2.3.2.4类似,我们在两个 terminal 中分别启动 LMDeploy 服务和 AgentLego 的 WebUI 以体验我们自定义的工具的效果。
在本地执行如下操作以进行端口映射:
2.4.1. OpenAI Function Calling
2.4.1.1介绍
其中,我们将对话数据和工具描述传递给 API 模型。在得到 API 模型的输出后,我们在本地根据输出调用函数,最终得到结果。
2.4.1.2 数据格式
本节介绍 OpenAI Function Calling 所规定的数据格式,以便于使用 XTuner 进行微调时理解数据的结构。
1、对话部分
如上,这是一个简单的对话数据,包含 role 和 content 两个字段,分别表示输入角色和输入内容。
2、工具描述部分
如上所示是 OpenAI Function Calling 的工具描述部分。各字段描述如下:
2.4.2. 基于 XTuner 的 Agent 工具能力微调
emmmmm,这节待官方更新,后续有了再补充。
3.1 基础作业
完成 Lagent Web Demo 使用,并在作业中上传截图。文档可见 Lagent Web Demo
本部分作业及截图见2.1以及2.2.1节。
完成 AgentLego 直接使用部分,并在作业中上传截图。文档可见 直接使用 AgentLego。
本部分作业及截图见2.1以及2.3.1节。
3.2 进阶作业
完成 AgentLego WebUI 使用,并在作业中上传截图。
本部分作业及截图见2.1以及2.3.2节。
使用 Lagent 或 AgentLego 实现自定义工具并完成调用,并在作业中上传截图。
本部分作业及截图见2.1以及2.2.2;2.3.3节。
3.3 大作业选题(待后续更新)
3.3.1 算法方向(待后续更新)
在 Lagent 或 AgentLego 中实现 RAG 工具,实现智能体与知识库的交互。
基于 Lagent 或 AgentLego 实现工具的多轮调用,完成复杂任务。如:智能体调用翻译工具,再调用搜索工具,最后调用生成工具,完成一个完整的任务。
…