云手机
为你的智能体准备的云端真实 Android 14 手机。可安装任意 APK,用平实的语言让我们的手机智能体完成目标,也可以自己通过点击、输入和截图来操控手机。
云手机是一台运行在云端的 Android 14 手机,你的代码通过 API 控制它。当某个应用没有 API 时就可以用它:手机上运行的是真实的应用,智能体或你自己的代码会像人一样操作它。
使用手机有两种方式:
- 手机智能体。 用平实的语言发送一个目标,例如“打开应用,搜索 Termux,告诉我第一个结果”。智能体会读取屏幕,点击、输入和滚动,直到完成目标,然后返回
answer。 - 直接控制。 由你自己的代码或智能体截图、读取屏幕上的元素,并发送点击、滑动、输入和按键操作。
任何人都可以在浏览器中实时观看屏幕,或接管操作。
手机与 Lovely Router 的其他服务共用同一个 API 密钥和预付费余额。手机在唤醒状态下每小时 $1.20,按分钟计费。智能体使用的模型另按其正常 API 价格计费。
运行你的第一个目标#
获取 API 密钥
在 API 密钥 页面创建一个密钥并导出为环境变量。
Shellexport LOVELY_API_KEY="lr-..."在新手机上启动运行
POST /v1/phones/runs会创建一台手机,安装你列出的应用,并让智能体开始处理你的目标。响应会立即返回,状态码为202,并带有运行的id。新手机启动大约需要一分钟,如果要先安装应用,时间会更长。Shellcurl https://lovelyrouter.com/v1/phones/runs \ -H "Authorization: Bearer $LOVELY_API_KEY" \ -H "content-type: application/json" \ -d '{ "goal": "Open the F-Droid app, search for Termux, and tell me the one-line summary of the first result.", "apps": ["https://f-droid.org/F-Droid.apk"] }'等待回答
GET /v1/phones/runs/{id}?wait=50会让请求最多挂起 50 秒,运行结束或向你提问时会提前返回。重复调用,直到status变为succeeded、failed、stopped或waiting。加上trace=1可获取智能体的每一步。Shellcurl "https://lovelyrouter.com/v1/phones/runs/prun_...?wait=50&trace=1" \ -H "Authorization: Bearer $LOVELY_API_KEY"JSON{ "id": "prun_7ae48d4cb099421dbd2c", "object": "phone.run", "phone_id": "ph_2758eedebf08496f87e0", "status": "succeeded", "steps": 6, "answer": "The first result is \"Termux Hub\": \"A lightweight Android app that indexes Termux tools from metadata.\"", "llm_usd": 0.0203 }
运行结束后,手机仍归你使用。用 POST /v1/phones/{phone_id}/runs 把下一个目标发给同一台手机,或在 POST /v1/phones/runs 中传入 "phone_id"。之前运行中安装的应用和登录状态都还在。
手机的费用#
| | 价格 | | - | - | | 手机,唤醒时 | 每小时 $1.20,按分钟计费 | | 手机,休眠时 | 免费 | | 上传的 APK | 前 1 GB 免费,之后每 GB 每月 $0.30,按小时计费 | | 智能体运行 | 按模型正常的 API 价格按 token 计费(默认 gemini-3.8-flash,每步约 $0.003) |
手机闲置 5 分钟后会进入休眠,再次使用时约 2 秒即可唤醒,屏幕保持你离开时的样子。1 小时未使用的手机会被删除,其中的应用和数据也会一并删除。你也可以随时用 DELETE /v1/phones/{id} 自行删除。
启动一台手机需要余额中至少有 15 分钟的手机时长。余额用完后,运行会停止,手机进入休眠。每个账户最多同时拥有 3 台手机。
应用#
手机预装了 Chrome、设置等标准 Android 应用,以及 Google Play 服务。手机上没有 Play 商店,因此需要通过 APK 文件安装应用。任何 APK 都可以,拆分包(.apks、.xapk)也支持。.xapk 中的游戏数据(OBB 文件)也会复制到手机上。
- 手机启动时: 在创建手机或启动运行时,把应用列在
apps中。每一项是指向文件的https://链接,或你上传过的 APK 的名称。手机的startup_apps字段会显示每个应用的安装结果。 - 之后安装: 调用
POST /v1/phones/{id}/apps,请求体为{"url": "https://…"}或{"apk": "myapp.apk"}。安装完成后请求才会返回。 - 你自己的 APK: 上传一次文件,之后即可在任何手机上按名称安装。100 MB 以内,用
PUT /v1/phones/apks/{name}一次发送。500 MB 以内,用POST /v1/phones/apks/{name}/uploads分成 50 MB 的分片上传(做法)。更大的文件请自行托管,并通过 URL 安装。上传的前 1 GB 免费存储,超出部分每 GB 每月 $0.30。
# 上传一次
curl -X PUT https://lovelyrouter.com/v1/phones/apks/myapp.apk \
-H "Authorization: Bearer $LOVELY_API_KEY" \
--data-binary @myapp.apk
# 安装到手机上
curl https://lovelyrouter.com/v1/phones/ph_.../apps \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"apk": "myapp.apk"}'快速模式#
当速度比仔细推理更重要时,用 "mode": "fast" 启动运行。快速决策模型读取屏幕上的元素,在不到一秒内选出大多数步骤,而聊天模型每步需要几秒钟。它输入的文字取自你的目标和你的回答。它还能看到截图,所以可以点按不是按钮的东西(游戏棋子、图片)并滑动。即使没把握,它也会按最可能的判断行动,因为在游戏里任何一步都比等待强。聊天模型(model)只负责写最终答案和向你提问,所以快速运行的模型 token 费用也更低。快速模型本身已包含在手机价格中。
一个教练模型(费用已包含在手机价格中)在快速模型旁边工作:它为目标写一份简短的策略(比如游戏里优先走哪些步)和一条当前局面的提示,每隔几步或运行看起来卡住时重写。快速模型从不等它,每一步都使用最新的版本(用 "plan": false 可以关闭教练)。
如果某个操作后屏幕完全没变,在这个屏幕上就不会再试它,并立即告诉教练。在游戏中,除非游戏已结束或你的目标要求,智能体不会点「New Game」「Restart」或「Try again」。
快速模式适合游戏,以及简短明确的目标:关闭对话框、打开应用并搜索、按已知流程点击。需要判断的目标请用默认的 smart 模式,或者把大任务中简单快速的子任务交给快速智能体。
curl https://lovelyrouter.com/v1/phones/ph_.../runs \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"goal": "Open F-Droid and search for Termux", "mode": "fast"}'智能体需要你的时候#
如果智能体需要只有你知道或应由你决定的信息(发到你手机号上的验证码、密码、某个选择),运行的状态会变为 waiting,question 会说明它需要什么。用 POST /v1/phones/runs/{id}/reply 并带上 {"answer": "…"} 回答,运行就会继续。你也可以打开实时屏幕,自己完成这一步,然后回复 done。
除非目标中明确要求,智能体绝不会付款、转账、删除数据或公开发帖。你可以随时用 POST /v1/phones/runs/{id}/stop 停止运行。
实时观看屏幕#
POST /v1/phones/{id}/screen 会返回手机实时屏幕的链接。它可以在任何浏览器中打开,无需插件,也可以用 iframe 嵌入你自己的页面。拿到链接的人不仅能看到屏幕,还能在上面点击和输入,所以只把它分享给应该使用这台手机的人。链接默认有效期为一小时(ttl_seconds,最长 24 小时)。实时屏幕会随手机的方向变化:应用把手机转为横屏,或你发送 rotate 时,它也会跟着旋转。
自己操控手机#
你自己的代码或智能体可以直接控制手机。坐标以截图的像素为单位,截图短边为 540 像素(竖屏 540×1200,横屏 1200×540)。
GET /v1/phones/{id}/screenshot以 WebP 图片返回屏幕。GET /v1/phones/{id}/elements列出屏幕上的内容(按钮、文字、输入框),每一项都带有中心点、尺寸,以及clickable、editable等标记。POST /v1/phones/{id}/actions发送一个操作:tap、long_press、swipe、scroll、type(支持任何语言)、key(back、home、enter…)、open_url、launch(按包名)、stop_app、wait、rotate(portrait或landscape)或shell(在手机上执行的adb shell命令)。加上"screenshot": true可获取操作后的屏幕。
curl https://lovelyrouter.com/v1/phones/ph_.../actions \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"action": "tap", "x": 270, "y": 1116, "screenshot": true}'所有字段和错误都在 API 参考 中。