第 2 课

浏览器 worker 与第一次浏览任务

配置 WORKER_TOKEN 与 8790,安装 Chromium,启动浏览器 worker,并在 Chat 试一次公开页浏览。

图文22 分钟

课程目录第 2 / 2 课

学习位置仅保存在当前浏览器,有效期 180 天。

01 / 图文教材

浏览器 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 开关名)。

五、第一次浏览任务(跟做)

确认三个进程都在:

进程命令端口
APIpnpm dev8787
Webpnpm dev:web8081
Browser workerpnpm dev:browser8790

在 http://localhost:8081 的 Chat 中,按 README「Try it」发送其一:

  • Check out Hacker News for cool stuff
  • 或 Summarize copilotkit.ai

对照结果(有模型时):

  1. 任务/聊天区出现进行中的计划或工具进度。
  2. 内联展示浏览器相关结果(截图、摘要或链接卡片,视当前 Alpha UI)。
  3. 需要人工接管时,使用界面上的 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/403WORKER_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 开发栈。

官方原文入口: