OpenAI 在 DevDay 上发布常驻智能体 Dots 之后两天,CopilotKit 开源了它的复刻模板 OpenDots(MIT 许可):一个"每个 Agent 拥有一台自己的电脑"的常驻 AI 同事工作台,能在文本、语音通话与 Slack 之间移动。它明确自称"模板而非托管产品"——你把应用跑起来、配置基础设施。本篇按官方 README 从本地起服务走到给 Dot 配独立电脑,每一步都有官方出处,不编造配置项。
Step 1:认识 OpenDots:模板,不是托管产品
官方 README 对 OpenDots 的定义很清晰:一个面向持久化 AI Agent 的开源模板,每个 Agent 拥有自己的电脑,支持 Web 与移动端;完全可自托管,克隆、定义你的 Dots、连接服务、按需改造界面与工具。它不是开箱即用的 SaaS——README 特别强调"未配置的模板不会在你的主机上执行命令",这也是它的安全边界起点。
技术栈值得认识一遍:CopilotKit 与 AG-UI 承担界面与流式协议(AG-UI 在后端与前端组件之间搬运消息、工具调用与 Agent 状态);TanStack AI 负责模型流式与服务端工具执行;模型侧接任意 OpenAI 兼容 provider;每个 Dot 的"电脑"由 OpenBot 的容器监督与 computer 服务提供;Slack 走 Channels SDK 托管连接;语音走 WebRTC。
README 的验证状态栏明确写着:Slack 与语音计算委托"仍需连接服务验证"——Live Intelligence、模型响应与页面上下文聊天已于 2026 年 9 月 29 日验证,OpenBot 计算机与实时语音在本地验证过。生产启用这两项前先自测。
Step 2:本地跑起来:四条命令进入工作台
环境要求 Node.js 24 与 npm(注意比一般 Node 项目新,本机装着 Node 22 的要先升级或用 nvm 切换)。先确认版本,再走官方给出的启动路径:
node --version # 需要 v24.x,低了先升级或用 nvm 切换
git clone https://github.com/CopilotKit/OpenDots.git
cd OpenDots
npm ci
cp .env.example .env
npm run dev
# 打开 http://127.0.0.1:5173
服务起来之后,即使还没连接任何外部服务,你也可以先创建 Spaces、写页面、配置 Dots——README 原话是"先搭工作台,再接服务"。仓库同时提供 Dockerfile 与 compose.yml、compose.computers.yml 等编排文件,容器化部署路径在 docs/SETUP.md。
npm ci 严格按 lockfile 安装,比 npm install 更可复现;升级模板时拉新代码后重新跑 npm ci,不要增量装包。
Step 3:配置模型与对话:一切从 .env 开始
把对话与模型设置写进 .env(上一步已从 .env.example 复制)。README 说明你需要配置 Intelligence 项目、模型 provider 与渠道连接,通话还需额外配置语音 provider。模型侧用任意 OpenAI 兼容 provider,典型配置形如(变量名以仓库 .env.example 为准,不要照抄旧教程):
# 以 .env.example 内注释为准,以下为 OpenAI 兼容 provider 的典型形态
OPENAI_API_KEY=你的密钥
OPENAI_BASE_URL=https://api.example.com/v1
# Intelligence 项目连接按 .env.example 中的说明填写
配置缺失时应用会显示清晰的 setup 状态而不是报错崩溃——先在界面里确认设置页全部变绿,再进入下一步。
官方明确:凭据保留在服务端(credentials stay on the server),并为每个 Dot 派生不同的 computer 凭据。不要把模型 Key 下发到浏览器端环境变量,也不要把 .env 提交进仓库。
Step 4:创建 Spaces 与 Specialist Dots:给每个同事立规矩
Spaces 是工作文档空间:可搜索的库、可视化编辑器、斜杠命令、自动保存与修订检查,是 Dot 们读写的工作面。Specialist Dot 是常驻智能体本体,每个 Dot 可设置名称、角色、指令与允许的工具;权限按 Dot 粒度细分——browser、file、shell 三类权限各自独立开关。建议按"最小权限"建 Dot:查资料的 Dot 只开 browser,写周报的 Dot 开 file,需要跑脚本的才开 shell。
信任机制是这个模板的亮点:Dot 产出在保存前会弹出 CopilotKit 的人工审核卡片(human-in-the-loop),你可以选择 Approve & save 或 Decline。把审核卡在"写入 Spaces"这一步,而不是"生成"那一步,既保留自动化速度又守住质量关口。
给每个 Dot 的指令里写清输出结构与边界(例如"只写入指定 Space、引用需附来源"),指令会随 Dot 角色长期生效,是成本最低的质量护栏。
Step 5:给 Dot 配一台独立电脑(可选进阶)
每个 Dot 可以拥有自己的电脑:由 OpenBot 的容器监督与 computer 服务提供,浏览器配置与工作区文件跨停止/启动持久保存。Computer 面板提供浏览器控制、人工接管、文件、终端输出与活动记录——出问题时可以随时人工接管。设置入口在 docs/COMPUTERS.md,官方表述是"构建锁定的服务并连接你的部署",仓库里的 compose.computers.yml 与 compose.computers-app.yml 就是为此准备:
# 仓库内的编排文件(具体构建与连接步骤以 docs/COMPUTERS.md 为准)
# compose.yml 应用本体
# compose.computers.yml Dot 电脑服务
# compose.computers-app.yml
# Dockerfile
数据流向也要心里有数:页面、应用元数据与后台任务状态分开存储,对话历史独立持久化;每个 Dot 的浏览器配置与文件在容器重启后仍在,适合需要登录态或长期记忆工作区的场景。
computer 服务启用后,对应 Dot 就真正拥有了你配置的 shell 与浏览器权限。给 shell 权限前想清楚容器隔离边界:Dot 电脑跑在容器里,权限不要放大到宿主机目录。
Step 6:接 Slack 与语音:把同事拉进沟通渠道
Slack 通过 Channels SDK 的托管连接接入,配置明确的 workspace/user 白名单并指定响应的 Specialist Dot,之后在会话线程里 @Dot 即可派活。语音走 WebRTC 实时通话,通话期间 Dot 的长任务可以继续在后台跑,另外需要单独配置语音 provider。网页研究默认使用 Parallel 搜索,可发现并阅读最多五个来源:
# 网页研究三种模式(写入 .env,变量名以 .env.example 为准)
# 默认:Parallel 搜索
WEB_SEARCH_PROVIDER=browser # 改为仅限 URL 的浏览器阅读器
WEB_SEARCH_PROVIDER=disabled # 彻底关闭研究工具
# 生产或更高限额:在服务端设置 PARALLEL_API_KEY
数据流向红线:使用默认 Parallel 搜索时,查询词、请求的 URL、稳定会话标识与研究目标会发送到 search.parallel.ai/mcp——记忆与完整对话不会自动转发,但涉密环境的合规评估要把这一条算进去。
Slack 白名单宁小勿大:先只加你自己的 workspace 与账号跑一周,确认 Dot 行为符合预期后再扩大范围。README 同样提示:日程是循环指令,不是完整的 goal/事件触发系统,别把它当调度引擎用。