[InternLM训练营第二期笔记]6.Lagent AgentLego 智能体应用搭建


该系列是上海AI Lab举行的书生 浦语大模型训练营的相关笔记部分。
该笔记是第六节课,学习大语言模型智能体的基本概念,以及Lagent的使用。


0. 智能体

在大型语言模型(LLM)的上下文中,智能体(agent)通常指的是一个能够与用户或其他智能体交互并执行任务的程序或系统。智能体可以是简单的聊天机器人,也可以是复杂的自动化系统,它们能够理解自然语言输入,并据此做出决策或采取行动。
智能体在LLM中的应用通常包括:

  1. 对话系统:智能体通过与用户的对话来提供信息、解答问题或执行特定的任务,如客户服务聊天机器人。
  2. 虚拟助手:智能体作为个人助理,帮助用户管理日程、设置提醒、搜索信息等。
  3. 推荐系统:智能体根据用户的偏好和历史行为提供个性化推荐,如电影、音乐或商品推荐。
  4. 自动化工具:智能体在特定领域内执行自动化任务,如数据分析、报告生成或软件测试。
  5. 决策支持系统:智能体分析大量数据,提供见解和建议,帮助人类做出更明智的决策。
    在构建智能体时,LLM可以作为核心组件,提供对自然语言的理解和处理能力。智能体通常还包括其他模块,如决策逻辑、记忆系统、学习算法和执行机制,以实现特定的功能和应用。智能体的设计和开发是一个跨学科领域,涉及自然语言处理、机器学习、软件工程和用户体验设计等多个方面。

本节课要学习的Lagent是一个轻量化的搭建智能体的工具,其支持arxiv检索、ppt、python解释器等各种工具。而AgentLego 是一个提供了多种开源工具 API 的多模态工具包,旨在像是乐高积木一样,让用户可以快速简便地拓展自定义工具,从而组装出自己的智能体。二者的关系如下图:可以看出,AgentLego负责具体的功能支持,而Lagent是将工具支持与调用工具、输出封装在了一起。

在这里插入图片描述

1. 实战:Lagent Web Demo(基础作业)

首先创建开发机,GPU选择30% * A100, 镜像选择CUDA12.2

然后我们先创建本课程的目录,并安装环境:

mkdir -p /root/agent

studio-conda -t agent -o pytorch-2.1.2

conda activate agent

然后,我们需要安装Lagent和AgentLego的代码并安装lmdeploy以方便后续的server部署:

cd /root/agent

git clone https://gitee.com/internlm/lagent.git
cd lagent && git checkout 581d9fb && pip install -e . && cd ..
git clone https://gitee.com/internlm/agentlego.git
cd agentlego && git checkout 7769e0d && pip install -e . && cd ..

pip install lmdeploy==0.3.0

此外,我们需要把tutorial clone下来,因为要用到里面的代码:

git clone -b camp2 https://gitee.com/internlm/Tutorial.git

在上一节课,我们已经学习了LMDeploy的一些用法,在此我们需要开启API接口的api server:

conda activate agent
lmdeploy serve api_server /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b \
                            --server-name 127.0.0.1 \
                            --model-name internlm2-chat-7b \
                            --cache-max-entry-count 0.1

新建Terminal,启动Lagent Web Demo:

conda activate agent
cd /root/agent/lagent/examples
streamlit run internlm2_agent_web_demo.py --server.address 127.0.0.1 --server.port 7860

当这两个都准备好后(以下界面),然后打开Windows powershell,ssh连接:
在这里插入图片描述
在这里插入图片描述

ssh -CNg -L 7860:127.0.0.1:7860 -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 45459

随后访问http://localhost:7860/, 然后将模型IP选择为127.0.0.1:23333以便和lmdeploy开启的apiserver联动,然后插件选择ArxivSearch:

在这里插入图片描述
输入问题请帮我搜索 InternLM2 Technical Report, 结果如下:

在这里插入图片描述
可以看到搜索结果是正确的。

2. 实战:AgentLego Demo(基础作业)

首先下载demo文件:

cd /root/agent
wget http://download.openmmlab.com/agentlego/road.jpg

在本例子中,我们采用目标检测工具,具体是MMDetection。我们进行安装:

conda activate agent
pip install openmim==0.3.9
mim install mmdet==3.3.0

然后编写代码:

vim /root/agent/direct_use.py

插入以下代码:

import re

import cv2
from agentlego.apis import load_tool

# load tool
tool = load_tool('ObjectDetection', device='cuda')  # 加载目标检测工具

# apply tool
visualization = tool('/root/agent/road.jpg')  # 推理
print(visualization)

# visualize
image = cv2.imread('/root/agent/road.jpg')

preds = visualization.split('\n')
pattern = r'(\w+) \((\d+), (\d+), (\d+), (\d+)\), score (\d+)'

for pred in preds:  # 绘制边界框
    name, x1, y1, x2, y2, score = re.match(pattern, pred).groups()
    x1, y1, x2, y2, score = int(x1), int(y1), int(x2), int(y2), int(score)
    cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 1)
    cv2.putText(image, f'{name} {score}', (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 1)

cv2.imwrite('/root/agent/road_detection_direct.jpg', image)

运行:

python /root/agent/direct_use.py

推理结果:

在这里插入图片描述
在这里插入图片描述
可以看到检测效果还是不错的。

3. AgentLego WebUI (进阶作业)

上面我们只是尝试了单独运行AgentLego中的目标检测工具的结果,那么如何将其和LLM结合起来呢?

首先,我们需要配置一下/root/agent/agentlego/webui/modules/agents/lagent_agent.py文件,将LLM改成7B(原本代码中是20B):

vim /root/agent/agentlego/webui/modules/agents/lagent_agent.py

改为:
在这里插入图片描述

之后,跟第一项作业一样,我们需要启动LMDeploy的api server:

lmdeploy serve api_server /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b \
                            --server-name 127.0.0.1 \
                            --model-name internlm2-chat-7b \
                            --cache-max-entry-count 0.1

然后,新建terminal,启动 AgentLego WebUI:

conda activate agent
cd /root/agent/agentlego/webui
python one_click.py

等待两个完全启动后,在本地的PowerShell运行:

ssh -CNg -L 7860:127.0.0.1:7860 -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 45459

然后打开 http://localhost:7860

按如图所示配置,和LMDeploy联动:

在这里插入图片描述
然后在tools页面指定Object Detection工具:

在这里插入图片描述
回到chat,底部的工具选择Object Detection,然后上传一张图片,提示它检测图中的目标,效果如下:

在这里插入图片描述
还是非常不错的~。

4. AgentLego 实现自定义工具(进阶作业)

AgentLego的文档地址:https://agentlego.readthedocs.io/zh-cn/latest/modules/tool.html.

要实现自定义工具主要有以下几个步骤(第三步是可选的):

  1. 继承 BaseTool 类
  2. 修改 default_desc 属性(工具功能描述)
  3. 如有需要,重载 setup 方法(重型模块延迟加载)
  4. 重载 apply 方法(工具功能实现)

下面我们实现一个调用 MagicMaker 的 API 以实现图像生成的工具。

新建我们的工具代码:

vim /root/agent/agentlego/agentlego/tools/magicmaker_image_generation.py

插入:

import json
import requests

import numpy as np

from agentlego.types import Annotated, ImageIO, Info
from agentlego.utils import require
from .base import BaseTool


class MagicMakerImageGeneration(BaseTool):  # 第一步 继承BaseTool类

    default_desc = ('This tool can call the api of magicmaker to '
                    'generate an image according to the given keywords.')  # 第二部 修改属性

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

    @require('opencv-python')
    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}')

    def apply(self,
              keywords: Annotated[str,
                                  Info('A series of Chinese keywords separated by comma.')]
        ) -> ImageIO:  # 第四步 重载apply方法
        import cv2
        # 调用OpenXLab中的MagicMaker生成图片
        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'}
        )
        image_url = response.json()['data']['imgUrl']
        image_response = requests.get(image_url)
        image = cv2.cvtColor(cv2.imdecode(np.frombuffer(image_response.content, np.uint8), cv2.IMREAD_COLOR),cv2.COLOR_BGR2RGB)
        return ImageIO(image)

下一步,和MMDetection中我们自定义model一样,需要把自定义的模块注册一下。

/root/agent/agentlego/agentlego/tools/__init__.py中,添加刚刚定义的MagicMakerImageGeneration类:

在这里插入图片描述

跟上面一样,我们在两个terminal中分别启动LMDeploy的api server和AgentLego的Web Demo:

lmdeploy serve api_server /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b \
                            --server-name 127.0.0.1 \
                            --model-name internlm2-chat-7b \
                            --cache-max-entry-count 0.1


cd /root/agent/agentlego/webui
python one_click.py

本地的PowerShell:

ssh -CNg -L 7860:127.0.0.1:7860 -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 45459

然后如图配置:

在这里插入图片描述
在这里插入图片描述
输入prompt:请生成一幅印象派风格的画,效果如下:

在这里插入图片描述
呃,效果还可以~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/572820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何解决高光谱数据读取、数据预处理、高光谱数据机器学习等技术难题......

深入探讨了高光谱遥感数据处理技术,涵盖了基本概念、成像原理、数据处理和分析方法,以及运用机器学习和深度学习模型提取和应用高光谱信息的技术。此外,通过Python实践练习,课程帮助学员巩固所学知识,使其得以深入理解…

Meta-Llama-3-8B-Instruct本地推理

Meta-Llama-3-8B-Instruct 本地推理 基础环境信息(wsl2安装Ubuntu22.04 miniconda) 使用miniconda搭建环境 (base) :~$ conda create --name pytorch212 python3.10 Retrieving notices: ...working... done Channels:- defaults Platform: linux-64 C…

EasyRecovery数据恢复软件2025破解版安装包下载

EasyRecovery数据恢复软件的主要功能及使用教程。coco玛奇朵可以提供一个概要和简化的教程,以便你了解其基本内容和操作步骤。 EasyRecovery绿色破解下载网盘链接: https://pan.baidu.com/s/1_6NmcOh_Jmc-DGc4TJD-Mg?pwddq4w 提取码: dq4w 复制这段内容后打开百度…

ABAP 第三代增强(BADI)--BADI旧方法

文章目录 第三代增强(BADI)--BADI旧方法需求分析确定BADI使用SE18查看BADIBADI的创建实施逻辑代码编写测试注意事项 第三代增强(BADI)–BADI旧方法 第三代增强BADI:全称是(Business Add-Ins) …

[卷积神经网络]YoloV9

一、概述 代码路径为: YoloV9https://github.com/WongKinYiu/yolov9 YoloV9的作者在论文中指出:现在的深度学习方法大多都在寻找一个合适的目标函数,但实际上输入数据在进行特征提取和空间变换的时候会丢失大量信息。针对这个问题&#xff…

MySQL数据类型:字符串类型详解

MySQL数据类型:字符串类型详解 在MySQL数据库中,字符串数据类型用于存储各种文本信息。这些数据类型主要包括CHAR、VARCHAR、TEXT和BLOB等。 CHAR与VARCHAR CHAR CHAR类型用于存储固定长度的字符串。它的长度在创建表时就已确定,长度范围…

书生·浦语大模型实战营之Llama 3 高效部署实践(LMDeploy 版)

书生浦语大模型实战营之Llama 3 高效部署实践(LMDeploy 版) 环境,模型准备LMDeploy chatTurmind和Transformer的速度对比LMDeploy模型量化(lite)LMDeploy服务(serve) 环境,模型准备 InternStudio 可以直接使用 studio-conda -t …

查找总价格为目标值的两个商品 ---- 双指针

题目链接 题目: 分析: 解法一: 暴力解法, 将每两个的和都算出来, 判断是否为目标值解法二: 数组中的数是按升序排序的, 我们可以定义左右指针 如果和小于目标值, 则应该让和变大, 所以左指针右移如果和大于目标值, 则应该让和变小, 所以右指针左移 思路: 定义left 0, righ…

使用Krukal算法解决图的最小生成树问题

Kruskal 算法 Kruskal算法是一种用于寻找连通图中最小生成树的算法。最小生成树是一个包含图中所有顶点的树,且边权重之和最小。Kruskal算法是一种贪心算法,它的基本思想是:每次选择边权重最小的边来扩展树,直到树包含所有的顶点…

一周学会Django5 Python Web开发-Django5 ORM执行SQL语句

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计49条视频,包括:2024版 Django5 Python we…

Spring 注解开发详解

1. 注解驱动入门案例介绍 1.1 需求描述 1.需求:实现保存一条数据到数据库。 2.表结构:create table account(id int primary key auto_increment,name varchar(50),money double(7,2)); 3.要求:使用spring框架中的JdbcTemplate和DriverMana…

Python 使用相对路径读取文件失败

python open一个问及那时使用绝对路径可以,但是使用相对路径时报错,找不到指定文件 解决步骤如下: 添加Python配置 在新增的配置Json文件添加下图红框这一行

阿里云OSS

进入阿里云官网,手机号短信登录

Ansible 中的copy 复制模块应用详解

作者主页:点击! Ansible专栏:点击! 创作时间:2024年4月25日13点40分 Ansible 中的 copy 模块用于将文件或目录从本地计算机或远程主机复制到远程主机上的特定位置。它是一个功能强大的模块,可用于各种文…

prometheus helm install 如何配置告警模版

对接企业微信 获取企业id 注册完成之后,通过企业微信官网登录后台管理,在【我的企业】的企业信息里面,获取到Alertmanager服务配置需用到的第一个配置:企业ID 获取部门id 部门ID 在【通讯录】中,添加一个子部门&a…

无人机+自组网:2U机架车载式自组网电台技术详解

自组网的特点包括自发现、自动配置、自组织和自愈等。由于网络中的节点可以随时加入或离开,自组网需要能够自动感知拓扑结构的变化,并快速调整路由策略以适应新的网络环境。此外,自组网中的节点还需要具备节能、安全和分布式管理等特性&#…

maixcam如何无脑运行运行别人的模型(以安全帽模型为例)

maixcam如何无脑运行运行别人的模型(以安全帽模型为例) 本文章主要讲如何部署上传的模型文件,以及如果你要把你模型按照该流程应该怎么修改,你可以通过该文章得到你想要的应该,该应用也包含的退出按钮,是屏…

质量管理系统( QMS):一文扫盲,质量重于泰山。

一、什么是QMS系统 QMS系统是质量管理系统(Quality Management System)的缩写。它是一种组织内部用于管理和控制质量相关活动的体系,旨在确保产品或服务符合质量标准和客户要求。 QMS系统通常包括一系列文件、程序和流程,用于规…

Linux常用命令总结(四):文件权限及相关命令介绍

1. 文件属性信息解读 1. 文件类型和权限的表示 0首位表示类型。在Linux中第一个字符代表这个文件是目录、文件或链接文件 符号对应文件类型-代表文件dd 代表目录l链接文档(link file); 1-3位确定属主(该文件的所有者)拥有该文件的权限。 4-6…

【信息收集】端口扫描masscan负载均衡识别lbd

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、什么是masscan masscan在kali系统上是自带的端口扫描…