Skip to content

browser-use:一轮 step 怎样把网页变成行动与历史?

固定官方源码 browser-use/browser-use@d8110c5ff87ccba887aaa726cdb780f2f84bef8d。本篇只追踪 Agent.step() 的观察、模型决策、动作执行和留痕路径;是静态源码剖面,不是浏览器运行录像。

browser-use 一轮 step 的四条泳道时序

查看原尺寸 SVG(可缩放)

文字版 · 可编辑图源 · 关键代码导读

为什么这条路径值得看

浏览器 Agent 的“上下文”并非只有聊天记录。Agent.step() 先从 BrowserSession 请求当前网页摘要,再由消息管理器编成模型输入;模型给出动作列表,multi_act() 逐个交给工具与浏览器,最后 _finalize() 将这一步的模型输出、执行结果与浏览器状态保存为历史项。step · 历史项

这里最容易误读的是截图:_prepare_context() 在每步请求状态时传入 include_screenshot=True,但 create_state_messages() 仍按 use_vision 决定是否把截图放进模型消息;_make_history_item() 则会在摘要里确有截图时单独存储截图。因此“捕获了截图”“模型收到了截图”“历史存了截图”是三个不同断言。捕获 · 模型消息条件 · 历史截图

两个保护条件

  • 浏览器状态请求超时时,BrowserSession 清空选择器查找路径,返回空 DOM 选择器映射和带错误信息的非可操作状态,而不是让模型继续用上一页的元素索引。超时分支
  • 一次模型输出可含多动作,但 multi_act() 不盲目执行整列。动作完成、出错、注册动作声明终止序列,或动作前后 URL/焦点目标变化,都可能停止余下动作。序列守卫

边界与下一步

时序图把源码中的异步调用整理成一条正常阅读路径;它没有断言每步一定进入历史:_finalize() 在没有 last_result 时直接返回,步骤异常、暂停、重连和超时分支会改变结果。条件 · 异常处理

尚未启动浏览器、实测模型是否看到截图,也未验证截图存储、事件总线消费或页面变化检测的时延。Skills 在 run() 初始化阶段可注册为动作,但并非本图覆盖的执行链;后续应单独研究注册与权限边界。Skills 注册入口

图的文字说明 · browser-use-step

图从上往下读,四条泳道依次是 Agent、BrowserSession + Tools、模型、AgentHistory。Agent 请求浏览器状态;浏览器返回包含 DOM/URL/可用截图的 BrowserStateSummary;Agent 的消息管理器构造输入交给模型;模型返回动作列表;Agent 经 multi_actTools.act 在浏览器侧执行;ActionResult 回到 Agent;在有结果的情况下 _finalize 追加 AgentHistory。箭头是教学整理的主路径,不表示所有步骤都一定发生或异步组件只有一种实际调度顺序。

图旁明确区分三件事:采集状态时请求截图、根据 use_vision 决定是否送进模型、若状态中有截图则历史记录可单独保存。图片没有把“采集截图”误画成“模型一定看图”。源码定位、失败守卫和未验证边界见章节代码导读

固定官方源码:browser-use/browser-use@d8110c5ff87ccba887aaa726cdb780f2f84bef8d。本图为静态源码图,不是浏览器实测录屏。


在线预览稿:书稿仍在校稿,系统篇以文内固定源码版本为准;静态阅读不等于运行验收。