XAgent
📖 介绍
XAgent 是一个开源的实验性大语言模型 (LLM) 驱动的自主代理,能够自动解决各种任务。 它被设计为通用代理,可应用于广泛的任务。 XAgent 还处于早期阶段,我们正在努力改进它。
🏆 我们的目标是创建一个超级智能的代理,能够解决任何给定的任务!
我们欢迎多种形式的合作,包括全职和兼职角色等。如果你对代理的前沿领域感兴趣,并且希望与我们一起实现真正的自主代理,请通过 xagentteam@gmail.com 与我们联系。
XAgent
XAgent 设计的特点如下:
- 自主性:XAgent 可以在无需人工参与的情况下自动解决各种任务。
- 安全性:XAgent 被设计为安全运行。所有操作都限制在一个 docker 容器内。尽管如此,仍然运行它吧!
- 可扩展性:XAgent 具有可扩展性。你可以轻松添加新工具来增强代理的能力,甚至添加新代理!
- GUI:XAgent 提供了一个友好的 GUI,用户可以通过它与代理进行交互。你也可以使用命令行界面与代理进行交互。
- 与人类协作:XAgent 可以与你合作完成任务。它不仅能够按照你的指导解决复杂任务,还能在遇到挑战时寻求你的帮助。
XAgent 由三个部分组成:
- 🤖 调度器 负责动态实例化并将任务分配给不同的代理。它允许我们添加新代理并提高代理的能力。
- 🧐 规划器 负责生成并修正任务的计划。它将任务分解为子任务并为其生成里程碑,使代理能够一步一步解决任务。
- 🦾 执行器 负责执行操作以实现目标并完成子任务。执行器利用各种工具来解决子任务,并且它还可以与人类合作完成任务。
🧰 ToolServer
ToolServer 是为 XAgent 提供强大和安全工具的服务器。它是一个 docker 容器,为 XAgent 提供了一个安全的运行环境。 目前,ToolServer 提供以下工具:
- 📝 文件编辑器 提供了一个文本编辑工具,用于编写、阅读和修改文件。
- 📘 Python Notebook 提供了一个交互式的 Python notebook,可以运行 Python 代码以验证想法、绘制图形等。
- 🌏 网页浏览器 提供了一个网页浏览器,用于搜索和访问网页。
- 🖥️ Shell 提供了一个 bash shell 工具,可以执行任何 shell 命令,甚至安装程序和托管服务。
- 🧩 Rapid API 提供了一个从 Rapid API 检索 API 并调用它们的工具,XAgent 可以使用这些 API 来执行各种任务。请参阅 ToolBench 获取有关 Rapid API 集合的更多信息。 你还可以轻松向 ToolServer 添加新工具,以增强 XAgent 的能力。
✨ 快速入门
🛠️ 构建并设置 ToolServer
ToolServer 是 XAgent 行动的场所。它是一个 docker 容器,为 XAgent 提供了一个安全的运行环境。
因此,你应该首先安装 docker
和 docker-compose
。
然后,你需要构建 ToolServer 镜像。参照以下任一方法构建:
通过运行以下命令从 docker hub 拉取镜像:
docker compose up
通过运行以下命令从本地构建镜像:
docker compose build
docker compose up
这将为 ToolServer 构建镜像并启动 ToolServer 的容器。
如果你想在后台运行容器,请使用 docker compose up -d
。
请参阅 这里 了解有关我们 ToolServer 的详细信息。
如果 ToolServer 更新了,你需要重新拉取/重建镜像:
docker compose pull
或者
docker compose build
🎮 设置并运行 XAgent
在设置完 ToolServer 后,你可以开始运行 XAgent。
- 安装依赖(需要 Python >= 3.10)
pip install -r requirements.txt
- 配置 XAgent
- 在运行 XAgent 之前,你应该在
assets/config.yml
中配置它。 assets/config.yml
中至少应提供一个 OpenAI 密钥,该密钥用于访问 OpenAI API。 我们强烈推荐使用gpt-4-32k
来运行 XAgent;gpt-4
也可以处理大多数简单任务。 无论如何,至少应该提供一个gpt-3.5-turbo-16k
API 密钥作为备用模型。 由于上下文长度有限,我们不建议使用gpt-3.5-turbo
来运行 XAgent;你不应该尝试在此模型上运行 XAgent。- 如果你想更改
XAgentServer
的配置文件路径,你应该修改.env
文件中的CONFIG_FILE
值,并重新启动 docker 容器。
- 运行 XAgent
python run.py --task "在此输入你的任务" --config-file "assets/config.yml"
-
你可以使用参数
--upload-files
来选择你想要提交给 XAgent 的初始文件。 -
XAgent的本地工作区位于
local_workspace
中,您可以在其中找到XAgent在运行过程中生成的所有文件。 -
执行完成后,
ToolServerNode
中的整个workspace
将被复制到running_records
中,方便您使用。 -
此外,在
running_records
中,您可以找到所有中间步骤的信息,例如任务状态、LLM的输入输出对、使用的工具等。 -
您可以从记录中加载以重现之前的运行,只需在配置中设置
record_dir
(默认值为Null
)。该记录是与XAgent代码版本绑定的系统级记录。所有运行配置、查询、代码执行状态(包括错误)、服务器行为都会被记录下来。 -
我们已从记录中删除了所有敏感信息(包括API密钥),因此您可以放心地与他人分享。在不久的将来,我们将引入更细粒度的共享选项,突出执行过程中的人类贡献。
- 使用GUI运行XAgent
容器XAgent-Server
启动时带有nginx和一个监听端口5173
的web服务器。您可以访问http://localhost:5173
,通过web UI与XAgent交互。默认的用户名和密码分别为guest
和xagent
。有关我们GUI Demo的详细信息,请参考这里。
🎬 Demo
在这里,我们展示了一些使用XAgent解决任务的案例:
您可以在XAgent官方网站上查看我们的实时演示。我们还提供了视频演示和使用XAgent的展示:
案例1. 数据分析:展示双循环机制的有效性
我们首先展示了一个帮助用户进行复杂数据分析的案例。这里,我们的用户向XAgent提交了一个iris.zip
文件,寻求数据分析的帮助。XAgent迅速将任务分解为四个子任务:(1)数据检查和理解,(2)验证系统的Python环境中是否存在相关的数据分析库,(3)编写数据处理和分析代码,(4)根据Python代码的执行结果编写分析报告。以下是XAgent绘制的图表。
案例2. 推荐:人机交互的新范式
借助独特的能力主动寻求人类帮助并协作解决问题,XAgent继续重新定义人机合作的边界。如下面的截图所示,一位用户请求XAgent推荐一些适合友好聚会的好餐馆,但未能提供具体细节。XAgent识别到提供的信息不足后,使用AskForHumanHelp工具,促使人工介入以获取用户的首选位置、预算限制、饮食偏好和饮食限制等信息。借助这些有价值的反馈,XAgent无缝生成了量身定制的餐馆推荐,确保了用户和他们的朋友们得到个性化且令人满意的体验。
案例3. 训练模型:一个复杂的工具用户
XAgent不仅处理日常任务,还在诸如模型训练等复杂任务中提供了无价的帮助。这里,我们展示了一个用户希望分析电影评论并评估公众对特定电影的情感的场景。作为响应,XAgent迅速启动了流程,下载IMDB数据集以训练一个最先进的BERT模型(参见下图),利用深度学习的力量。借助这个训练好的BERT模型,XAgent轻松驾驭了电影评论的复杂细微差别,提供了有关公众对各种电影感知的有见地的预测。
📊 评估
我们进行人工偏好评估来评估XAgent的性能。我们准备了超过50个真实世界的复杂任务进行评估,这些任务可以分为5类:搜索与报告、编码与开发、数据分析、数学、生活助理。我们将XAgent的结果与AutoGPT进行了比较,结果显示XAgent全面胜出。
所有运行记录可以参考这里。
我们报告了XAgent在人工偏好方面相较于AutoGPT的显著提升。
我们还在以下基准上评估了XAgent:
🖌️ 博客
我们的博客可以在这里查看!
🌟 我们的贡献者
衷心感谢所有的贡献者。正是你们的努力让这个项目不断成长和发展。每一个贡献,无论大小,都是无价的。
🌟 Star历史
如果您发现我们的repo有用,请考虑引用:
@misc{xagent2023,
title={XAgent: An Autonomous Agent for Complex Task Solving},
author={XAgent Team},
year={2023},
}