Computers
Computer 是 Bot 工作的机器。Bot 在上面运行 shell 命令、读写文件、打开端口和使用桌面。Computer 有两种:
- Computer 提供方(例如 E2B 或 Daytona)那里的一个沙箱。你使用自己在提供方那里的账户。提供方直接向你收费。
- 你自己的机器,例如笔记本电脑或服务器。你只需要把它和 OpenBot 配对一次。之后,机器上的一个小程序会保持与 OpenBot 的连接。
Computer 属于一个成员或属于组织,和触发器一样。Bot 从不拥有 Computer。Bot 得到的是一台 Computer 的使用权。很多 Bot 可以使用同一台 Computer。
添加 Computer 提供方
Section titled “添加 Computer 提供方”Computer 提供方是你在一个运行沙箱的服务上的账户。
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 在使用某个提供方时,你不能删除它。
创建和使用 Computer
Section titled “创建和使用 Computer”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 和它的沙箱。它的文件也会消失。
配对你自己的机器
Section titled “配对你自己的机器”先安装命令行工具,然后配对这台机器:
npm install -g @openbot-build/cli @openbot-build/computeropenbot computer pair --url https://api.example.com命令会显示一个代码,例如 KDTW-7Q3M。它在 10 分钟内有效。检查这台机器,然后批准它:
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 中,然后结束。接着连接这台机器:
openbot computer connect它保持一个到 OpenBot 的连接,所以机器不需要打开端口。连接断开后,它会自己重新连接。openbot computer status 显示保存的地址和机器 ID。
同一台机器在同一个组织中再次配对时,它会保留自己的 Computer,并得到一个新令牌。对于服务器和脚本,用 "source":{"_tag":"Connector"} 创建一台 Computer,然后用 PUT /v1/computers/:computerId/connector-token 创建一个令牌。新令牌会关闭旧的连接。
Bot 和 Computer 的使用权
Section titled “Bot 和 Computer 的使用权”给你的 Bot 一台 Computer 的使用权:
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。