OpenBot:企业可以真正拥有的 AI 助手
本文目录
CopilotKit / OpenBot#
main
分支标签(BranchesTags)
转到文件(Go to file)
代码(Code) 打开更多操作菜单
最新提交
历史 592 次提交
592 次提交
文件夹和文件#
名称 最后提交信息
最后提交日期
.claude/skills
.github
agent-adk
agent-ag2
agent-agno
agent-antigravity
agent-bot
agent-claude-sdk
agent-computer
agent-crewai
agent-langgraph-agui
agent-langgraph
agent-langroid
agent-llamaindex
agent-mastra
agent-microsoft
agent-pydantic-ai
agent-strands
app
assets
charts/openbot
desktop
docker/s6
docs
examples
extension
mobile
patches
scripts
server
shared
spire
supervisor
tests
toolkit
worker
.dockerignore
.env.example
.gitattributes
.gitignore
CHANGELOG.md
Dockerfile
LICENSE
README.md
Tauri-signing-SKILL.md
biome.json
bun.lock
bunfig.toml
docker-compose.yml
package.json
prompt.txt
renovate.json
tsconfig.base.json
查看所有文件
仓库文件导航#
OpenBot
贵公司真正可以拥有的 AI 助手。它的形态与 ChatGPT、Claude 或 Grok 相同,但有一个真正重要的区别:它运行在你自己的基础设施上,而且你可以改变它的任何部分。任何智能体(agent)技术栈,都通过 AG-UI 接入。
每位同事(coworker)都会获得一个真实的浏览器,拥有自己的登录状态、自己的文件,并且只能使用你授予的工具。每一项操作都在发生之前被决定,在发生之后被记录。
与工程师交谈 · 让我们与你一起构建 · copilotkit.ai/openbot · 快速开始 · 文档
demo-openbot.mp4
带上任何 AG-UI 智能体,无论它写在某个框架上还是手写而成,它都会作为一位同事(coworker)到来,并拥有自己的频道(channel)。看着它在自己的屏幕上工作,在它遇到不该独自处理的事情时接管方向盘,然后再交还给它。它用组件(component)而不仅仅是文字来回答,而且整个系统都运行在你自己的机器上。
这是一个模板,而不是产品。OpenBot 的用途是被克隆并改造成你自己的东西。没有可供注册的托管版本,这里也没有任何东西作为可依赖的软件包发布:这个仓库中的每个工作区(workspace)都是私有的。你取走仓库,把 examples/ 下的示例租户包(tenant package)替换成你自己的同事、频道和技能,然后运行它。下面的一切描述的是一个起点,而不是一个由别人替你运营的成品。
处于 Beta 阶段,正在积极开发中。OpenBot 还很早期。请预期会有粗糙之处和缺陷,也请预期它会不断变化。欢迎提交 issue 和 pull request。
在你的机器上运行。下面的一切都是为笔记本电脑编写的。.env.example 中带有 OPENBOT_SINGLE_USER=true,它把每个请求都作为单个管理员放行,因此全新克隆的仓库无需先注册 OAuth 客户端就能进入产品。登录功能会关闭这一点,而且在其他任何人能够访问该部署之前,必须启用登录。
我们可以在你的公司为你构建它,或者与你一起构建。我们的工程师会在你的基础设施内部搭起 OpenBot,把它定制成看起来像你自己产品的样子,然后交还给你继续修改。开始对话吧。
与此同时,你可以在自己的笔记本电脑上运行它的全部内容,包括 Intelligence:CopilotKit 的免费 Developer 计划涵盖在 Mac 上通过 Docker 在本地运行 Intelligence。
它是什么#
一个运行在你自己的基础设施内部的智能体平台(agent platform)。Docker Compose 会启动它的每一个部分,数据存放在你的 PostgreSQL 中,模型由你选择:镜像中不附带任何模型,由管理员提供凭据(credential),凭据在静态存储时加密,且绝不会被记录到日志。
一次部署开始时会有两位同事,它们是配置而不是代码:负责日常工作的 General Assistant,以及负责公司问题的 Knowledge。一旦配置好端点,一位 Risk Analyst 会加入它们;另外还有十个在 examples/fintech/catalog/ 中等待,每一个只做一件事——按照成文政策审阅费用报销、把会议笔记转化为其中实际存在的后续事项、根据已发布的内容起草发布说明、对工单进行分类、依据手册回答新员工的问题、撰写一份明确指出自己未能找到哪些内容的简报、整理一次访谈、交接值班班次、在续约之前汇总已知信息,以及把客户反馈归类为可以引用的主题。把其中一个复制到 examples/fintech/agents/ 即可添加它,在那里或 agents.yaml 中编写你自己的,或者在 UI 中从 /bots 创建一个。
Bot 对计算机、文件、MCP 服务器或组件所做的任何事情,都会经过同一个网关(gateway),由它来决定并记录。这正是“一个能够使用你的工具的智能体”与“一个你可以放心让它接近这些工具的智能体”之间的区别。
更多内容见 copilotkit.ai/openbot。
构建于 AG-UI 之上#
Bot 是任何使用 AG-UI 通信的端点,AG-UI 是用于智能体与用户交互的开放协议,因此 OpenBot 不绑定于某个框架,你也不被绑定。用 LangGraph、Mastra、CrewAI、Pydantic AI、Google ADK 构建的智能体,或者手写而成的智能体,都以同样的方式接入,治理(governance)依附于协议而不是框架。
要求#
Docker,用于 PostgreSQL 和随附的 Bot。
Bun 1.4+,用于应用、API 服务器和测试(部分测试在 1.3 上会失败)。
一个 CopilotKit Intelligence 项目和许可证(license)。有免费计划可用,Intelligence 也可以自托管。
一个模型密钥。概念验证(proof-of-concept)Bot 使用 OpenAI;LangGraph Bot 可以使用 OpenAI、Anthropic 或 Google。
快速开始#
要用 AI 助手来完成设置?先把 prompt.txt 粘贴给它。它包含与下面相同的步骤,外加那些容易出错的地方:.env.example 中哪些空白键实际上需要你来填写(CopilotKit 密钥和一个模型密钥),哪些由启动脚本为你填写,以及每一种启动拒绝意味着什么。其中的每一项说法都对照过这个仓库。
创建 .env:
cp .env.example .env
bun install
连接一个全新的托管 Intelligence 项目:
npx --yes copilotkit@latest login
npx --yes copilotkit@latest project select
bun scripts/setup-learning.ts
这个辅助脚本(helper)会为所选项目配置运行时密钥(runtime key),创建或复用它已有的 openbot Learning 容器(container),然后把这些设置写入 .env。它会保留自定义的容器分配,并且绝不会替换已有的 OpenBot 密钥;如果已经设置了一个密钥,它只会在该密钥所属项目中缺少 openbot 时创建 openbot。对于全新的自托管设置,把 INTELLIGENCE_API_URL 设为该部署的 HTTPS API 源(本地部署则为 http://localhost),然后在不带两条 npx 命令的情况下运行该辅助脚本。它会打开一个隔离的 Chrome 或 Edge 窗口,用于你平常的登录和项目选择;请先安装其中任意一个浏览器。对于由 CLI 管理的本地评估安装,它会用最新安装或缓存的 CopilotKit CLI 发现匹配的仪表盘(dashboard),并使用该仪表盘进行登录和会话请求。发现过程使用 Bun 离线运行,不会下载 CLI,也不要求 PATH 中有 npx。如果没有可用的 CLI,手动托管的部署会使用其 API 源进行登录。在出现提示时,完成浏览器中显示的本地认证批准。运行时 API URL 保持不变。它会写入 API URL、密钥和容器,而不写入 INTELLIGENCE_GATEWAY_WS_URL,因此请自行把该项设置为同一个部署。一旦 openbot 存在,服务器会自行将其指定为默认值,除非 Admin → Automatic Learning 中保存了设置。托管 Intelligence 不需要单独的许可证令牌(licence token)。
填写其余必需的值:
OPENAI_API_KEY
除非你自己运行 Intelligence,否则保留 .env.example 中的托管 Intelligence URL。示例 KEY_ENCRYPTION_KEY 是公开的,在本地使用没问题;用以下命令生成你自己的密钥:
openssl rand -base64 32
运行:
bash scripts/start.sh
scripts/start.sh 会启动 Docker 服务、应用数据库迁移、在 3001 端口启动 API 服务器、启动例程工作进程(routine worker)、在 3010 端口启动应用,并在打印后续步骤之前检查各服务是否响应各自的健康检查路由。
scripts/stop.sh 会关闭同样的这些东西,包括每个 Bot 的计算机,而 compose 并不管理这些计算机;--keep-computers 会让这些计算机继续运行。不会删除任何东西:数据库、Bot 的文件及其浏览器配置文件都是卷(volume)。
在自己的机器上运行 Intelligence#
要在单台 Mac 上试用 Intelligence 而不是使用托管服务,请遵循 Evaluate Intelligence locally。免费的 Developer 计划符合条件。本地许可证持续 30 天,只要你的账户状态良好,npx copilotkit@latest local renew 可以按需随时续期。它是面向 macOS 搭配 Docker Desktop 的预览版,不是生产安装。在 OpenBot 根目录(.env 所在处)运行它的 npx copilotkit@latest local connect。
该命令会把 INTELLIGENCE_API_URL、INTELLIGENCE_GATEWAY_WS_URL 和 CPK_INTELLIGENCE_API_KEY 写入 .env。OpenBot 直接读取这些设置;不需要复制或重命名密钥。较旧的配置仍然支持 INTELLIGENCE_API_KEY。当两者都设置时,非空的 CLI 密钥优先,以便重新连接时使用新项目的密钥。
要在这套技术栈上为 Bot 提供一个 Learning 容器,请参阅 Automatic Learning。
部署它#
一个镜像承载应用、API、Bot 所驱动的浏览器,以及可选的 PostgreSQL。使用相同的 .env,无需 Kubernetes。
# The published image. Nothing to clone and nothing to build.
docker run -p 3001:3001 --env-file .env \
-e EMBEDDED_POSTGRES=on -v openbot-data:/var/lib/postgresql \
ghcr.io/copilotkit/openbot:latest
# Or the tree you have in front of you.
docker build -t openbot .
docker run -p 3001:3001 --env-file .env \
-e EMBEDDED_POSTGRES=on -v openbot-data:/var/lib/postgresql openbot
在这里,所有内容(包括应用)都在 3001 上,而不是克隆版本使用的 3010。latest 是最新的发布版本,像 :v0.0.9 这样的版本标签会固定到某一个版本。
不要开启 EMBEDDED_POSTGRES,并设置 DATABASE_URL 指向你已经在运行的数据库。docs/deployment.md 包含最低规格、平台说明,以及它在多个副本后面运行时的行为。
试一试#
打开 /bot 并提问:Open news.ycombinator.com and tell me the top story.
让 Bot 填写 https://httpbin.org/forms/post,然后检查 /admin/audit。
打开 /admin/boundaries,添加一条拒绝规则或预设,然后重试同一个浏览器操作。
从 /bots 创建一个 Bot,赋予它一个常设角色,并与它开启一个频道。
主要界面#
| 路由 | 用途 |
|---|---|
/ | 开始并浏览频道。 |
/channel/new | 开始一段对话;在 To: 中放入两个或更多 Bot 会开启一个群组。 |
/channel/:id | 与一位同事对话,观看它的屏幕,并查看它运行了什么。 |
/bot | 与一个 Bot 直接聊天;?agent=<id> 用于选择一个。 |
/bots | 你可以访问的每一个 Bot;创建一个,并打开其页面进行修改。 |
/bots/:id | 单个 Bot:它在等你做什么、它正在做什么,以及它是如何设置的。 |
/bots/:id/responsibilities | 给 Bot 一个长期目标,跟踪其进展,并决定它应该何时工作。 |
/bots/:id/reach | 在 Slack、Microsoft Teams 或通过短信继续与该 Bot 的对话。 |
/bots/:id/memory | 哪些已连接的应用为 Bot 提供事实,以及它的背景研究。 |
/bots/:id/approvals | Bot 在无需先询问你的情况下可以做什么。 |
/connections | 连接你的应用,以便你的 Bot 能与它们协作。 |
/capabilities/skills | 创建并启用个人技能。 |
/capabilities/memory | 你的 Bot 关于你记住了什么,以及你告诉它们的事实。 |
/routines | 查看常设的例程,并停止其中一个。 |
/settings | 用户偏好。 |
/settings/passwords | 你在让 Bot 登录网站时保存的登录信息。 |
/settings/notifications | 更新发送到哪里、你的设备,以及最近的投递。 |
/settings/approvals | 你的 Bot 是否在行动前询问,以及针对每个 Bot 的规则。 |
/admin/credentials | 存储只写加密凭据。 |
/admin/approvals | 团队审批设置、团队规则,以及共享账户请求。 |
/admin/computers | 查看、停止和重置 Bot 计算机。 |
/admin/boundaries | 配置浏览器/文件/MCP 操作策略。 |
/admin/components | 发布组件并治理哪些 Bot 可以使用它们。 |
/admin/playground | 在浏览器中起草并发布沙箱化组件。 |
/admin/plugins | 配置 MCP 服务器并将它们的工具授予 Bot。 |
/admin/skills | 编写部署技能并将它们授予 Bot。 |
/admin/learning | 为 Bot 分配 Learning 容器,或暂停 Automatic Learning。 |
/admin/people | 列出、提升、降级和移除已登录的人员。 |
/admin/identity-providers | 注册公司 SAML 或 OIDC 提供方,按电子邮件域名路由。 |
/admin/enterprise | 成员可以使用什么、Bot 计算机如何访问网络,以及关于这些记录了什么。 |
/admin/audit | 审查被允许、被拒绝和失败的操作。 |
功能#
- 每人一台计算机:supervisor 为每个人提供自己的容器,并为其每个 Bot 提供一个文件夹和浏览器配置文件。在 Bot 上勾选 Isolated 可以给它一个自己的容器。设置 COMPUTER_RUNTIME=runsc,在主机支持的情况下于 gVisor 下运行它们。
- 一个 shell,而不仅仅是浏览器:Bot 可以在其工作区中运行命令、安装它需要的东西,并处理它保存的文件。这一切都经过与其他所有操作相同的闸门,因此规则可以直接拒绝 shell,或拒绝特定命令,而无论哪种情况命令都会被记录在案。该命令会继承 PATH、locale、终端和代理变量,但不会继承部署环境的其余部分。
- 网关是唯一的入口:它从服务器持有的快照中解析目标、评估策略(policy)、写入审计(audit)记录,然后才调用计算机。不存在任何在记录先存在之前就采取行动的路径。
- CEL 策略,失败即关闭(fail closed):规则可以检查 tool.name、intent、bot.id、actor.id、page.url、page.host、element.、key、command、file.、mcp. 和 initiator.(即是什么启动了这次运行,因此规则可以拒绝一个计划例程,而同样的操作它可能会允许一个人执行)。拒绝(deny)先于允许(allow)被评估,缺失策略不允许任何操作,损坏的规则会拒绝而不是放行。
- 观察它在做什么:屏幕显示 Bot 正在看什么,旁边的 Activity 标签显示它运行、读取和保存了什么,并附有输出。转录记录中的命令行会展开显示同样的内容。保存的文件会显示其路径和大小,绝不显示其内容。
- 接管方向盘:遇到登录墙或 2FA 提示的 Bot 会请求帮助。控制权在同一个面板中移交,并记录为 computer.help_requested、computer.control_taken 和 computer.control_released。当有人在驾驶时,Bot 的操作会被拒绝,而不是排队。
- 机密信息绝不会进入转录记录:轨迹会记录曾请求某个机密以及它的长度,而不是它说了什么。
- 自带智能体:任何 AG-UI 端点都是一个 Bot,无论是基于框架还是手写。端点会用与浏览器导航相同的目标检查进行验证,认证头(auth header)以只写方式存储。
- 用组件代替文字:编译后的 React 组件位于 app/src/components/gallery/,沙箱化(sandboxed)组件在 /admin/playground 中编写,并无需部署即可发布。每次调用都会向服务器询问该组件是否存在、是否已发布,以及是否未被对该 Bot 保留。数据函数按组件授予。
- 受治理的 MCP:Google Drive、Notion 以及公共网络研究提供方 Parallel、Exa 和 Firecrawl 随目录一同提供,Composio 则在一个账户背后代理数百个更多应用,每个都以提问者本人的身份访问。目录只收录本次部署愿意背书的供应商,因此添加一个供应商就是对那个供应商的审查。自定义服务器必须通过 URL 检查;未知工具和自定义服务器工具会被视为写操作,而服务器声明但未标明为写操作的目录工具会被归类为读操作。Bot 会被告知这里存在哪些连接器以及它持有哪些连接器,因此它会说它没有被授予某个连接器,而不是去浏览供应商的网站。
- 技能是指令,而不是能力:个人技能只附加到其作者拥有的 Bot 上,部署技能归管理员所有,两者都在编辑器中用 / 调用。被授予随附 skill-creator 技能的 Bot 可以在对话中与你一起编写一个技能,并且只有当你按下卡片上的按钮时才会保存它。
- 用你公司已有的身份登录:来自环境变量的 Google、Microsoft 或 Okta,或者在部署运行期间注册、按电子邮件域名路由的公司自有 SAML 或 OpenID Connect 提供方。任意一个都会开启登录;可以同时配置多个。
- 决定谁可以进入:/admin/people 列出所有已登录过的人,提升或降级他们,并移除访问权限,这会结束他们正在使用的会话并阻止下一次登录。每一项更改都会记录在审计轨迹中。
- 一条你可以阅读的审计轨迹:/admin/audit 列出被允许、被拒绝和失败的操作,每一次拒绝都会附带导致它的规则。
- 凭据在静态存储时加密:通过 /admin/credentials 存储,绝不通过 API 返回,并从审计事件中脱敏。
- 默认使用回环地址(loopback):计算机绑定到 127.0.0.1 并要求每个容器一个令牌,因此仅凭知道端口无法访问已登录的浏览器。supervisor 也绑定在那里,因为它持有 Docker socket,其令牌是共享机密而不是网络边界。
- 持久化线程与记忆:对话通过 CopilotKit Intelligence 在重启后仍然存在,每次部署都会给它拥有的线程打上标记。
- 例程:让 Bot 按计划做某件事,它就会做,以你的身份、在你提问的频道中运行。15 分钟的下限和最多 20 个已启用例程的上限,防止一句话安排出超过一个人本意的内容;连续十次失败会关闭例程,而不是永远消耗模型开销。需要一个 worker 进程,scripts/start.sh 会在本地启动它;参见 docs/routines.md。
自带智能体#
任何 AG-UI 端点都可以是一个 Bot。
从 /bots 创建 Bot 时需要:
- 名称、标题和角色描述;
- 私有或公开可见性;
- 可选的 AG-UI 端点;
- 可选的只写授权头。
服务器在注册时以及端点返回的每一次重定向上,都会用与浏览器导航相同的目标检查来验证智能体端点。如果没有设置自定义端点,产品创建的同事会在 MANAGED_AGENT_AG_UI_URL 已配置时使用它;未配置时则会被拒绝。
除非在 AGENT_ENDPOINT_ALLOWED_HOSTS 中列出,否则私有地址会被拒绝:
AGENT_ENDPOINT_ALLOWED_HOSTS=agents.internal,10.0.0.42:9000
单独一个主机名覆盖该主机上的任意端口;带端口的主机名会固定该端口。匹配是精确的:没有通配符,也没有后缀。写成 URL 或包含 * 的条目会阻止启动,并指出该条目。
该列表只覆盖智能体端点。浏览不受影响,持有部署自身云凭证的地址无论列出什么都拒绝,列出一个地址只是允许在那里注册智能体,而不是授予该智能体任何东西。
租户包智能体在包自己的 agents.yaml 中声明,位于 TENANT_PACKAGE_DIR 指定的目录(默认为 examples/fintech),或者各自放在该包的 agents/ 目录下的单独文件中,形式为:
- built-in,带系统提示;或
- remote-ag-ui,带端点。
参见 docs/configuration.md 和 docs/coworkers.md。
配置#
.env.example 是源模板。API 服务器在没有以下内容时拒绝启动:
- DATABASE_URL
- KEY_ENCRYPTION_KEY
- INTELLIGENCE_API_URL
- INTELLIGENCE_GATEWAY_WS_URL
- INTELLIGENCE_API_KEY
COPILOTKIT_LICENSE_TOKEN 是可选的。带有自己许可证的自托管 Intelligence 仍然可以设置它,它会被转发到运行时;托管 Intelligence 不签发许可证,启动也不再要求它。自托管 Intelligence 也需要在自己的部署上持有许可证,否则它会拒绝记忆功能;当缺少许可证时,OpenBot 会在启动时记录 intelligence-entitlement-not-ready。
值得了解的设置:
| 变量 | 用途 |
|---|---|
OPENBOT_SINGLE_USER | 将每个请求作为单个管理员放行。未配置身份提供方时为必需;.env.example 默认开启。 |
OPENAI_BASE_URL | 从别处(网关、代理)应答 OpenAI 形式的调用。 |
ANTHROPIC_BASE_URL, GOOGLE_GENERATIVE_AI_BASE_URL | 对这两个 API 同理。 |
COMPUTER_TOKEN | 每个 Bot 计算机请求都必须出示的机密。start.sh 会回退到一个固定的开发值。 |
SUPERVISOR_TOKEN | supervisor 所需的机密。start.sh 会回退到一个固定的开发值。 |
AGENT_TOOL_TOKEN | Bot 回调已授予工具时出示的机密。start.sh 会设置一个。没有它,任何 Bot 都不能调用工具。 |
COMPUTER_SUPERVISOR_URL | 给每个人一台自己的计算机,而不是一台共享计算机。 |
COMPUTER_RUNTIME | 设为 runsc 以在主机支持时于 gVisor 下运行计算机。 |
COMPUTER_SANDBOX | 在主机允许时设为 on 以启用 Chromium 自带的沙箱。 |
EMBEDDED_POSTGRES | 设为 on 以在部署容器内使用数据库。 |
AGENT_COMPUTER_POLICY | JSON 操作策略。格式错误的 JSON 会阻止服务器启动。 |
AGENT_COMPUTER_ALLOW_PRIVATE_HOSTS | 允许 Bot 访问本机自身的服务。仅限本地,在 NODE_ENV=production 下会被拒绝。 |
AGENT_ENDPOINT_ALLOWED_HOSTS | 智能体可以注册到的私有地址,逗号分隔。一个主机名,可选带端口。 |
TENANT_PACKAGE_DIR | 包含租户 YAML 的目录。默认为 ../examples/fintech。 |
DEPLOYMENT_ID | 当两个部署共享一个 Intelligence 项目时,用来命名此部署。 |
OPENBOT_SELF_HOST_BANNER | 设为 false 以隐藏提供 CopilotKit 自托管 OpenBot 帮助的横条。它在付费 Intelligence 计划上从不显示。 |
完整参考:docs/configuration.md。
架构#
| 服务 | 端口 | 用途 |
|---|---|---|
| app | 3010 | React/Vite 用户界面。 |
| server | 3001 | Hono API、CopilotKit 运行时、认证、策略、审计、插件、组件、同事和频道。 |
| agent-computer | 4100 | Chromium 加上 /workspace 和浏览器配置文件。 |
| agent-bot | 4200 | 概念验证 AG-UI Bot。 |
| agent-langgraph | 4201 | LangGraph AG-UI Bot。 |
| supervisor | 4500 host / 4300 container | 为每个人创建和管理一台计算机,并为每个 Isolated Bot 创建一台。 |
| worker | none | 通过把每次运行交给服务器来触发到期的例程。 |
| PostgreSQL with pgvector | 5432 | 产品数据、策略、审计、凭据、授权、频道和组件元数据。 |
| CopilotKit Intelligence | external | 持久化线程和记忆。 |
服务器网关是 Bot 浏览器和文件工具调用的产品/API 路径。它解析目标、评估策略、写入审计记录,然后调用 agent-computer。计算机还暴露了较低层级、受令牌保护的服务端点;请让它们保持私有,不要用它们绕过网关。
更多细节:docs/architecture.md。
登录#
.env.example 默认带有 OPENBOT_SINGLE_USER=true,即一个管理员且无需登录:这正是全新克隆无需先注册 OAuth 客户端就能进入产品的方式。删除该行,并在其他任何人能够访问部署之前配置 Google、Microsoft 或 Okta 中的任意一个。两者都没有时,它会拒绝启动,而不是把所有人都当作管理员放行。配置多个提供方后,登录界面会提供每一个选项。
无论你选哪个,这四项都是必需的:
BETTER_AUTH_URL=http://localhost:3001 # where OAuth callbacks come back to
BETTER_AUTH_SECRET= # openssl rand -base64 32
TRUSTED_ORIGINS=http://localhost:3010 # where the app is served from
INITIAL_ADMIN_EMAILS=you@example.com # comma separated
然后配置提供方。注册旁边显示的重定向 URI(redirect URI)。
# Google — http://localhost:3001/api/auth/callback/google
GOOGLE_OAUTH_CLIENT_ID=
GOOGLE_OAUTH_CLIENT_SECRET=
# Microsoft — http://localhost:3001/api/auth/callback/microsoft
MICROSOFT_OAUTH_CLIENT_ID=
MICROSOFT_OAUTH_CLIENT_SECRET=
MICROSOFT_OAUTH_TENANT_ID=common # your directory GUID for staff only
# Okta — http://localhost:3001/api/auth/callback/okta
OKTA_OAUTH_CLIENT_ID=
OKTA_OAUTH_CLIENT_SECRET=
OKTA_OAUTH_ISSUER=https://example.okta.com/oauth2/default
重启。账户、会话和角色与所有其他内容一起存储在同一个 PostgreSQL 数据库中。
公司自有的 SAML 或 OpenID Connect 提供方在部署运行期间注册,位于 Admin → Identity providers 下,并按电子邮件域名路由。OIDC 注册需要把提供方发现文档中的每一个主机都列入 TRUSTED_ORIGINS,而不仅仅是签发方(issuer)。
INITIAL_ADMIN_EMAILS 是必需的,因为正是它授予第一个管理员。此后 /admin/people 可以提升其他人,但在这里指定的地址会一直是管理员,不能在该界面中被降级或移除。每次登录都会重新读取它,因此编辑它会在该人员下次登录时生效。
MICROSOFT_OAUTH_TENANT_ID 默认为 common,这会同时放行个人 Microsoft 账户和工作账户。在多租户应用注册中,Entra 可能根本不发送 email 声明(claim),因此 OpenBot 会回退到 upn,再回退到 preferred_username。如果三者都没有到达,登录会被拒绝并记录原因:将 email 添加为可选声明,或者在此处使用你的目录 GUID。
配置不完整的提供方会在启动时被拒绝,而不是在某人第一次尝试登录时:有客户端 ID 却没有密钥、BETTER_AUTH_SECRET 短于 32 个字符,或者 Okta 签发方背后没有凭据。
SAML 和 OIDC 是在部署运行期间注册的,而不是在这里配置。以管理员身份登录,带着你的身份团队提供的元数据前往 Admin → Identity providers。之后人们通过输入电子邮件地址来登录,域名决定他们被送到哪个提供方。
在任何部署前面放置 TLS。通过纯 http:// 在除 localhost 以外的任何地址上提供的页面都不是安全上下文,而登录 cookie 需要 Secure 标志。
桌面安装的组织登录#
对于员工桌面,使用上面的 Google、Microsoft 或 Okta 设置来配置一个 OpenBot 权威(authority)(你的 Kubernetes OpenBot 可以充当此角色)。在桌面连接界面中设置 Organization OpenBot URL,或在其公开配置中设置 OPENBOT_ORGANIZATION_AUTH_URL=https://openbot.company.example。使用 HTTPS 源;HTTP 仅在回环地址上为本地测试所接受。提供方的客户端密钥留在该权威上。模板和白标(white-label)部署可以提供相同的设置,而无需更改其 Intelligence 端点。
这个可选 URL 与 INTELLIGENCE_API_URL、INTELLIGENCE_GATEWAY_WS_URL 和 INTELLIGENCE_API_KEY 是分开的。本地、托管和客户自托管的 Intelligence 都保留各自的项目凭据。Google ID 令牌不是 Intelligence 项目密钥。对于独立桌面,请将组织 URL 留空。
桌面登录使用系统浏览器和 Better Auth 的一次性 PKCE 交换。权威会验证员工和当前角色;组织模式绝不会用 dev@openbot.local 代替。员工不需要项目密钥管理权限。安装只发生一次:重新打开或刷新已过期的组织、Intelligence 或模型连接会保留已安装的运行时和数据,并打开相关的连接界面。
保持在你的机器内#
agent-computer 驱动着一个持有真实登录状态的浏览器。docker-compose.yml 将它绑定到回环地址;请保持这样。
通过 /admin/credentials 存储凭据,它会加密这些凭据。不要把凭据值放入租户 YAML 或已提交的文件中。
AGENT_COMPUTER_ALLOW_PRIVATE_HOSTS 允许 Bot 访问本机上的服务。它在 .env.example 中以注释形式提供,仅适用于笔记本电脑,而使用 NODE_ENV=production 运行的部署在设置它时会拒绝启动。
要从部署访问你自己网络上的智能体,请改为在 AGENT_ENDPOINT_ALLOWED_HOSTS 中列出其地址。那允许这一个地址,而上面的开关允许整个网络。
开发#
bun run format:check
bun run lint
bun run typecheck
bun run test
bun run build
更改 Drizzle schema 之后:
bun run --filter server db:generate
bun run --filter server db:migrate
使用 bash scripts/start.sh 启动整个技术栈,使用 bash scripts/stop.sh 将其关闭。只有在你想要应用和服务器而不需要 Docker Bot 和计算机时,才使用 bun run dev。
文档#
- copilotkit.ai/openbot
- docs/README.md
- docs/architecture.md
- docs/configuration.md
- docs/development.md
- docs/coworkers.md
- docs/routines.md
- docs/automatic-learning.md
- docs/deployment.md
- charts/openbot/README.md:Helm chart
- docs/releasing.md
- docs/web-research.md:通过 Parallel、Exa 或 Firecrawl 进行公共网络搜索和提取
贡献#
在开始实质性工作之前,先开一个 issue 或进行协调。
让更改保持聚焦,并在设置、配置、架构或用户行为发生变化时更新文档。
不要把机密、服务账户 JSON、客户数据和本地转录记录留在仓库中。
在打开 pull request 之前,运行 Development 中的检查。
许可证#
MIT © CopilotKit
关于#
开源 AI 同事,每个都拥有自己的计算机:一个浏览器、文件和工具,每一项操作都在发生之前被决定,在发生之后被记录。带上任何 AG-UI 智能体。
www.copilotkit.ai/openbot
主题(Topics):
- ag-ui
- agent-governance
- ai-agents
- browser-automation
- copilotkit
- generative-ui
- mcp
资源#
- 自述文件(Readme)
- MIT 许可证
- 动态(Activity)
- 自定义属性
- 星标:8.5k stars
- 关注:33 watching
- 复刻:1.1k forks
- 报告仓库
- 发布(Releases)
- 软件包(Packages)
- 贡献者(Contributors)
- 语言(Languages)