foril@blog ~
  __            _ _ 
 / _| ___  _ __(_) |
| |_ / _ \| '__| | |
|  _| (_) | |  | | |
|_|  \___/|_|  |_|_|
// developer & blogger
💻theme: auto
[░░░░░░░░░░░░░░░░░░░░] 0%

Browser-Use extract Action 详解笔记

📅 2026-02-25|⏱ ~3 min read|#学习笔记

Browser-Use extract Action 详解笔记

##1. extract Action 是什么?

extract 是 Browser-Use 工具集提供给大语言模型(Agent)的一项极具威力的核心能力。

不同于机械式的交互操作(例如"点击按钮"、"输入文本"),extract 允许 Agent 暂停交互,专门花时间去阅读整个网页或网页的一部分,并根据给定的**自然语言 Query(或者配合 JSON Schema)**直接归纳、过滤或提取所需要的数据。

例如,让终端输出如下的日志:

text
INFO [Agent] ▶️ extract: query: 请从上到下列出所有标记为'满足'的规则,返回每条规则的ID、名称和满足/不满足状态,按页面顺序排列, extract_links: False, start_from_char: 0

Agent 随后可以直接获得清洗、整理好的结构化/半结构化数据:

text
ID: 10304,名称: 非主营A品牌店-自助,状态: 满足

##2. 底层实现机制与源码链路

extract 实际上是一个**"内置的 LLM 阅读理解管道"**,将复杂的网页解析封装成了大模型可以一键调用的原子动作。

底层核心的执行步骤如下(参考源码 browser_use/tools/service.py):

第一步:参数解析与 Schema 协商

接收 Agent 传来的参数:

  • query:提取目标的自然语言描述。
  • extract_links:是否要在提取结果中保留 URL 链接。
  • start_from_char:文本游标位置,用于处理分页或超长页面。
  • output_schema(可选):定义期望返回的强结构化 JSON Schema。

第二步:获取页面并转化为纯净 Markdown

程序不会把复杂的 HTML DOM 树直接扔给大模型,而是调用 extract_clean_markdown() 方法:

  • 读取当前网页树形结构。
  • 进行净化(Filtered),通过特定算法去除噪声节点(如 script、style、广告 iframe、无用的容器等)。
  • 将精简后的 DOM 翻译成紧凑的 Markdown 分段格式,最大程度减少 Token 消耗。

第三步:超长文本分块处理 (Chunking)

因为网页的 Markdown 可能超出模型上下文长度限制,底层代码实现了基于 MAX_CHAR_LIMIT(默认 10 万字符)的智能分块:

  • 会根据传入的 start_from_char 计算切割偏移量。
  • 会保证切割的结构完整性(例如不腰斩表格行)。
  • 如果当前分块没查完,会通过提取元信息提示 Agent 下次请求将 start_from_char 加上一定的偏置值,从而实现超大页面的分页滑动查询

第四步:独立发起专门的 LLM 结构化解析

拿到当前块的干净 Markdown 后,系统会在此动作组内部重新发起一次全新的 LLM 请求(通常使用专门用于抽取的模型实例):

  • 如果提供了 output_schema(结构化提取): 构建一个严厉的 System Prompt,要求模型: Your response MUST conform to the provided JSON Schema exactly. 将结果强转为规范的 JSON。
  • 如果未提供 Schema(游离文本提取): 将 query 连同 Markdown 扔给大模型,让大模型充当阅读理解机器,并输出纯文本总结。

第五步:返回最终提取态供主 Agent 消费

解析完成后的结果,被打包进 ActionResult 写回到主流程的长短期记忆记忆中。接着大模型 Master 就可以直接在 Prompt 的历史记录里取用这组干净的数据,继续判断后续该干什么(例如去不同页面比对,或是直接判定任务完成)。

$ tree --headings