Lagent 自定义你的 Agent 智能体

Lagent 介绍

Lagent 是一个轻量级开源智能体框架,旨在让用户可以高效地构建基于大语言模型的智能体。同时它也提供了一些典型工具以增强大语言模型的能力。

Lagent 目前已经支持了包括 AutoGPT、ReAct 等在内的多个经典智能体范式,也支持了如下工具:

  • Arxiv 搜索
  • Bing 地图
  • Google 学术搜索
  • Google 搜索
  • 交互式 IPython 解释器
  • IPython 解释器
  • PPT
  • Python 解释器

环境配置

开发机选择 30% A100(如果有性能更好的选择,请选择高一些的,我自己选择的是50% A100),镜像选择为 Cuda12.2-conda。

进入开发机之后执行如下代码

# ---------为 Lagent 配置一个可用的环境--------------
# 创建环境
conda create -n agent_camp3 python=3.10 -y
# 激活环境
conda activate agent_camp3
# 安装 torch
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖包
pip install termcolor==2.4.0
pip install lmdeploy==0.5.2




# --------------通过源码安装的方式安装 lagent-----------
# 创建目录以存放代码
mkdir -p /root/agent_camp3
cd /root/agent_camp3
git clone https://github.com/InternLM/lagent.git
cd lagent && git checkout 81e7ace && pip install -e . && cd ..

Lagent Web Demo 使用

我们先使用 LMDeploy 部署 InternLM2.5-7B-Chat,并启动一个 API Server。

conda activate agent_camp3
lmdeploy serve api_server /share/new_models/Shanghai_AI_Laboratory/internlm2_5-7b-chat --model-name internlm2_5-7b-chat

 

在另一个窗口中启动 Lagent 的 Web Demo。

cd /root/agent_camp3/lagent
conda activate agent_camp3
streamlit run examples/internlm2_agent_web_demo.py

两个 server 都完全启动(如下图所示)后,我们在 本地 的 PowerShell 中输入如下指令来进行端口映射:

ssh -CNg -L 8501:127.0.0.1:8501 -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p <你的 SSH 端口号>

端口映射状态如下

浏览器中输入localhost:8051

过程中遇到如下错误 ModuleNotFoundError: No module named 'griffe.enumerations'

需要执行以下命令更新griffe

conda activate agent_camp3

# 卸载当前环境下的griffe
pip uninstall griffe

# 安装版本号为0.48.0的griffe
pip install griffe==0.48.0

在本地浏览器中打开 localhost:8501,并修改模型名称一栏为 internlm2_5-7b-chat,修改模型 ip一栏为127.0.0.1:23333。然后,我们在插件选择一栏选择 ArxivSearch,并输入指令“帮我搜索一下 MindSearch 论文”。 

基于 Lagent 自定义智能体

Lagent 中关于工具部分的介绍文档位于 https://lagent.readthedocs.io/zh-cn/latest/tutorials/action.html 。

使用 Lagent 自定义工具主要分为以下几步:

  1. 继承 BaseAction 类
  2. 实现简单工具的 run 方法;或者实现工具包内每个子工具的功能
  3. 简单工具的 run 方法可选被 tool_api 装饰;工具包内每个子工具的功能都需要被 tool_api 装饰

下面我们将实现一个调用 MagicMaker API 以完成文生图的功能。

我们先来创建工具文件:

cd /root/agent_camp3/lagent
touch lagent/actions/magicmaker.py

们将下面的代码复制进入 /root/agent_camp3/lagent/lagent/actions/magicmaker.py

import json
import requests

from lagent.actions.base_action import BaseAction, tool_api
from lagent.actions.parser import BaseParser, JsonParser
from lagent.schema import ActionReturn, ActionStatusCode


class MagicMaker(BaseAction):
    styles_option = [
        'dongman',  # 动漫
        'guofeng',  # 国风
        'xieshi',   # 写实
        'youhua',   # 油画
        'manghe',   # 盲盒
    ]
    aspect_ratio_options = [
        '16:9', '4:3', '3:2', '1:1',
        '2:3', '3:4', '9:16'
    ]

    def __init__(self,
                 style='guofeng',
                 aspect_ratio='4:3'):
        super().__init__()
        if style in self.styles_option:
            self.style = style
        else:
            raise ValueError(f'The style must be one of {self.styles_option}')
        
        if aspect_ratio in self.aspect_ratio_options:
            self.aspect_ratio = aspect_ratio
        else:
            raise ValueError(f'The aspect ratio must be one of {aspect_ratio}')
    
    @tool_api
    def generate_image(self, keywords: str) -> dict:
        """Run magicmaker and get the generated image according to the keywords.

        Args:
            keywords (:class:`str`): the keywords to generate image

        Returns:
            :class:`dict`: the generated image
                * image (str): path to the generated image
        """
        try:
            response = requests.post(
                url='https://magicmaker.openxlab.org.cn/gw/edit-anything/api/v1/bff/sd/generate',
                data=json.dumps({
                    "official": True,
                    "prompt": keywords,
                    "style": self.style,
                    "poseT": False,
                    "aspectRatio": self.aspect_ratio
                }),
                headers={'content-type': 'application/json'}
            )
        except Exception as exc:
            return ActionReturn(
                errmsg=f'MagicMaker exception: {exc}',
                state=ActionStatusCode.HTTP_ERROR)
        image_url = response.json()['data']['imgUrl']
        return {'image': image_url}

最后,我们修改 /root/agent_camp3/lagent/examples/internlm2_agent_web_demo.py 来适配我们的自定义工具。

  1. 在 from lagent.actions import ActionExecutor, ArxivSearch, IPythonInterpreter 的下一行添加 from lagent.actions.magicmaker import MagicMaker
  2. 在第27行添加 MagicMaker()

最后,同时启动两个工具测试效果如下:

“请帮我生成一副山水画”

所生成的山水画如下:

“帮我搜索一下 MindSearch 论文”

03-10
<think>好的,用户想查询关于Lagent的IT技术信息。我需要先回顾一下提供的引用内容,看看有哪些相关信息。 首先,引用[2]提到Lagent允许用户自定义工具,需要继承BaseAction类并实现run方法,或者使用tool_api装饰器。这说明Lagent是一个智能体框架,支持工具扩展。引用[3]指出Lagent支持多种工具,如Arxiv搜索、Google搜索、IPython解释器等,还提到它支持AutoGPT和ReAct等智能体范式。引用[4]和[5]则涉及Lagent的Web Demo部署和使用,特别是通过LMDeploy部署,并展示如何配置模型IP和选择插件如ArxivSearch。 接下来,我需要整理这些信息,确保覆盖Lagent的核心功能、工具支持、应用场景以及部署方法。要使用中文回答,并正确应用格式规则,如行内数学公式用$...$,独立公式用$$...$$,但当前内容中没有涉及数学表达式,所以可能不需要。同时,生成相关问题时要考虑用户可能的进一步疑问,比如技术原理、应用案例或与其他框架的比较。 需要检查引用标注是否正确,每个引用后的标识是否对应正确的来源。例如,引用[2]对应Lagent自定义工具的步骤,引用[3]关于支持的工具列表。确保回答结构清晰,分点说明,并自然添加引用标识。 最后,生成的相关问题应围绕用户可能感兴趣的方向,如技术细节、应用场景、部署教程等,确保问题具有针对性和扩展性。</think>关于Lagent智能体框架的IT技术信息整理如下: ### Lagent技术概述 Lagent是面向大语言模型的轻量级开源智能体框架,核心功能是为大模型提供工具调用能力,实现智能体应用开发[^2][^4]。 ### 核心特性 1. **多范式支持**: - 已集成AutoGPT、ReAct等经典智能体范式[^3] - 支持链式思考(Chain-of-Thought)推理模式[^4] 2. **工具生态**: ```markdown - 内置工具包括: * Arxiv学术搜索 * Google/百度搜索引擎 * IPython代码解释器 * PPT生成工具 * 地图服务接口[^3][^5] - 支持自定义工具扩展,可通过继承BaseAction类实现 ``` 3. **系统架构**: $$架构层级 = 语言模型 + 智能体核心 + 工具集$$ 采用模块化设计,通过API接口实现各组件解耦 ### 应用场景 1. 学术研究:通过ArxivSearch插件实现论文检索 2. 数据分析:集成IPython解释器支持交互式数据处理[^3] 3. 自动化办公:内置PPT生成工具 ### 部署方式 1. **Web Demo部署**: ```bash # 通过LMDeploy部署服务 python -m lmdeploy.serve.turbomind.deploy InternLM2-chat-7b ./model ``` 2. 本地访问地址:`http://localhost:7860`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值