__ _ _ / _| ___ _ __(_) | | |_ / _ \| '__| | | | _| (_) | | | | | |_| \___/|_| |_|_|
extract Action 详解笔记extract Action 是什么?extract 是 Browser-Use 工具集提供给大语言模型(Agent)的一项极具威力的核心能力。
不同于机械式的交互操作(例如"点击按钮"、"输入文本"),extract 允许 Agent 暂停交互,专门花时间去阅读整个网页或网页的一部分,并根据给定的**自然语言 Query(或者配合 JSON Schema)**直接归纳、过滤或提取所需要的数据。
例如,让终端输出如下的日志:
textINFO [Agent] ▶️ extract: query: 请从上到下列出所有标记为'满足'的规则,返回每条规则的ID、名称和满足/不满足状态,按页面顺序排列, extract_links: False, start_from_char: 0
Agent 随后可以直接获得清洗、整理好的结构化/半结构化数据:
textID: 10304,名称: 非主营A品牌店-自助,状态: 满足
extract 实际上是一个**"内置的 LLM 阅读理解管道"**,将复杂的网页解析封装成了大模型可以一键调用的原子动作。
底层核心的执行步骤如下(参考源码 browser_use/tools/service.py):
接收 Agent 传来的参数:
query:提取目标的自然语言描述。extract_links:是否要在提取结果中保留 URL 链接。start_from_char:文本游标位置,用于处理分页或超长页面。output_schema(可选):定义期望返回的强结构化 JSON Schema。程序不会把复杂的 HTML DOM 树直接扔给大模型,而是调用 extract_clean_markdown() 方法:
因为网页的 Markdown 可能超出模型上下文长度限制,底层代码实现了基于 MAX_CHAR_LIMIT(默认 10 万字符)的智能分块:
start_from_char 计算切割偏移量。start_from_char 加上一定的偏置值,从而实现超大页面的分页滑动查询。拿到当前块的干净 Markdown 后,系统会在此动作组内部重新发起一次全新的 LLM 请求(通常使用专门用于抽取的模型实例):
output_schema(结构化提取):
构建一个严厉的 System Prompt,要求模型: Your response MUST conform to the provided JSON Schema exactly. 将结果强转为规范的 JSON。query 连同 Markdown 扔给大模型,让大模型充当阅读理解机器,并输出纯文本总结。解析完成后的结果,被打包进 ActionResult 写回到主流程的长短期记忆记忆中。接着大模型 Master 就可以直接在 Prompt 的历史记录里取用这组干净的数据,继续判断后续该干什么(例如去不同页面比对,或是直接判定任务完成)。