Lovely Router文档
获取密钥
浏览器智能体

浏览器智能体

发送一个目标和一个起始网址,AI 智能体会在真实的 Chromium 浏览器中完成任务,并返回回答和结构化 JSON。

浏览器智能体能完成那些用普通 HTTP 请求做不到的网页任务:在网站内搜索、点击浏览多个页面、填写并提交表单、登录,以及读取页面上显示的内容。你用平实的语言描述任务,智能体在真实的 Chromium 浏览器中一次执行一个操作,最后返回文本 answer;如果你需要,还会在 data 中返回 JSON。

它与 Lovely Router 的其他服务共用同一个 API 密钥和预付费余额。按步付费,每步 $0.006 起,模型费用已包含在内。没有运行费。

运行你的第一个任务#

  1. 获取 API 密钥

    在 API 密钥 页面创建一个密钥并导出为环境变量。在 X 上发帖介绍 Lovely Router 即可获得 $2 免费额度,足够运行几十个简短的任务(如何领取)。

    Shell
    export LOVELY_API_KEY="lr-..."
  2. 启动运行

    向 POST /v1/browser/runs 发送 goal 和 start_url。响应会立即返回,状态码为 202,并带有运行的 id。智能体在后台继续工作。

    curl 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/"
      }'
  3. 等待结果

    带上 ?wait=30 获取运行。请求最多挂起 30 秒(上限 50 秒),状态一变化就立即返回,因此循环发起这类请求就能跟踪运行,无需忙轮询。

    如果想实时观看运行,看到每一步和浏览器屏幕画面,启动时加上 "stream": true。参见实时事件与屏幕。

    curl "https://lovelyrouter.com/v1/browser/runs/brun_3f9a1c7e0b2d4e6f8a9b0c1d?wait=30" \
      -H "Authorization: Bearer $LOVELY_API_KEY"
  4. 读取结果

    已结束的运行包含 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_urlhttp 或 https URL
max_steps1 到 100,默认 50
human_timeout_minutes1 到 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 工具只接受保险库密钥的名称,从不接受密钥值:请先把密钥存入保险库。

后续步骤#