当前的语言智能体框架主要关注于构建概念验证型的智能体,却忽视了非专业用户对智能体的访问,并且很少关注应用层面的设计。我们构建了 OpenAgents,一个面向日常生活真实场景的使用和托管语言智能体的开放平台。
目前,我们已在 OpenAgents 中实现了三个智能体,并在 演示网站 上免费提供使用!
1. 数据智能体:使用 Python/SQL 和数据处理工具进行数据分析;
2. 插件智能体:集成 200+ 日常工具;
3. 网页智能体:实现自主网页浏览。
OpenAgents 可以像 ChatGPT Plus 一样分析数据、调用插件、控制浏览器,但它具备 开源代码 的优势:
1. 易于部署
2. 全栈实现
3. 聊天式 Web UI
4. 智能体方法
5. …
OpenAgents 使普通用户能够通过一个针对快速响应和常见故障优化的 Web UI 与智能体功能交互,同时为开发者和研究人员提供在本地环境无缝部署的体验,为构建创新的语言智能体和促进真实世界评估奠定了基础。我们阐明了面临的挑战和充满希望的机遇,旨在为未来真实世界语言智能体的研究和开发奠定基础。
我们欢迎所有人的贡献。开始之前,请花点时间阅读我们的 CONTRIBUTING.md 指南,了解关于问题(Issues)和拉取请求(PRs)的规范。这将有助于确保您的贡献过程顺畅,并符合项目标准。
如果您在使用我们的 在线演示 或本地部署时遇到任何问题,请加入我们的 Discord 寻求帮助。或者,如果您在功能或代码方面遇到困难,可以创建一个 问题。
我们构建了三个具有聊天式 Web UI 的真实世界智能体作为演示(查看 OpenAgents 演示)。以下是 OpenAgents 平台的简要概述。您可以在我们的 文档 中找到更多关于概念和设计的细节。
数据智能体 是一个为高效数据操作设计的综合工具包。它提供以下能力:
凭借其编写和执行代码的能力,数据智能体简化了各种以数据为中心的任务。通过不同的 用例 探索其潜力。
插件智能体 无缝集成了超过 200 个第三方插件,每个插件都经过精心挑选,以丰富您日常生活的各个方面。借助这些插件,该智能体使您能够更高效地处理各种任务和活动。
🔌 插件示例:
发挥协同作用的力量!插件智能体支持同时使用多个插件。计划旅行?可以无缝整合 Klook、货币转换器和 WeatherViz 的功能。
通过我们的 自动插件选择 功能简化您的选择。让智能体根据您的需求,直观地搜索并推荐最佳的插件。
深入探索更多 用例,了解插件智能体的实际应用。
网页智能体 利用 Chrome 扩展程序的能力,自动导航和探索网站。该智能体简化了网页浏览体验,使查找相关信息、访问所需资源等变得更加容易。
网页智能体能做什么的示例:
在这些 用例 中见证网页智能体的全部潜力。
我们已经发布了 OpenAgents 平台代码。欢迎在您自己的本地环境中部署!
以下是 OpenAgents 的简要系统设计:
请查看以下文件夹和 README 文件进行设置和本地部署:
注意:为了提高代码可读性,我们重命名了一些参数。如果您在 2023年10月26日 之前拉取过代码,请注意,如果您想拉取最新代码,由于键名不同,之前的本地聊天历史将会丢失。
请按照以下步骤使用 docker-compose 部署 OpenAgents 平台。
注意: Docker 版本仍在开发中,因此某些功能可能无法按预期正常工作,且响应可能较慢。如果您有任何问题,请随时提出问题。如果您想要一个更稳定的版本,目前我们建议您从源代码部署。
ENV KAGGLE_USER="" \
KAGGLE_KEY=""ENV NEXT_PUBLIC_BACKEND_ENDPOINT http://x.x.x.x:8000docker compose build 命令。docker-compose.yml 中的 OPENAI_API_BASE;否则,您只需在 docker-compose.yml 中填入您的 OPENAI_API_KEY。docker compose up -d 来启动所有服务。注意事项:
1. 如果您想使用 GPU,需要安装 Nvidia Container Toolkit,并取消注释 docker-compose.yml 中第 56-62 行的内容。
2. 使用自动插件功能会从 Huggingface 下载权重文件。在某些地区,可能会出现连接超时。请自行解决网络问题。
在深入了解如何扩展 OpenAgents 之前,让我们先概览一下代码结构以便更好地理解。
OpenAgents 的代码结构如下所示:
├── backend # 后端代码
│ ├── README.md # 后端 README,用于设置
│ ├── api # RESTful API,供前端调用
│ ├── app.py # 主 Flask 应用
│ ├── display_streaming.py # 渲染流式响应
│ ├── kernel_publisher.py # 代码执行队列
│ ├── main.py # 后端主入口
│ ├── memory.py # 后端内存(存储)
│ ├── schemas.py # 常量定义
│ ├── setup_script.sh # 后端一键设置脚本
│ ├── static # 静态文件,例如缓存和图片
│ └── utils # 工具函数
├── frontend # 前端代码
│ ├── README.md # 前端 README,用于设置
│ ├── components # React 组件
│ ├── hooks # 自定义 React Hooks
│ ├── icons # 图标资源
│ ├── next-env.d.ts # Next.js 环境变量的 TypeScript 声明
│ ├── next-i18next.config.js # 国际化配置设置
│ ├── next.config.js # Next.js 配置设置
│ ├── package-lock.json # npm 生成的精确依赖树描述文件
│ ├── package.json # 描述依赖项的清单文件
│ ├── pages # Next.js 页面
│ ├── postcss.config.js # PostCSS 配置设置
│ ├── prettier.config.js # Prettier 配置设置
│ ├── public # 静态资源
│ ├── styles # 全局样式
│ ├── tailwind.config.js # Tailwind CSS 配置设置
│ ├── tsconfig.json # TypeScript 配置设置
│ ├── types # 类型声明
│ ├── utils # 工具或辅助函数
│ ├── vitest.config.ts # ViTest 配置设置
│ └── webot_extension.zip # 网页智能体的 Chrome 扩展程序
└── real_agents # 语言智能体
├── adapters # 三个智能体共享的适配器组件,用于适应后端
├── data_agent # 数据智能体实现
├── plugins_agent # 插件智能体实现
└── web_agent # 网页智能体实现
如上所示,backend/ 和 frontend/ 是自包含的,可以直接部署(参见 此处)。
这并不意味着它们不能被修改。
相反,您可以按照传统的 客户端-服务器 架构来扩展后端和前端。
对于 real_agents/,我们将其设计为“一个智能体,一个文件夹”,以便于扩展新的智能体。
值得注意的是,我们将其命名为“真实智能体”,因为它不仅包含了概念上的语言智能体部分,还填补了语言智能体与后端之间的空白。
例如,adapters/ 包含了共享的适配器组件,如流解析、数据模型、内存、回调等。
我们建议感兴趣的读者参考我们的 论文 了解概念和实现设计。
我们感谢 LangChain,因为我们基于他们的代码构建了真实智能体。
如果您想在我们提供的三个智能体之外构建一个新智能体,可以按照以下步骤操作:
- 参考 real_agents/ 文件夹,查看先前智能体的实现方式,并为您的智能体创建一个新文件夹。
- 在新文件夹中实现智能体逻辑。需要时使用 adapters/ 文件夹下的组件。
- 在 backend/api/ 文件夹下添加一个 chat_<新智能体>.py 文件,定义新智能体的聊天 API,该 API 将被前端调用。
- 如果需要,在 backend/schemas.py 中注册新的常量。
- 在 frontend/types/agent.ts 中添加一个新的 OpenAgentID,并在 frontend/utils/app/api.ts 和 frontend/utils/app/const.ts 中添加相应的 API。
- 需要时,在 frontend/components/Chat/Chat.tsx 和 frontend/components/Chat/ChatMessage.tsx 中实现智能体 UI。
- 运行本地脚本并测试您的新智能体。
注意,如果出现新的数据类型(即超出文本、图像、表格和 JSON),您可能需要在 backend/display_streaming.py 中实现其解析逻辑并添加新的数据模型。
如果 LLM 已经托管并可以通过 API 调用,扩展一个新的 LLM 作为智能体骨干则更为简单。
只需在 backend/api/language_model.py 中注册您的新模型。可以参考 lemur-chat 作为模板。
如果 LLM 尚未托管,我们有一个关于如何部署新 LLM 并将其作为 API 暴露的教程 请点击这里(LLM 托管待办)。
如果您想在插件智能体中扩展一个新工具,可以按照以下步骤操作:
- 参考 `real_agents/plugins_