第 2 课
浏览器 worker 与第一次浏览任务
配置 WORKER_TOKEN 与 8790,安装 Chromium,启动浏览器 worker,并在 Chat 试一次公开页浏览。
学习位置仅保存在当前浏览器,有效期 180 天。
浏览器 worker 与第一次浏览任务
浏览器 worker 与第一次浏览任务
本课接上一课已运行的 API+Web,按官方 README「Browser worker」与 apps/worker/README.md 配置私有 Playwright 服务,再在 Chat 里试一次公开页浏览。
主要来源:OpenMuse README · Worker README
你将得到什么
- 本机 loopback 上的浏览器 worker:
http://127.0.0.1:8790 - API 与 worker 共享同一
WORKER_TOKEN - 一次「读公开网页 / 看内联浏览器结果」的跟做路径(需已配置模型时效果最完整)
- 对 Take control 与安全边界(仅公网 80/443、禁私网)的正确预期
课前状态检查
上一课应已满足:
curl -sS -o /dev/null -w "%{http_code}\n" http://localhost:8787/api/health
# 期望 200(或你环境中等价的成功码)
Web 仍可打开 http://localhost:8081。若 API 已停,先在仓库根目录重新 pnpm dev。
一、为什么要单独的 browser worker
OpenMuse 把「能被 agent 操作的 Chromium」做成 独立 Node/Playwright 服务:
- 服务端持有
WORKER_TOKEN,浏览器端 永远不应拿到该 token - 默认只允许公网 HTTP(S) 的 80/443;私网/保留地址会被拒绝(防 SSRF / DNS rebinding)
- 会话可持久化 profile;应用可打开实时截图控制台并导入 PDF 下载
没有 worker 时:聊天、草稿、任务仍可跑;读页、截图、Take control 不可用(与 Render 部署说明一致)。
二、写入 worker 相关环境变量
在仓库根目录编辑 .env(与官方 README 一致):
BROWSER_WORKER_URL=http://127.0.0.1:8790
WORKER_TOKEN=YOUR_WORKER_TOKEN
生成至少 32 字符的随机 token(示例):
openssl rand -base64 48
把输出整段粘进 WORKER_TOKEN=(API 与 worker 必须相同)。
对照结果:
.env中两键均已填写。- Token 未提交到 Git、未写入前端
EXPO_PUBLIC_*之类客户端可见变量。
改完 .env 后 重启 终端 A 的 pnpm dev,让 API 读到新值。
三、安装 Chromium 并启动 worker
在仓库根目录(官方 Local development):
pnpm --dir apps/worker exec playwright install chromium
pnpm dev:browser
对照结果:
- Playwright Chromium 安装命令成功结束。
pnpm dev:browser保持前台运行;日志显示监听 127.0.0.1:8790(官方:本机绑定 loopback;Compose 场景另说)。- 可用(示例)探测健康端点——worker README 写明 除
GET /health外均需 Bearer token:
curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8790/health
期望:成功的 HTTP 状态(常见为 200)。若连接被拒,说明 worker 进程未起来或端口不对。
安全对照: 不要把
8790暴露到公网;不要把WORKER_TOKEN发给浏览器或手机客户端。
(可选)用 Compose 起 worker
README 亦允许:
docker compose --env-file .env -f infra/compose.yaml up --build -d
本课默认 本机 pnpm dev:browser,减少一层 Docker 变量。若走 Compose,确认宿主机映射仍是 loopback,且 token 与 API 一致。
四、配置模型(浏览类任务强烈建议)
公开页摘要 /「去 Hacker News 找有趣内容」等需要 AGENT_BACKEND=model 与对应提供商密钥。示例(OpenAI,模型 ID 以你账号与文档为准):
AGENT_BACKEND=model
MODEL=openai/gpt-5
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
保存后再次重启 pnpm dev。
对照结果: Chat 发简单问题不再立刻因「无模型」失败。若你暂时没有云 Key,可阅读官方 DEMO.md 中的 AI Mock demo 路径做「无模型」浏览演示(步骤以该文档为准,本课不复制可能过期的 mock 开关名)。
五、第一次浏览任务(跟做)
确认三个进程都在:
| 进程 | 命令 | 端口 |
|---|---|---|
| API | pnpm dev | 8787 |
| Web | pnpm dev:web | 8081 |
| Browser worker | pnpm dev:browser | 8790 |
在 http://localhost:8081 的 Chat 中,按 README「Try it」发送其一:
- Check out Hacker News for cool stuff
- 或 Summarize copilotkit.ai
对照结果(有模型时):
- 任务/聊天区出现进行中的计划或工具进度。
- 内联展示浏览器相关结果(截图、摘要或链接卡片,视当前 Alpha UI)。
- 需要人工接管时,使用界面上的 Take control,打开的是 同一 Chromium 会话(官方 Demo 文案)。
对照结果(无模型 / mock): 按 DEMO.md 的 mock 步骤应仍能看到脚本化浏览 UI;若两者皆无,至少应用 curl 已证明 worker /health 与 API health 正常——把「缺模型」记为环境缺口,而不是安装失败。
官方还建议的无外网副作用练习
上一课提过的 Complete the permission slip 仍可重复:只写本地 mailbox,适合验证任务 UI 与 PDF 流水线是否健康。
六、边界与排错
| 现象 | 处理 |
|---|---|
Agent 无法打开内网 http://192.168.x.x | 预期行为:worker 拒绝私网目标 |
| API 报 worker 401/403 | WORKER_TOKEN 两端不一致;或请求未带 Bearer |
| Take control 空白 | worker 未起;或 BROWSER_WORKER_URL 写成了非 loopback / 错端口 |
| 模型调用失败 | 检查 MODEL 前缀与 Key 是否成对;密钥仅放服务端 |
| 8790 被占用 | lsof -i :8790;结束旧 worker 或改配置(改端口须 API/worker 同步) |
可选延伸(非本课必做)
Linux 终端 / Files:需 docker build -t openmuse-computer:local apps/computer 且 COMPUTER_ENABLED=true,见 docs/COMPUTER.md。与浏览器 worker 独立。
本课小结
你已经把私有浏览器 worker 接到 OpenMuse:共享 token、loopback 8790、健康检查通过,并走通官方推荐的浏览试句或 mock 路径。生产部署请改用 HTTPS、限制网络,并阅读仓库 SECURITY.md / VERIFICATION.md——本课止于本机 Alpha 开发栈。
官方原文入口:
