1. 概述
1.1 Agent是什么
长期以来,研究者们一直在追求与人类相当、乃至超越人类水平的通用人工智能(Artificial General Intelligence,AGI)。早在 1950 年代,Alan Turing 就将「智能」的概念扩展到了人工实体,并提出了著名的图灵测试。这些人工智能实体通常被称为 —— 代理(Agent)。「代理」这一概念起源于哲学,描述了一种拥有欲望、信念、意图以及采取行动能力的实体。在人工智能领域,这一术语被赋予了一层新的含义:具有自主性、反应性、积极性和社交能力特征的智能实体。
从那时起,代理的设计就成为人工智能社区的焦点。然而,过去的工作主要集中在增强代理的特定能力,如符号推理或对特定任务的掌握(国际象棋、围棋等)。这些研究更加注重算法设计和训练策略,而忽视了模型固有的通用能力的发展,如知识记忆、长期规划、有效泛化和高效互动等。事实证明,增强模型固有能力是推动智能代理进一步发展的关键因素。
大型语言模型(LLMs)的出现为智能代理的进一步发展带来了希望。如果将 NLP 到 AGI 的发展路线分为五级:语料库、互联网、感知、具身和社会属性,那么目前的大型语言模型已经来到了第二级,具有互联网规模的文本输入和输出。在这个基础上,如果赋予 LLM-based Agents 感知空间和行动空间,它们将达到第三、第四级。进一步地,多个代理通过互动、合作解决更复杂的任务,或者反映出现实世界的社会行为,则有潜力来到第五级 —— 代理社会。
1.2 Lagent 是什么
Lagent 是一个轻量级开源智能体框架,旨在让用户可以高效地构建基于大语言模型的智能体。同时它也提供了一些典型工具以增强大语言模型的能力。
Lagent 目前已经支持了包括 AutoGPT、ReAct 等在内的多个经典智能体范式,也支持了如下工具:
- Arxiv 搜索
- Bing 地图
- Google 学术搜索
- Google 搜索
- 交互式 IPython 解释器
- IPython 解释器
- PPT
- Python 解释器
1.3 AgentLego 是什么
AgentLego 是一个提供了多种开源工具 API 的多模态工具包,旨在像是乐高积木一样,让用户可以快速简便地拓展自定义工具,从而组装出自己的智能体。通过 AgentLego 算法库,不仅可以直接使用多种工具,也可以利用这些工具,在相关智能体框架(如 Lagent,Transformers Agent 等)的帮助下,快速构建可以增强大语言模型能力的智能体。
AgentLego 目前提供了如下工具:
1.4 两者的关系
经过上面的介绍,我们可以发现,Lagent 是一个智能体框架,而 AgentLego 与大模型智能体并不直接相关,而是作为工具包,在相关智能体的功能支持模块发挥作用。
两者之间的关系可以用下图来表示:
1.5 环境配置
1.5.1 创建开发机和 conda 环境
进入开发机后,为了方便使用,我们需要配置一个环境以同时满足 Lagent 和 AgentLego 运行时所需依赖。在开始配置环境前,我们先创建一个用于存放 Agent 相关文件的目录,可以执行如下命令:
mkdir -p /root/agent
接下来,我们开始配置 conda 环境,可以输入如下指令:
studio-conda -t agent -o pytorch-2.1.2
显示下图就是初始化环境成功了。
1.5.2 安装 Lagent 和 AgentLego
Lagent 和 AgentLego 都提供了两种安装方法,一种是通过 pip 直接进行安装,另一种则是从源码进行安装。为了方便使用 Lagent 的 Web Demo 以及 AgentLego 的 WebUI,我们选择直接从源码进行安装。 此处附上源码安装的相关帮助文档:
- Lagent:安装方式 — Lagent
- AgentLego:安装 — AgentLego 0.2.0 文档
可以执行如下命令进行安装:
安装Lagent
cd /root/agent conda activate agent
git clone https://gitee.com/internlm/lagent.git
cd lagent && git checkout 581d9fb && pip install -e . && cd ..
安装过程:
安装成功后显示如下结果:
Successfully installed altair-5.3.0 anyio-4.4.0 argon2-cffi-23.1.0 argon2-cffi-bindings-21.2.0 arrow-1.3.0 arxiv-2.1.0 async-lru-2.0.4 attrs-23.2.0 babel-2.15.0 beautifulsoup4-4.12.3 bleach-6.1.0 blinker-1.8.2 cachetools-5.3.3 cffi-1.16.0 click-8.1.7 colorama-0.4.6 defusedxml-0.7.1 distro-1.9.0 fastjsonschema-2.19.1 feedparser-6.0.10 fqdn-1.5.1 func_timeout-4.3.5 gitdb-4.0.11 gitpython-3.1.43 griffe-0.45.2 h11-0.14.0 httpcore-1.0.5 httpx-0.27.0 ipywidgets-8.1.2 isoduration-20.11.0 json5-0.9.25 jsonpointer-2.4 jsonschema-4.22.0 jsonschema-specifications-2023.12.1 jupyter-1.0.0 jupyter-console-6.6.3 jupyter-events-0.10.0 jupyter-lsp-2.2.5 jupyter-server-2.14.0 jupyter-server-terminals-0.5.3 jupyterlab-4.2.1 jupyterlab-pygments-0.3.0 jupyterlab-server-2.27.2 jupyterlab-widgets-3.0.10 lagent-0.2.2 markdown-it-py-3.0.0 mdurl-0.1.2 mistune-3.0.2 nbclient-0.10.0 nbconvert-7.16.4 nbformat-5.10.4 notebook-7.2.0 notebook-shim-0.2.4 overrides-7.7.0 pandas-2.2.2 pandocfilters-1.5.1 phx-class-registry-4.1.0 prometheus-client-0.20.0 protobuf-4.25.3 pyarrow-16.1.0 pycparser-2.22 pydeck-0.9.1 python-json-logger-2.0.7 pytz-2024.1 qtconsole-