浏览器智能体
发送一个目标和一个起始网址,AI 智能体会在真实的 Chromium 浏览器中完成任务,并返回回答和结构化 JSON。
浏览器智能体能完成那些用普通 HTTP 请求做不到的网页任务:在网站内搜索、点击浏览多个页面、填写并提交表单、登录,以及读取页面上显示的内容。你用平实的语言描述任务,智能体在真实的 Chromium 浏览器中一次执行一个操作,最后返回文本 answer;如果你需要,还会在 data 中返回 JSON。
它与 Lovely Router 的其他服务共用同一个 API 密钥和预付费余额。按步付费,每步 $0.006 起,模型费用已包含在内。没有运行费。
快速或精准模式、自选模型,以及一次运行的费用。
在运行过程中流式获取每一步和浏览器屏幕画面。
在 data 中获得符合你的结构的 JSON。
提问、批准、CAPTCHA 与接管。
登录网站,而模型永远看不到密码。
让智能体把正确的文件附加到表单中。
运行等待你处理或结束时收到通知。
运行你的第一个任务#
获取 API 密钥
启动运行
向
POST /v1/browser/runs发送goal和start_url。响应会立即返回,状态码为202,并带有运行的id。智能体在后台继续工作。Shellcurl https://lovelyrouter.com/v1/browser/runs \ -H "Authorization: Bearer $LOVELY_API_KEY" \ -H "content-type: application/json" \ -d '{ "goal": "Find the price of the book \"A Light in the Attic\" and whether it is in stock.", "start_url": "https://books.toscrape.com/" }'等待结果
带上
?wait=30获取运行。请求最多挂起 30 秒(上限 50 秒),状态一变化就立即返回,因此循环发起这类请求就能跟踪运行,无需忙轮询。如果想实时观看运行,看到每一步和浏览器屏幕画面,启动时加上
"stream": true。参见实时事件与屏幕。Shellcurl "https://lovelyrouter.com/v1/browser/runs/brun_3f9a1c7e0b2d4e6f8a9b0c1d?wait=30" \ -H "Authorization: Bearer $LOVELY_API_KEY"读取结果
已结束的运行包含
status、智能体的answer,以及charge_usd中的费用(节选):JSON{ "id": "brun_3f9a1c7e0b2d4e6f8a9b0c1d", "object": "browser_run", "status": "succeeded", "mode": "fast", "steps": 2, "max_steps": 50, "current_url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html", "answer": "\"A Light in the Attic\" costs £51.77 and is in stock (22 available).", "data": null, "error": null, "charge_usd": 0.012, "reserved_usd": 0 }完整的字段列表见运行对象。在请求中加上
&trace=1,即可获取智能体执行的每一步。
你也可以在控制台中启动运行:选择一个示例或自己写任务,实时观看浏览器屏幕和每一步,在智能体提问时回答它,并复制对应的 cURL、Python 或 JavaScript 代码。
运行的工作方式#
运行以 running 状态开始,并以四种最终状态之一结束。在此期间,它可能暂停为 waiting_for_human,并在你回复后继续。
| 状态 | 含义 |
|---|---|
running | 智能体正在工作。 |
waiting_for_human | 智能体需要你:一个回答、一次批准,或需要有人在浏览器中操作。needs 说明具体需要什么。参见人工介入。 |
succeeded | 智能体已完成任务并写好了 answer。 |
failed | 运行未完成就结束了。error 说明原因,例如 reached the step limit (50) 或 blocked by the website。 |
timed_out | 在 human_timeout_minutes 内无人回复。 |
stopped | 你通过 POST /v1/browser/runs/{id}/stop 停止了它。 |
每一步,智能体都会读取当前页面,选择一个操作并执行。当目标达成、需要人工介入或达到 max_steps 时,它就会停止。在点击提交表单的按钮之前,它会对照你的目标逐项检查每个字段,并修正不符合的值。
succeeded 表示智能体完成了任务,并不代表网站接受了它的操作。对于需要提交内容的任务,请阅读 answer:如果页面显示了校验错误或没有确认信息,回答中会说明。
运行结束时,开始时预留金额中未用完的部分会退回你的余额,charge_usd 显示最终扣费。在此之前,charge_usd 为 null。
什么算一步#
一步就是一次浏览器操作:
- 点击链接、按钮、复选框或列表选项
- 在字段中输入,或输入后按回车
- 在下拉菜单中选择选项
- 填入已保存的密钥或上传文件
- 返回上一页
- 等待尚未加载完成的页面,或重新加载页面
- 运行只读代码从页面读取数据(仅精准模式)
- 写出最终回答
等待人工的暂停(提问、批准、移交)会出现在步骤记录中,但不计费。失败的步骤(例如因为元素位置变了)仍然计数。运行的 steps 字段统计所有已记录的步骤,包括暂停。
简单的查询需要 1 到 3 步,一次登录需要 4 到 8 步,较长的多页表单需要 15 到 25 步。模式、模型与价格中有费用示例。
写出有效的目标#
目标是智能体唯一的指令。把它当作给一位细心、但从没见过这个网站的助手交代任务来写。
- 写明任务需要的每个值。 姓名、邮箱、日期、数量、具体的商品。不要让智能体去猜:如果缺少某个值,它会停下来问你(除非你关闭了提问)。
- 说明要汇报什么。 “告诉我价格以及是否有货”比“查一下这本书”能得到更好的回答。
- 对于操作类任务,说明什么能证明成功。 “提交表单,并告诉我确认编号。”
- 从靠近任务的页面开始。 如果你知道搜索页或表单本身的地址,就把它作为
start_url,而不是用首页。 - 指明去哪里找,在网站有多个地方可找时:“在 Reviews 标签页中”“使用网站自带的搜索”。
- 一次运行只做一个任务。 把不相关的任务拆分到不同的运行中。
- 不要把密钥写进目标。 密码请作为保险库密钥传入,切勿写在目标文本中。
| 不要这样写 | 应该这样写 |
|---|---|
| 找去纽约的便宜机票。 | 搜索 2026 年 11 月 3 日从 SFO 到 JFK 的单程机票,1 名成人。告诉我最便宜的票价、航空公司和起飞时间。 |
| 帮我订阅新闻通讯。 | 用 ada@example.com 订阅页面底部的每周新闻通讯,并告诉我确认信息。 |
| 获取那些新闻。 | 获取首页排名前 5 的新闻,包括标题、链接和分数。(如需 JSON,请添加 output_schema。) |
| 用 ada / hunter22 登录并下载我的发票。 | 登录并告诉我最新一张发票的总金额。传入 "secrets": ["shop_user", "shop_password"]。 |
限制#
| 限制 | 值 |
|---|---|
goal 长度 | 4,000 个字符 |
start_url | http 或 https URL |
max_steps | 1 到 100,默认 50 |
human_timeout_minutes | 1 到 1,440,默认 30 |
状态请求中的 ?wait= | 最多 50 秒 |
| 事件流中的屏幕帧 | 最多约每秒 4 帧 |
output_schema 大小 | 20 KB |
| 同时进行的运行 | 每个账户 10 个,与数据工具共享 |
| 移交时的实时画面链接 | 有效期 1 小时 |
| 文件 | 每个 10 MB,每个账户 100 个 |
| 密钥值 | 4 KB |
同时进行的运行达到上限时,POST /v1/browser/runs 返回 429。余额低于运行需要预留的金额时,返回 402。错误列出了所有错误。
在 AI 智能体中使用#
位于 https://lovelyrouter.com/mcp 的 MCP 服务器把浏览器智能体提供为四个工具:browser_run、browser_status、browser_reply 和 browser_takeover。它们与 REST API 使用相同的 API 密钥、限制和价格。MCP 工具只接受保险库密钥的名称,从不接受密钥值:请先把密钥存入保险库。