赞
踩
大语言模型的局限性
幻觉
随着大语言模型的快速发展,逐渐发现即使是 GPT-4 这样的大语言模型,在某些场景下也不能满足实际需求,有着诸多的局限性,比如幻觉。
模型可能会生成虚假信息,与现实严重不符或脱节。
例如
问
鲁迅和周树人是同一个人吗?
答
鲁迅和周树人不是同一个人
时效性
由于大模型的训练数据往往截止到过去的某个时间,其训练数据是过时的。
模型训练数据过时,无法反映最新趋势和信息。
例如
问
今年是哪一年?
答
今年是2023年。
可靠性
面对复杂任务时,可能频发错误输出现象,影响信任度。
例如
问
你能帮我写一段微调LLM的代码吗?
答
def train(): ... return 'Hello World'
- 1
- 2
- 3
由于上述因素,大语言模型的智能体应运而生。
Hayes-Roth于 1995 年发表论文An Architecture for Adaptive Intelligent Systems中提出,一个智能体应当满足以下三个条件
(perception of dynamic conditions in the environment)
(action to affect conditions in the environment)
(reasoning to interpret perceptions, solve problems, draw inferences, and determine actions)
一个智能体主要包括三个部分
大脑
作为控制器,承担记忆、思考和决策任务。接受来自感知模块的信息,并采取相应动作。
感知
对外部环境的多模态信息进行感知和处理。包括但不限于图像、音频、视频、传感器等。
动作
利用并执行工具以影响环境。工具可能包括文本的检索、调用相关 API 、操控机械臂等。
这样的智能体也就满足了Hayes-Roth提出的智能体所要满足的三个条件。
Lagent 是一个轻量级开源智能体框架,旨在让用户可以高效地构建基于大语言模型的智能体。同时它也提供了一些典型工具以增强大语言模型的能力。
Lagent 目前已经支持了包括 AutoGPT、ReAct 等在内的多个经典智能体范式,也支持了如下工具:
AgentLego 是一个提供了多种开源工具 API 的多模态工具包,旨在像是乐高积木一样,让用户可以快速简便地拓展自定义工具,从而组装出自己的智能体。通过 AgentLego 算法库,不仅可以直接使用多种工具,也可以利用这些工具,在相关智能体框架(如 Lagent,Transformers Agent 等)的帮助下,快速构建可以增强大语言模型能力的智能体。
AgentLego 目前提供了如下工具:
通用能力 | 语音相关 | 图像处理 | AIGC |
|
|
|
|
经过上面的介绍,我们可以发现,Lagent 是一个智能体框架,而 AgentLego 与大模型智能体并不直接相关,而是作为工具包,在相关智能体的功能支持模块发挥作用。
两者之间的关系可以用下图来表示:
在创建开发机界面选择镜像为 Cuda12.2-conda,并选择 GPU 为30% A100。
进入开发机后,为了方便使用,我们需要配置一个环境以同时满足 Lagent 和 AgentLego 运行时所需依赖。在开始配置环境前,我们先创建一个用于存放 Agent 相关文件的目录,可以执行如下命令:
mkdir -p /root/agent
接下来,我们开始配置 conda 环境,可以输入如下指令:
studio-conda -t agent -o pytorch-2.1.2
显示下图就是初始化环境成功了。
非 InterStudio 开发机环境配置如果是在非 InternStudio 开发机上配置环境,则可以通过如下指令创建初始环境:
conda create -n agent
conda activate agent
conda install python=3.10
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidia
Lagent 和 AgentLego 都提供了两种安装方法,一种是通过 pip 直接进行安装,另一种则是从源码进行安装。为了方便使用 Lagent 的 Web Demo 以及 AgentLego 的 WebUI,我们选择直接从源码进行安装。
此处附上源码安装的相关帮助文档:
可以执行如下命令进行安装:
cd /root/agent
conda activate 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 ..
在这一步中,我们将会安装其他将要用到的依赖库,如 LMDeploy,可以执行如下命令:
conda activate agent
pip install lmdeploy==0.3.0
由于后续的 Demo 需要用到 tutorial 已经写好的脚本,因此我们需要将 tutorial 通过 git clone 的方法准备好,以备后续使用:
cd /root/agent
git clone -b camp2 https://gitee.com/internlm/Tutorial.git
在这一部分中,我们将带大家体验 Lagent 的 Web Demo,使用 Lagent 自定义工具,并体验自定义工具的效果。
详细文档可以访问:Lagent:轻量级智能体框架。
在这一部分中,我们将带大家直接使用 AgentLego 工具,体验 AgentLego 的 WebUI,以及基于 AgentLego 自定义工具并体验自定义工具的效果。
详细文档可以访问:AgentLego:组装智能体“乐高”。
首先下载 demo 文件:
cd /root/agent
wget http://download.openmmlab.com/agentlego/road.jpg
由于 AgentLego 在安装时并不会安装某个特定工具的依赖,因此我们接下来准备安装目标检测工具运行时所需依赖。
AgentLego 所实现的目标检测工具是基于 mmdet (MMDetection) 算法库中的 RTMDet-Large 模型,因此我们首先安装 mim,然后通过 mim 工具来安装 mmdet。这一步所需时间可能会较长,请耐心等待。
conda activate agent
pip install openmim==0.3.9
mim install mmdet==3.3.0
在安装完成后,可能会观察到以下现象(如下图所示),但请放心,这是正常现象,这并不会影响到我们的使用。
然后通过 touch /root/agent/direct_use.py
(大小写敏感)的方式在 /root/agent 目录下新建 direct_use.py 以直接使用目标检测工具,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)
此时文件树结构如下:
/root/agent ├── agentlego │ ├── agentlego │ ├── docs │ ├── examples │ ├── LICENSE │ └── ... ├── lagent │ ├── docs │ ├── examples │ ├── lagent │ ├── LICENSE │ └── ... ├── Tutorial │ ├── assets │ ├── agent │ ├── helloword │ ├── huixiangdou │ └── ... ├── direct_use.py └── road.jpg
接下来在执行 python /root/agent/direct_use.py
以进行推理。在等待 RTMDet-Large 权重下载并推理完成后,我们就可以看到如下输出以及一张位于 /root/agent 名为 road_detection_direct.jpg 的图片:
python direct_use.py Loads checkpoint by http backend from path: https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_l_8xb32-300e_coco/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth Downloading: "https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_l_8xb32-300e_coco/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth" to /root/.cache/torch/hub/checkpoints/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 433M/433M [00:58<00:00, 7.81MB/s] The model and loaded state dict do not match exactly unexpected key in source state_dict: data_preprocessor.mean, data_preprocessor.std 06/25 23:59:42 - mmengine - WARNING - Failed to search registry with scope "mmdet" in the "function" registry tree. As a workaround, the current "function" registry in "mmengine" is used to build instance. This may cause unexpected failure when running the built modules. Please check whether "mmdet" is a correct scope, or whether the registry is initialized. /root/.conda/envs/agent/lib/python3.10/site-packages/mmengine/visualization/visualizer.py:196: UserWarning: Failed to add <class 'mmengine.visualization.vis_backend.LocalVisBackend'>, please provide the `save_dir` argument. warnings.warn(f'Failed to add {vis_backend.__class__}, ' /root/.conda/envs/agent/lib/python3.10/site-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /opt/conda/conda-bld/pytorch_1702400410390/work/aten/src/ATen/native/TensorShape.cpp:3526.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined] Inference ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ truck (345, 428, 528, 599), score 83 car (771, 510, 837, 565), score 81 car (604, 518, 677, 569), score 75 person (866, 503, 905, 595), score 74 person (287, 513, 320, 596), score 74 person (964, 501, 999, 604), score 72 person (1009, 503, 1047, 602), score 69 person (259, 510, 279, 575), score 65 car (1074, 524, 1275, 691), score 64 person (993, 508, 1016, 597), score 62 truck (689, 483, 764, 561), score 62 bicycle (873, 551, 903, 602), score 60 person (680, 523, 699, 567), score 55 bicycle (968, 551, 996, 609), score 53 bus (826, 482, 930, 560), score 52 bicycle (1011, 551, 1043, 617), score 51 (agent) root@intern-studio-50001213:~/agent#
原图 | 结果 |
---|---|
由于 AgentLego 算法库默认使用 InternLM2-Chat-20B 模型,因此我们首先需要修改 /root/agent/agentlego/webui/modules/agents/lagent_agent.py 文件的第 105行位置,将 internlm2-chat-20b 修改为 internlm2-chat-7b,即
def llm_internlm2_lmdeploy(cfg):
url = cfg['url'].strip()
llm = LMDeployClient(
- model_name='internlm2-chat-20b',
+ model_name='internlm2-chat-7b',
url=url,
meta_template=INTERNLM2_META,
top_p=0.8,
top_k=100,
temperature=cfg.get('temperature', 0.7),
repetition_penalty=1.0,
stop_words=['<|im_end|>'])
return llm
其中红色表示要删除的内容,绿色表示要添加的内容。
由于 AgentLego 的 WebUI 需要用到 LMDeploy 所启动的 api_server,因此我们首先按照下图指示在 vscode terminal 中执行如下代码使用 LMDeploy 启动一个 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 以启动 AgentLego WebUI。在新建的 terminal 中执行如下指令:
conda activate agent
cd /root/agent/agentlego/webui
python one_click.py
在等待 LMDeploy 的 api_server 与 AgentLego WebUI 完全启动后(如下图所示),在本地进行端口映射,将 LMDeploy api_server 的23333端口以及 AgentLego WebUI 的7860端口映射到本地。可以执行:
ssh -CNg -L 7860:127.0.0.1:7860 -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 你的 ssh 端口号
LMDeploy api_server | AgentLego WebUI |
---|---|
接下来在本地的浏览器页面中打开 http://localhost:7860 以使用 AgentLego WebUI。首先来配置 Agent,如下图所示。
然后配置工具,如下图所示。
等待工具加载完成后,点击上方 Chat 以进入对话页面。在页面下方选择工具部分只选择 ObjectDetection 工具,如下图所示。为了确保调用工具的成功率,请在使用时确保仅有这一个工具启用。
接下来就可以愉快地使用 Agent 了。点击右下角文件夹以上传图片,上传图片后输入指令并点击 generate 以得到模型回复。如下图所示,我们上传了 demo 图片,模型成功地调用了工具,并详细地告诉了我们图中的内容。
我最后的回应好像和这个不太一样
在本节中,我们将基于 AgentLego 构建自己的自定义工具。AgentLego 在这方面提供了较为详尽的文档,文档地址为 https://agentlego.readthedocs.io/zh-cn/latest/modules/tool.html 。自定义工具主要分为以下几步:
其中第一二四步是必须的步骤。下面我们将实现一个调用 MagicMaker 的 API 以实现图像生成的工具。
MagicMaker 是汇聚了优秀 AI 算法成果的免费 AI 视觉素材生成与创作平台。主要提供图像生成、图像编辑和视频生成三大核心功能,全面满足用户在各种应用场景下的视觉素材创作需求。体验更多功能可以访问 https://magicmaker.openxlab.org.cn/home 。
首先通过 touch /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): 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: import cv2 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)
接下来修改 /root/agent/agentlego/agentlego/tools/__init__.py 文件,将我们的工具注册在工具列表中。如下所示,我们将 MagicMakerImageGeneration 通过 from .magicmaker_image_generation import MagicMakerImageGeneration 导入到了文件中,并且将其加入了 __all__ 列表中。
from .base import BaseTool from .calculator import Calculator from .func import make_tool from .image_canny import CannyTextToImage, ImageToCanny from .image_depth import DepthTextToImage, ImageToDepth from .image_editing import ImageExpansion, ImageStylization, ObjectRemove, ObjectReplace from .image_pose import HumanBodyPose, HumanFaceLandmark, PoseToImage from .image_scribble import ImageToScribble, ScribbleTextToImage from .image_text import ImageDescription, TextToImage from .imagebind import AudioImageToImage, AudioTextToImage, AudioToImage, ThermalToImage from .object_detection import ObjectDetection, TextToBbox from .ocr import OCR from .scholar import * # noqa: F401, F403 from .search import BingSearch, GoogleSearch from .segmentation import SegmentAnything, SegmentObject, SemanticSegmentation from .speech_text import SpeechToText, TextToSpeech from .translation import Translation from .vqa import VQA + from .magicmaker_image_generation import MagicMakerImageGeneration __all__ = [ 'CannyTextToImage', 'ImageToCanny', 'DepthTextToImage', 'ImageToDepth', 'ImageExpansion', 'ObjectRemove', 'ObjectReplace', 'HumanFaceLandmark', 'HumanBodyPose', 'PoseToImage', 'ImageToScribble', 'ScribbleTextToImage', 'ImageDescription', 'TextToImage', 'VQA', 'ObjectDetection', 'TextToBbox', 'OCR', 'SegmentObject', 'SegmentAnything', 'SemanticSegmentation', 'ImageStylization', 'AudioToImage', 'ThermalToImage', 'AudioImageToImage', 'AudioTextToImage', 'SpeechToText', 'TextToSpeech', 'Translation', 'GoogleSearch', 'Calculator', - 'BaseTool', 'make_tool', 'BingSearch' + 'BaseTool', 'make_tool', 'BingSearch', 'MagicMakerImageGeneration' ]
与2.2,2.3以及2.4节类似,我们在两个 terminal 中分别启动 LMDeploy 服务和 AgentLego 的 WebUI 以体验我们自定义的工具的效果。
[!IMPORTANT]
注意,确保 2.2 节中的 LMDeploy 服务以及 2.3 节中的 Web Demo 服务已经停止(即 terminal 已关闭),否则会出现 CUDA Out of Memory 或是端口已占用的情况!
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
conda activate agent
cd /root/agent/agentlego/webui
python one_click.py
并在本地执行如下操作以进行端口映射:
ssh -CNg -L 7860:127.0.0.1:7860 -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 你的 ssh 端口号
在 Tool 界面选择 MagicMakerImageGeneration 后点击 save 后,回到 Chat 页面选择 MagicMakerImageGeneration 工具后就可以开始使用了。为了确保调用工具的成功率,请在使用时确保仅有这一个工具启用。下图是一个例子。可以看到模型成功地调用了工具并得到了结果。
在这一部分中,我们将介绍 OpenAI Function Calling 的相关内容,以及带大家使用 XTuner 来实现 Agent 工具能力的微调。
详细文档可以访问:Agent 工具能力微调。
https://github.com/InternLM/Tutorial/blob/camp2/agent/homework.md
完成 Lagent Web Demo 使用,并在作业中上传截图。文档可见 Lagent Web Demo
完成 AgentLego 直接使用部分,并在作业中上传截图。文档可见 直接使用 AgentLego。
多模态大模型领域最经典的成果都有哪些?
在多模态大模型领域,有许多经典的成果。以下是其中一些:
CLIP:CLIP(Contrastive Language-Image Pretraining)是由OpenAI开发的一种多模态预训练模型,它将文本和图像作为输入,并使用对比学习来训练模型。CLIP在多个视觉和语言任务上取得了最先进的结果,包括图像分类、图像生成、视觉问答等。
ViT:ViT(Vision Transformer)是由Google开发的一种基于Transformer架构的图像分类模型。ViT使用自注意力机制来处理图像,并在多个图像分类任务上取得了最先进的结果。
DALL-E:DALL-E是由OpenAI开发的一种图像生成模型,它可以将文本描述转换为图像。DALL-E使用自回归模型来生成图像,并在生成高质量图像方面取得了显著的成果。
GPT-3:GPT-3(Generative Pre-trained Transformer 3)是由OpenAI开发的一种自然语言处理模型,它具有1750亿个参数,是目前最大的语言模型之一。GPT-3在多个自然语言处理任务上取得了最先进的结果,包括文本生成、问答、翻译等。
StyleGAN:StyleGAN是由NVIDIA开发的一种图像生成模型,它使用自注意力机制和风格编码器来生成高质量的图像。StyleGAN在生成逼真的图像方面取得了显著的成果,并在图像编辑和图像转换方面得到了广泛应用。
这些多模态大模型在各自的领域内都取得了显著的成果,并在实际应用中得到了广泛的应用。
实际对不对呢,我写了个脚本测试了一下,没有问题
import cv2 name = 'person' x1,y1,x2,y2 = 556, 528, 770, 902 score = 83 image_path = r'D:\code\c++\myyolo\opencv_utils\people.png' image_test = cv2.imread(image_path) cv2.rectangle(image_test, (x1, y1), (x2, y2), (0, 255, 0), 1) cv2.putText(image_test, f'{name} {score}', (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 1) cv2.imshow('plot_result',image_test) cv2.waitKey(0)
学员手册
算力平台
课程文档
课程视频
代码仓库
RAG综述
https://arxiv.org/pdf/2402.19473.pdf
Retrieval-Augmented Generation for AI-Generated Content A Survey
胡老师博客:
本人博客:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。