
最近折腾了用大模型控制远程计算机这事儿,踩了几个坑,这篇把问题说清楚。
去年 OpenAI 给 ChatGPT 上线了 Agent 功能,可以自己操作浏览器和终端。底层逻辑其实挺清晰的:给 Agent 一台独立云电脑、用户能实时观看还能随时接管、高风险操作必须确认。这套模式现在可以用 OpenAI Responses API 配合第三方云电脑服务复现出来,下面细说。
OpenAI 在 2025 年 7 月 17 日开始向 Pro、Plus 和 Team 用户推送 ChatGPT Agent。它把 Operator 的网页点击能力和深度研究能力整合到一起,还加入了终端操作。
它的计算机使用方式是这样的:
2026 年 9 月 29 日,OpenAI 又上线了 Dots 功能:面向 Pro 和 Business Premium 用户的常驻 Agent。每个 Dot 都有自己的云电脑,用户可以随时查看它的操作状态。用户可以设定规则,决定 Dot 能自主完成什么、什么需要自己审批。
说白了就是三件事:给每个用户分配一台独立机器、让用户能看能接管、在 Agent 执行流程里加上审批环节。
密码永远不过模型——登录操作由用户自己在屏幕上完成。高风险步骤必须用户明确确认。要把这个模式做进产品里,你需要:每用户一台机器、用户能观能管的界面、Agent 执行链路上的审批节点。
Burrowbox 和 OpenAI 没有合作关系,只是它提供的云电脑自带 MCP(模型上下文协议)端点,而 OpenAI Responses API 能直接调用远程 MCP 服务器,所以模型可以直接驱动机器,你这边不需要额外部署 MCP 客户端。
curl -X POST https://burrowbox.dev/api/machines \ -H "Authorization: Bearer $BURROWBOX_KEY" -H "Content-Type: application/json" \ -d '{"name": "sam", "size": "tiny", "externalId": "user_42", "ttlMinutes": 60}'
# → { "id": "2f6aeedcd3", "mcpUrl": "https://burrowbox.dev/api/machines/2f6aeedcd3/mcp", "mcpToken": "tmm_…", … } 读操作(截图、快照)直接执行,不需要问。其他操作(点击、表单填写、终端命令)统一走审批流程。
import OpenAI from "openai";
const openai = new OpenAI(); const machineTool = { type: "mcp", server_label: "burrowbox", server_url: process.env.MCP_URL, // the machine's mcpUrl authorization: process.env.MCP_TOKEN, // the machine's mcpToken require_approval: { never: { tool_names: ["browser_navigate", "browser_snapshot", "browser_screenshot", "screenshot"] } },
}; let resp = await openai.responses.create({ model: "gpt-6-astra", tools: [machineTool], input: "Find a table for two on Friday at 7pm on example-bookings.com and get it ready to confirm.",
}); for (const item of resp.output.filter((o) => o.type === "mcp_approval_request")) { const ok = await askUser(`Allow ${item.name}(${item.arguments})?`); // your UI resp = await openai.responses.create({ model: "gpt-6-astra", tools: [machineTool], previous_response_id: resp.id, input: [{ type: "mcp_approval_response", approve: ok, approval_request_id: item.id }], });
}
console.log(resp.output_text); 这里只处理了一轮确认。实际使用时需要循环处理,直到没有待审批的请求。
当 Agent 遇到登录页面时,创建一条交互式实时预览链接展示给用户。用户直接在机器的浏览器里输入密码,这些内容永远不会流经模型。机器停止时 Cookie 会被保留,所以通常只需要登录一次。
curl -X POST https://burrowbox.dev/api/machines/$MACHINE_ID/live-view \ -H "Authorization: Bearer $BURROWBOX_KEY" -H "Content-Type: application/json" \ -d '{"mode": "browser", "interactive": true, "ttlSeconds": 600, "allowedOrigins": ["https://app.example.com"]}'
# → { "url": "https://burrowbox.dev/embed/2f6aeedcd3?t=…", "iframe": "<iframe …>" } 如果要做观察模式,把 "interactive": false 即可。这样输入会被阻止在机器本身,而不只是页面里。如果不想走接管流程,也可以把登录凭证存进机器的 vault(密钥保管库),Agent 就能直接用 browser_login 调用,完全看不到密码。
设置 "ttlMinutes": null(调用 PATCH /api/machines/{id})可以让机器保持运行。也可以用定时任务配合 wakeIfStopped 和 stopAfter,让它只在有任务时才启动和计费。tiny 规格的机器运行费用是每小时 0.07 美元。
去注册账号就能上手试试。