前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >30+视觉/多模态工具!通用Agent工具库AgentLego给大模型一双 “慧眼”

30+视觉/多模态工具!通用Agent工具库AgentLego给大模型一双 “慧眼”

作者头像
OpenMMLab 官方账号
发布2023-12-13 14:13:36
9960
发布2023-12-13 14:13:36
举报
文章被收录于专栏:OpenMMLab

在当今大语言模型(LLM)的浪潮中,不管是由 OpenAI 领衔的一系列商业闭源模型,还是百花齐放的社区开源模型,在不断刷新技术边界的同时,也激发了大家越来越多的期待—— LLM 还能带来怎样的可能性?OpenAI 提供了插件系统,社区也涌现了一系列大模型智能体(LLM-based Agent)项目,让 LLM 学会借助外部工具,扩展自己的能力边界,向 AGI 更进一步。

因此,我们也希望为这一份浪潮添砖加瓦,推出了 AgentLego 工具库。AgentLego 通过提供一个易于扩展、易于使用、易于部署的工具集合,让大家能够轻松地在各种 Agent 系统中发挥想象力,赋予大模型更强大的能力。

https://github.com/InternLM/agentlego

(文末点击阅读原文可直达,欢迎体验)

(AgentLego 功能演示视频)

AgentLego 工具库具有以下特点:

  • 丰富的工具集合,尤其是提供了大量视觉、多模态相关领域的前沿算法功能
  • 支持多个主流智能体系统,如 LangChain,Transformers Agent,lagent 等
  • 灵活的多模态工具调用接口,可以轻松支持各类输入输出格式的工具函数
  • 一键式远程工具部署,轻松使用和调试大模型智能体

让我们从以上几个方面,详细了解一下 AgentLego 的特色吧~

丰富的工具集合

目前,AgentLego 提供了三十多种工具,涉及到文本、图像、音频三种模态,后续还会支持视频等模态。这些工具涉及图像理解、音频文字转换、图像生成等功能,让你的 LLM 能力大大增强。

我们汇总了来自 OpenMMLab、HuggingFace 等一系列算法库的各种工具,并提供了一套简单易用的统一接口。通过这一接口,你不仅可以以开箱即用的方式使用这些工具。

代码语言:javascript
复制
>>> from agentlego import load_tool
>>> tool = load_tool('ImageCaption')
>>> tool('examples/demo.png')
'a puppy and a cat sitting on a blanket'

还可以轻松地教会 LLM 使用这些工具。

代码语言:javascript
复制
>>> # 从 AgentLego 构建工具
>>> from agentlego import load_tool
>>> tool = load_tool('ImageCaption').to_langchain()
>>> 
>>> # 构建一个使用 AgentLego 工具的 LangChain Agent
>>> from langchain.chat_models import ChatOpenAI
>>> from langchain.chains.conversation.memory import ConversationBufferMemory
>>> from langchain.agents import AgentType, initialize_agent
>>> agent = initialize_agent(
...    agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
...    llm=ChatOpenAI(temperature=0., model='gpt-4'),
...    tools=[tool],
...    memory=ConversationBufferMemory(memory_key='chat_history'),
... )

也许读者会有疑问,AgentLego 和社区中各种 Agent 系统的区别是什么呢?我们注意到,大部分 Agent 系统都会需要实现一系列工具,但这些工具本身和 Agent 系统的耦合程度并不高。因此我们希望实现一个独立的工具集库,在这个库中,我们致力于实现种类更多的工具、改进工具的描述,同时使这些工具能够尽可能适配更多的 Agent 系统。这也就引出了 AgentLego 的第二个特色,支持多种 Agent 系统。

支持多种 Agent 系统

目前,AgentLego 支持了主流的 Agent 系统,包括 Langchain 和 Huggingface Transformers Agent,以及 lagent,后续还将支持更多的 agent 系统。我们希望 AgentLego 中的工具可以尽可能简单、直接地应用于不同的 Agent 系统。

代码语言:javascript
复制
from agentlego import load_tool
tool = load_tool('ImageCaption')

# 在 LangChain 中
from langchain import initialize_agent
agent = initialize_agent(
    agent="structured-chat-zero-shot-react-description",
    tools=[tool.to_langchain()],
    ...
)

# 在 Transformers Agent 中
from transformers import HfAgent
agent = HfAgent(
    'https://api-inference.huggingface.co/models/bigcode/starcoder',
    additional_tools=[tool.to_transformers_agent()],
)

# 在 Lagent 中
from lagent import ReAct, ActionExecutor
agent = ReAct(
    action_executor=ActionExecutor(actions=[tool.to_lagent()]),
    ...
)

我们通过统一的接口,使 AgentLego 中的所有工具,可以一步适配各种支持的智能体系统。如果你想要实现自定义工具,又想尝试各种智能体系统,就可以利用 AgentLego,一次实现,处处可用。

多模态工具调用接口

AgentLego 的另一大特色,是通过统一的多模态输入输出接口,在不同的 Agent 系统中自动进行数据格式转换。如 ImageModification 工具,输入一张图像和一段指令,输出是一张图像。

对于基于文本交互的 Agent 系统,如 LangChain,语言模型本身无法处理图像输入输出;而一些 Agent 系统,如基于 Python 环境的 Transformers Agent 可以直接处理 Pillow 图像输入输出。

为了对各种 Agent 系统提供尽可能贴近原生的支持,AgentLego 会在对接时进行自动转换。在生成提示词(prompt)时,AgentLego 会根据 Agent 系统对模态的支持情况,在描述中指定不同的入参形式,如集成在 LangChain 时,工具的提示词会要求输入图像路径;而在 Transformers Agent 中,工具的提示词会要求直接输入图像。在接收参数时,多模态接口会自动根据输入参数的模态和参数类型进行解析,如图像参数的输入是一个字符串,接口会解析为图像路径,而不是一个文本参数。

由于 AgentLego 自动完成了这一转换,在用户们添加自定义工具时,只需要根据模态指定参数即可,而不必关心参数应该输入路径还是原始数据。同样的,根据多模态接口约定对工具输出进行包装后,AgentLego 会将工具输出自动转换为 Agent 系统可接受的数据类型。

一键式远程部署

AgentLego 中提供了许多基于深度神经网络的工具。这些工具功能强大,但同时对软硬件环境有较高要求,并且每次加载模型也需要较长时间。为了在开发或使用 Agent 系统时,省去配置工具环境和反复加载工具的麻烦,AgentLego 提供了一键式、透明化工具远程部署、远程调用的机制,让 Agent 系统可以 “轻装上阵”。

你可以在(若干个)服务器上配置好工具所需要的环境,然后用一行命令启动工具服务器,并指定在该工具服务器上运行的工具列表:

代码语言:javascript
复制
python server.py ImageCaption TextToImage VQA OCR

之后,在 Agent 系统需要运行的平台,只需要配置最基本的环境,配合 RemoteTool,即可通过网络通讯的方式,调用远程机器上部署的工具。

代码语言:javascript
复制
from agentlego.tools.remote import RemoteTool

tools = RemoteTool.from_server('Tool server address')

之后,你可以像使用本地工具一样,直接使用,或是在 Agent 系统中使用这些远程工具,甚至一个工具服务器供给多个 Agent 系统使用。


以上是关于 AgentLego 的全部介绍,感兴趣的小伙伴欢迎来试用。

https://github.com/InternLM/agentlego

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenMMLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档