vercel-labs/open-agents

GitHub: vercel-labs/open-agents

一个用于在 Vercel 上构建和运行后台编码代理的开源参考应用,解决自动化编码与工作流持久化问题。

Stars: 3037 | Forks: 330

# 开放代理 [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?project-name=open-agents&repository-name=open-agents&repository-url=https%3A%2F%2Fgithub.com%2Fvercel-labs%2Fopen-agents&demo-title=Open+Agents&demo-description=Open-source+reference+app+for+building+and+running+background+coding+agents+on+Vercel.&demo-url=https%3A%2F%2Fopen-agents.dev%2F&env=POSTGRES_URL%2CJWE_SECRET%2CENCRYPTION_KEY%2CNEXT_PUBLIC_VERCEL_APP_CLIENT_ID%2CVERCEL_APP_CLIENT_SECRET%2CNEXT_PUBLIC_GITHUB_CLIENT_ID%2CGITHUB_CLIENT_SECRET%2CGITHUB_APP_ID%2CGITHUB_APP_PRIVATE_KEY%2CNEXT_PUBLIC_GITHUB_APP_SLUG%2CGITHUB_WEBHOOK_SECRET&envDescription=Neon+can+provide+POSTGRES_URL+automatically.+Generate+JWE_SECRET+and+ENCRYPTION_KEY+yourself%2C+then+add+your+Vercel+OAuth+and+GitHub+App+credentials+for+a+full+deployment.&products=%255B%257B%2522type%2522%253A%2522integration%2522%252C%2522protocol%2522%253A%2522storage%2522%252C%2522productSlug%2522%253A%2522neon%2522%252C%2522integrationSlug%2522%253A%2522neon%2522%257D%252C%257B%2522type%2522%253A%2522integration%2522%252C%2522protocol%2522%253A%2522storage%2522%252C%2522productSlug%2522%253A%2522upstash-kv%2522%252C%2522integrationSlug%2522%253A%2522upstash%2522%257D%255D&skippable-integrations=1) Open Agents 是一个用于在 Vercel 上构建和运行后台编码代理的开源参考应用。它包含 Web UI、代理运行时、沙箱编排以及从提示到代码变更所需的 GitHub 集成,而无需让笔记本电脑持续参与。 该仓库旨在被 Fork 和适配,而不是当作黑盒使用。 ## 它是什么 Open Agents 是一个三层系统: ``` Web -> Agent workflow -> Sandbox VM ``` - Web 应用处理认证、会话、聊天和流式 UI。 - 代理作为持久化工作流在 Vercel 上运行。 - 沙箱是执行环境:文件系统、Shell、Git、开发服务器和预览端口。 ### 关键架构决策:代理不是沙箱 代理不在虚拟机内部运行。它在沙箱外部运行,并通过文件读取、编辑、搜索和 Shell 命令与之交互。 这种分离是项目的主要目的: - 代理执行不与单个请求生命周期绑定 - 沙箱生命周期可以独立休眠和恢复 - 模型/提供者选择和沙箱实现可以独立演进 - 虚拟机保持为一个纯粹的执行环境,而不是变成控制平面 ## 当前能力 - 基于聊天的编码代理,支持文件、搜索、Shell、任务、技能与 Web 工具 - 使用 Workflow SDK 支持的后端多步骤执行、 streaming 和取消 - 基于快照的恢复功能的隔离 Vercel 沙箱 - 沙箱内的仓库克隆与分支操作 - 可选的自动提交、推送和 PR 创建(成功运行后) - 通过只读链接共享会话 - 通过 ElevenLabs 进行可选的语音输入转录 ## 运行时说明 以下是一些影响当前实现的重要细节: - 聊天请求会启动工作流运行,而不是内联执行代理。 - 每个代理回合可以跨多个持久化工作流步骤继续执行。 - 活动运行可以通过重新连接到现有工作流的流来恢复。 - 沙箱使用基础快照,暴露端口 `3000`、`5173`、`4321` 和 `8000`,并在空闲后休眠。 - 支持自动提交和自动 PR,但它们是偏好驱动的功能,并非始终启用。 ## 当前实际所需条件 这些要求基于当前的 `apps/web` 代码路径,而非旧的设置脚本。 ### 最低运行时 以下是应用启动并加载服务器状态所需的硬性要求: ``` POSTGRES_URL= JWE_SECRET= ``` ### 登录并实际使用托管应用所需 一个可用的部署还需要令牌加密和 Vercel OAuth 登录: ``` ENCRYPTION_KEY= NEXT_PUBLIC_VERCEL_APP_CLIENT_ID= VERCEL_APP_CLIENT_SECRET= ``` 没有这些,网站可以部署,但 Vercel 登录将无法工作。 ### 访问 GitHub 仓库、推送和 PR 所需 如果你希望用户连接 GitHub、在仓库/组织上安装应用、克隆私有仓库、推送分支或打开 PR,请添加以下 GitHub App 值: ``` NEXT_PUBLIC_GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= GITHUB_APP_ID= GITHUB_APP_PRIVATE_KEY= NEXT_PUBLIC_GITHUB_APP_SLUG= GITHUB_WEBHOOK_SECRET= ``` ### 可选配置 ``` REDIS_URL= KV_URL= VERCEL_PROJECT_PRODUCTION_URL= NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL= VERCEL_SANDBOX_BASE_SNAPSHOT_ID= ELEVENLABS_API_KEY= ``` - `REDIS_URL` / `KV_URL`:可选的技能元数据缓存(未配置时回退到内存)。 - `VERCEL_PROJECT_PRODUCTION_URL` / `NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL`:用于元数据和部分回调行为的规范生产 URL。 - `VERCEL_SANDBOX_BASE_SNAPSHOT_ID`:覆盖默认沙箱快照。 - `ELEVENLABS_API_KEY`:语音转录。 ## 在 Vercel 上部署你自己的副本 推荐路径:在 Vercel 上将本仓库部署到仓库根目录,然后叠加认证和 GitHub 集成。 1. Fork 本仓库。 2. 创建 PostgreSQL 数据库并复制其连接字符串。 3. 生成以下密钥: openssl rand -base64 32 | tr '+/' '-_' | tr -d '=\n' # JWE_SECRET openssl rand -hex 32 # ENCRYPTION_KEY 4. 将仓库导入 Vercel。 5. 在 Vercel 项目设置中至少添加以下环境变量: POSTGRES_URL= JWE_SECRET= ENCRYPTION_KEY= 6. 部署一次以获取稳定的生产 URL。 7. 创建 Vercel OAuth 应用,回调 URL 为: https://YOUR_DOMAIN/api/auth/vercel/callback 8. 添加以下环境变量并重新部署: NEXT_PUBLIC_VERCEL_APP_CLIENT_ID= VERCEL_APP_CLIENT_SECRET= 9. 如果需要完整的 GitHub 启用编码代理流程,请使用以下信息创建 GitHub App: - 主页 URL:`https://YOUR_DOMAIN` - 回调 URL:`https://YOUR_DOMAIN/api/github/app/callback` - 设置 URL:`https://YOUR_DOMAIN/api/github/app/callback` 在 GitHub App 设置中: - 启用“安装期间请求用户授权(OAuth)” - 使用 GitHub App 的客户端 ID 和客户端密钥作为 `NEXT_PUBLIC_GITHUB_CLIENT_ID` 和 `GITHUB_CLIENT_SECRET` - 如果希望组织安装能正常工作,请将应用设为公开 10. 添加 GitHub App 环境变量并重新部署。 11. 可选添加 Redis/KV 和规范生产 URL 变量。 ## 本地设置 1. 安装依赖: bun install 2. 创建本地环境文件: cp apps/web/.env.example apps/web/.env 3. 在 `apps/web/.env` 中填写所需值。 4. 启动应用: bun run web 如果已链接 Vercel 项目,仍可使用 `vc env pull` 拉取环境变量,但设置现在是故意手动的,以便你能清楚看到哪些值重要。 ## OAuth 与集成设置 ### Vercel OAuth 创建 Vercel OAuth 应用并使用以下回调: ``` https://YOUR_DOMAIN/api/auth/vercel/callback ``` 对于本地开发,使用: ``` http://localhost:3000/api/auth/vercel/callback ``` 然后设置: ``` NEXT_PUBLIC_VERCEL_APP_CLIENT_ID=... VERCEL_APP_CLIENT_SECRET=... ``` ### GitHub 应用程序 你不需要单独的 GitHub OAuth 应用。Open Agents 使用 GitHub App 的用户授权流程。 创建一个用于基于安装方式的仓库访问的 GitHub App,并配置: - 主页 URL:`https://YOUR_DOMAIN` - 回调 URL:`https://YOUR_DOMAIN/api/github/appallback` - 设置 URL:`https://YOUR_DOMAIN/api/github/app/callback` - 启用“安装期间请求用户授权(OAuth)” - 如果希望组织安装能正常工作,请将应用设为公开 对于本地开发,回调/设置 URL 使用 `http://localhost:3000/api/github/app/callback`,主页 URL 使用 `http://localhost:3000`。 然后设置: ``` NEXT_PUBLIC_GITHUB_CLIENT_ID=... # GitHub App Client ID GITHUB_CLIENT_SECRET=... # GitHub App Client Secret GITHUB_APP_ID=... GITHUB_APP_PRIVATE_KEY=... NEXT_PUBLIC_GITHUB_APP_SLUG=... GITHUB_WEBHOOK_SECRET=... ``` `GITHUB_APP_PRIVATE_KEY` 可以以带转义换行的 PEM 格式或 base64 编码的 PEM 格式存储。 ## 常用命令 ``` bun run web bun run check bun run typecheck bun run ci bun run sandbox:snapshot-base ``` ## 仓库结构 ``` apps/web Next.js app, workflows, auth, chat UI packages/agent agent implementation, tools, subagents, skills packages/sandbox sandbox abstraction and Vercel sandbox integration packages/shared shared utilities ```
标签:GitHub集成, OSV, Vercel, Web层, 三层架构, 云代理, 代理工作流层, 代码变更, 会话管理, 威胁情报, 工作流, 开发者工具, 开源, 持久化工作流, 搜索引擎查询, 无笔记本电脑开发, 服务器端, 模板, 沙箱, 沙箱VM层, 流式UI, 测试用例, 生成式AI安全, 聊天流, 背景编码代理, 自动化攻击, 自动化编码, 虚拟机, 认证, 部署模板