跳转到内容

Computers

Computer 是 Bot 工作的机器。Bot 在上面运行 shell 命令、读写文件、打开端口和使用桌面。Computer 有两种:

  • Computer 提供方(例如 E2B 或 Daytona)那里的一个沙箱。你使用自己在提供方那里的账户。提供方直接向你收费。
  • 你自己的机器,例如笔记本电脑或服务器。你只需要把它和 OpenBot 配对一次。之后,机器上的一个小程序会保持与 OpenBot 的连接。

Computer 属于一个成员或属于组织,和触发器一样。Bot 从不拥有 Computer。Bot 得到的是一台 Computer 的使用权。很多 Bot 可以使用同一台 Computer。


Computer 提供方是你在一个运行沙箱的服务上的账户。

Terminal window
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Sandboxes","credentials":{"kind":"e2b","apiKey":"e2b_..."}}' \
https://api.example.com/v1/computer-providers
类型 字段 它是什么
e2b apiKey、apiUrl、sandboxDomain 任何使用 E2B API 的服务:E2B、PPIO、阿里云 Bot Sandbox,或你自己的 E2B。对 E2B 以外的服务,请设置 apiUrl 和 sandboxDomain。
daytona apiKey、apiUrl、target Daytona,托管的或你自己的。target 是区域,例如 us 或 eu。

OpenBot 在保存密钥之前,会先向提供方检查它。密钥永远不会再被取出。API 只显示它的最后几个字符。发送 "shared": true 可以创建组织共享的提供方。

GET /v1/computer-providers 列出你的提供方和共享的提供方。GET、PATCH 和 DELETE /v1/computer-providers/:providerId 读取、修改和删除一个提供方。还有 Computer 在使用某个提供方时,你不能删除它。


Terminal window
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Build box","source":{"_tag":"Provider","provider":"cpp_...","template":null},"desktop":true}' \
https://api.example.com/v1/computers
字段 作用
source 沙箱用 {"_tag":"Provider","provider":"<id>","template":null}。template 选择提供方的一个镜像。
desktop 可选。true 表示需要桌面,用于截图、鼠标和键盘。
pauseAfter 可选。没有工作多少秒后,OpenBot 暂停这台 Computer。默认是 600。null 表示从不暂停。
shared 可选。true 表示创建组织共享的 Computer。

Computer 有一个 state(状态):starting、running、paused、offline(你的机器没有连接)或 failed。

路由 作用
POST /v1/computers/:computerId/commands 用 bash -lc 运行一条 shell 命令,并等待它结束。
GET、PUT、DELETE /v1/computers/:computerId/files 读取、写入和删除一个文件。文本用 utf8,其他字节用 base64。
GET /v1/computers/:computerId/directory?path= 列出一个目录。
PUT /v1/computers/:computerId/ports/:port 给一个端口一个公开的 HTTPS 地址。任何有这个地址的人都能使用它。
POST /v1/computers/:computerId/desktop/screenshot 截一张图。
POST /v1/computers/:computerId/desktop/actions 点击、输入、按键和滚动,然后截一张图。
POST /v1/computers/:computerId/desktop/stream 给出一个地址,人可以在那里观看和使用桌面。
POST /v1/computers/:computerId/pause、/resume 暂停或恢复这台 Computer。

在暂停的 Computer 上运行命令时,会先恢复它。DELETE /v1/computers/:computerId 删除 Computer 和它的沙箱。它的文件也会消失。


先安装命令行工具,然后配对这台机器:

Terminal window
npm install -g @openbot-build/cli @openbot-build/computer
openbot computer pair --url https://api.example.com

命令会显示一个代码,例如 KDTW-7Q3M。它在 10 分钟内有效。检查这台机器,然后批准它:

Terminal window
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \
https://api.example.com/v1/computer-pairings/KDTW-7Q3M
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \
-H "Content-Type: application/json" -d '{}' \
https://api.example.com/v1/computer-pairings/KDTW-7Q3M/approve

只有人可以批准一台机器。POST /v1/computer-pairings/:code/deny 停止配对。你批准之后,命令把它的令牌保存在 ~/.config/openbot/computer.json 中,然后结束。接着连接这台机器:

Terminal window
openbot computer connect

它保持一个到 OpenBot 的连接,所以机器不需要打开端口。连接断开后,它会自己重新连接。openbot computer status 显示保存的地址和机器 ID。

同一台机器在同一个组织中再次配对时,它会保留自己的 Computer,并得到一个新令牌。对于服务器和脚本,用 "source":{"_tag":"Connector"} 创建一台 Computer,然后用 PUT /v1/computers/:computerId/connector-token 创建一个令牌。新令牌会关闭旧的连接。


给你的 Bot 一台 Computer 的使用权:

Terminal window
curl -X PUT -H "Authorization: Bearer $OPENBOT_TOKEN" \
https://api.example.com/v1/computers/cmp_.../bots/bot_...

你必须能使用这台 Computer,并且能修改这个 Bot。GET /v1/computers/:computerId/bots 列出有使用权的 Bot。DELETE /v1/computers/:computerId/bots/:botId 收回使用权。Bot 被归档时,使用权也会结束。Computer 会留下。

Bot 有用于 Computer 的工具。它用 openbot_computers_list 列出 Computer。然后它可以:

  • 用 openbot_computers_acquire 请求一台已有 Computer 的使用权。子 Bot 可以请求把工作交给它的那个 Bot 的 Computer。
  • 用 openbot_computers_create 创建一个新沙箱。这台 Computer 属于 Bot 的那个人,Bot 得到它的使用权。
  • 用 openbot_computers_release 放弃它的使用权。带上 destroy 时,它还会删除这台 Computer。
  • 运行命令、修改文件、打开端口和使用桌面。截图会作为图片返回,模型可以看到它。

这四个动作是能力。决策者链会决定它们,和其他能力一样:

动作 目标 Bot 何时使用
computers.acquire Computer 的 ID 请求一台 Computer 的使用权时。
computers.create 提供方的 ID 创建一个新沙箱时。
computers.delete Computer 的 ID 删除一台 Computer 和它的文件时。
computers.expose Computer 的 ID 给一个端口一个公开地址时。

在 Computer 上的其他工作都不需要决定。Computer 就是边界:有使用权的 Bot 可以在里面做任何事。


沙箱在 pauseAfter 秒内没有工作时,OpenBot 会暂停它。E2B 保留它的文件、内存和正在运行的程序。Daytona 保留它的文件,并从这些文件重新启动它。你自己的机器从不暂停。

GET /v1/computers/:computerId/usage 列出一台 Computer 运行的时间。提供方为这些时间向你收费。OpenBot 只记录它们。它不设定价格,预算也不会停止 Computer。