browser-use 工具系统实战指南:自定义 Action、注入参数与 ActionResult 上下文控制
人工智能AI Agent浏览器控制GUI 自动化MCP 服务【免费下载链接】browser-useAgents that use the browser.项目地址https://gitcode.com/GitHub_Trending/br/browser-use点击查看免费下载本指南以 skills/open-source/references/tools.md 为基础系统讲解 browser-use 的Tools工具体系从快速接入自定义 Action到装饰器参数、Pydantic 输入模型、browser_session等自动注入参数再到内置默认工具清单、exclude_actions裁剪方式与ActionResult全字段上下文控制策略。读完你将能够为 Agent 构建可复用的自定义浏览器操作并精确控制每一步工具结果如何进入 LLM 上下文同时理解底层Registry的注册与注入机制。快速示例10 行代码接入自定义工具Tools是 browser-use 中承载所有可调用工具Action的容器对应源码实现在 browser_use/tools/service.py。创建自定义工具的最简方式是用tools.action(...)装饰一个函数并在创建Agent时通过tools参数传入from browser_use import Tools, ActionResult, BrowserSession tools Tools() tools.action(Ask human for help with a question) async def ask_human(question: str, browser_session: BrowserSession) - ActionResult: answer input(f{question} ) return ActionResult(extracted_contentfThe human responded with: {answer}) agent Agent(taskAsk human for help, llmllm, toolstools)Warning参数名必须是browser_session: BrowserSession不能写成browser: Browser。Agent 按参数名精确注入依赖name matching名字写错会静默失败——函数拿不到浏览器会话且不抛任何异常。从源码看这一步的背后是 browser_use/tools/registry/service.py 中的Registry.action()装饰器它会通过_normalize_action_function_signature()解析函数签名把普通参数自动转成一个 Pydantic 参数模型并把browser_session这类特殊参数识别为注入参数运行时由execute_action()统一填充。因此函数签名就是你定义工具参数 Schema 的方式。添加自定义工具装饰器参数详解tools.action(descriptionFill out banking forms, allowed_domains[https://mybank.com]) async def fill_bank_form(account_number: str) - ActionResult: return ActionResult(extracted_contentfFilled form for account {account_number})装饰器参数description必填描述工具的作用LLM 依据它决定何时调用该工具。在 browser_use/tools/registry/views.py 的RegisteredAction.prompt_description()中description 会与参数 Schema 一起被格式化为action_name: description. (paramtype, ...)形式注入系统提示词所以描述越精确模型越会用对。allowed_domains限定工具可运行的域名默认不限。源码中它与domains是同一参数的两个别名若同时传两者会抛出ValueError。注册后的域名过滤在 browser_use/tools/registry/views.py 的_match_domains()与get_prompt_description()中实现当page_url已知时只有域名匹配的 Action 才会被暴露给 LLMpage_url为空如 about:blank 新标签页时受限工具一律隐藏避免fail open。param_model显式指定参数模型见下节不指定时框架根据函数签名自动生成。terminates_sequence标记该 Action 会改变页面状态如 navigate、search、go_back、switchmulti_act()在执行它后会中止队列中剩余的动作。Pydantic 输入模型当参数较多或有嵌套结构时推荐用一个 PydanticBaseModel作为输入模型让 LLM 生成结构化参数from pydantic import BaseModel, Field class Car(BaseModel): name: str Field(descriptionCar name, e.g. Toyota Camry) price: int Field(descriptionPrice in USD) tools.action(descriptionSave cars to file) def save_cars(cars: list[Car]) - str: with open(cars.json, w) as f: json.dump([c.model_dump() for c in cars], f) return fSaved {len(cars)} cars这种写法的底层逻辑在Registry._normalize_action_function_signature()每个 Action 最终都会被归一化为只接受params: ParamModel与注入参数的关键字调用内置工具的参数模型集中定义在 browser_use/tools/views.py如NavigateAction、ClickElementAction、InputTextAction等自定义工具可参照同样风格。注意返回普通str也是合法的——Tools.act()会把字符串自动包装为ActionResult(extracted_contentresult)见 browser_use/tools/service.py 的act()方法。在自定义工具中操作浏览器通过注入的browser_session可以拿到当前页面并执行交互tools.action(descriptionClick submit button via CSS selector) async def click_submit(browser_session: BrowserSession): page await browser_session.must_get_current_page() elements await page.get_elements_by_css_selector(button[typesubmit]) if not elements: return ActionResult(extracted_contentNo submit button found) await elements[0].click() return ActionResult(extracted_contentClicked!)must_get_current_page()定义在 browser_use/browser/session.py找不到当前页时会抛错页面查找方法实现于 browser_use/actor/page.pyget_elements_by_css_selector()用 CSS 选择器批量取元素get_element_by_prompt()/must_get_element_by_prompt()则用自然语言配合llm定位元素后者在找不到时直接抛异常。注入参数按名字自动填充的特殊依赖Agent 会按参数名填充函数参数。以下特殊名字会被自动注入类型定义见 browser_use/tools/registry/views.py 的SpecialActionParameters与 browser_use/tools/registry/service.py 的_get_special_param_types()参数名类型说明browser_sessionBrowserSession当前浏览器会话CDP 访问、页面操作、事件总线cdp_clientCDPClient直接访问 Chrome DevTools Protocol 客户端page_urlstr当前页面 URL域名过滤与上下文用page_extraction_llmBaseChatModel传给 Agent 的 LLM用于页面级提取file_systemFileSystem文件系统访问读写、保存提取结果available_file_pathslist[str]可用于上传/处理的文件列表has_sensitive_databool该 Action 是否包含敏感数据sensitive_datadict敏感数据字典仅input等显式声明才注入extraction_schemadictAgent 级结构化提取 SchemacontextAny用户通过Agent(context...)传入的任意上下文对象这些参数类型有严格校验Registry._get_special_param_types()定义了期望类型若函数声明了同名参数但类型不兼容例如把browser_session写成BrowserSession之外的任意类型注册时会直接抛ValueError避免运行时静默错误。页面方法通过 browser_sessionpage await browser_session.must_get_current_page() # CSS selector elements await page.get_elements_by_css_selector(button.submit) # LLM-powered (natural language) element await page.get_element_by_prompt(login button, llmpage_extraction_llm) element await page.must_get_element_by_prompt(login button, llmpage_extraction_llm) # raises if not found内置默认工具一览所有内置工具在Tools.__init__()中通过self.registry.action(...)注册完整实现见 browser_use/tools/service.py参数模型见 browser_use/tools/views.py导航与浏览器控制search— 搜索查询duckduckgo 默认、google、bing底层将编码后的查询拼接为搜索 URL 并派发NavigateToUrlEventnavigate— 跳转 URL源码内置了空 DOM 健康检查检测到空白页会等待 3 秒重试、再 reload 并等待 5 秒go_back— 历史后退wait— 等待指定秒数实现中上限 30 秒页面交互click— 按索引点击元素索引从 1 开始检测到select会自动转为获取下拉选项input— 向表单字段输入文本默认clearTrue清空后输入text仅清空、clearFalse追加upload_file— 上传文件校验文件存在于available_file_paths/下载列表/FileSystem并做路径穿越防护scroll— 按页滚动页面pages0.5-10.0支持index滚动指定元素find_text— 滚动到指定文本send_keys— 发送按键Enter、Escape、Tab、Controlo 等快捷键JavaScriptevaluate— 执行自定义 JSshadow DOM、自定义选择器、数据提取源码对执行结果做了 base64 图片识别与 2 万字符截断标签页管理switch— 按 4 位tab_id切换标签页close— 关闭标签页容忍已失效的 target_id内容提取extract— 用 LLM 从页面 Markdown 提取数据支持extract_links、extract_images查询含 image/photo 等关键词时自动开启、start_from_char续传、output_schema结构化输出JSON Schema 校验、already_collected跨页去重超过 1 万字符的结果自动落盘并通过include_extracted_content_only_once控制展示search_page— 页面文本 grep正则/大小写/上下文/css_scope范围限定零 LLM 成本find_elements— 按 CSS 选择器查询 DOM返回 tag、text、属性、子元素数零 LLM 成本视觉screenshot— 请求在下一个浏览器状态中包含截图传file_name则保存为 PNG 文件并返回路径表单控件dropdown_options— 获取下拉框选项原生select与 ARIA menu 均可select_dropdown— 按文本选择下拉选项文件操作write_file— 写文件默认覆盖appendTrue追加支持 .txt/.md/.json/.csv/.html/.xml/.pdf/.docxPDF 由 Markdown 自动转换read_file— 读文件文本、PDF、DOCX、图片replace_file— 在文件中精准替换文本任务完成done— 完成任务始终可用不可被排除传入output_model时自动切换为StructuredOutputAction结构化完成输出经过model_dump(modejson)序列化并自动附带files_to_display与会话内真实下载的文件源码中还有save_as_pdfCDPPage.printToPDF支持纸张规格、页眉页脚模板、去重文件名与navigate的new_tab参数等可自行阅读 browser_use/tools/service.py 与 browser_use/tools/views.py。移除不需要的工具两种方式都可以裁剪工具集合减少 LLM 的选择空间与 token 消耗# 方式一初始化时排除 tools Tools(exclude_actions[search, wait]) agent Agent(task..., llmllm, toolstools) # 方式二初始化后动态排除例如 use_vision ! auto 时禁用截图 tools.exclude_action(screenshot)底层实现为Registry.exclude_action()browser_use/tools/registry/service.py既会把名字加入排除列表防止重新注册也会从ActionRegistry中删除已注册项。内置的done始终保留。工具响应ActionResult 全字段控制简单返回tools.action(My tool) def my_tool() - str: return Task completed successfullyActionResult完全控制tools.action(Advanced tool) def advanced_tool() - ActionResult: return ActionResult( extracted_contentMain result, long_term_memoryRemember this for all future steps, errorSomething went wrong, is_doneTrue, successTrue, attachments[file.pdf], )ActionResult 字段ActionResult定义在 browser_use/agent/views.py字段默认值说明extracted_contentNone主结果传给 LLMinclude_extracted_content_only_onceFalse大内容只展示一次之后从上下文中丢弃long_term_memoryNone始终包含在 LLM 输入中供未来所有步骤使用errorNone错误信息未捕获异常会自动写入is_doneFalse该工具完成整个任务successNone任务是否成功仅配合is_doneTrue使用attachmentsNone要展示给用户的文件metadataNone调试/可观测性数据如点击坐标imagesNonebase64 编码的图片列表文本与图片分离处理注意一个易踩的坑ActionResult内置了一个模型校验器——successTrue只能在is_doneTrue时设置普通成功动作应把success留为None否则会抛ValueError见 browser_use/agent/views.py 的validate_success_requires_done。此外Tools.act()browser_use/tools/service.py为每个动作包了一层墙钟超时默认BROWSER_USE_ACTION_TIMEOUT_S环境变量或 180 秒tools.act(action_timeout...)可覆盖CDP WebSocket 失联时动作会以ActionResult(error...)返回而不是无限挂起。上下文控制策略在长任务中什么内容永远可见、什么只出现一次、什么只进长期记忆直接决定 token 效率与模型稳定性推荐三种策略短内容、永远可见直接返回字符串如Task completed successfully内容会始终出现在 LLM 上下文中长内容只展示一次 持久摘要extracted_content放完整大内容同时设置include_extracted_content_only_onceTrue首步可见、后续丢弃并把精炼摘要放进long_term_memory后续所有步骤持续可见。内置extract、evaluate、read_file正是这套模式的实践永不展示、只进记忆只用long_term_memory内容不进即时上下文、只作长期记忆沉淀。总结browser-use 的Tools体系把LLM 调用工具抽象成了三层tools.action装饰器负责注册与签名归一化browser_use/tools/registry/service.py按名字注入browser_session、file_system等特殊依赖ActionResult负责把执行结果按需路由到即时上下文或长期记忆。掌握了这三个层次你就能在不改框架源码的前提下为任意任务定制精准、高效、上下文可控的浏览器自动化工具。更完整的示例可参考 examples/custom-functions/ 下的actor_use.py、notification.py、file_upload.py等以及 tests/ci/infrastructure/test_registry_core.py 对注册、排除与域过滤的验证用例。赞分享人工智能AI Agent浏览器控制GUI 自动化MCP 服务【免费下载链接】browser-useAgents that use the browser.项目地址https://gitcode.com/GitHub_Trending/br/browser-use点击查看免费下载相关推荐GitHub Copilot SDK 的 Pre-Tool Use Hook在工具执行前实现权限控制、参数改写与上下文注入GitHub Copilot SDK 的 Pre Tool Use Hook在工具执行前实现权限控制、参数改写与上下文注入 onPreToolUse 是 Gi人工智能AI AgentAgent 框架工具调用Nintendo Switch自定义系统注入工具TegraRcmGUI终极指南Nintendo Switch自定义系统注入工具TegraRcmGUI终极指南 想解锁Nintendo Switch的全部潜能吗TegraRcmGUI这款基于桌面应用嵌入式Browser-Use动作系统行为定义与执行Browser Use动作系统行为定义与执行 概述 Browser Use的动作系统是项目核心功能它使AI能够像人类一样与网页交互。该系统基于事件驱动架构人工智能AI Agent浏览器控制GUI 自动化MCP 服务上一篇3步掌握YimMenuGTA5游戏安全增强与功能扩展实战指南下一篇10分钟上手Forest让Java HTTP调用像本地方法一样简单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

任务分解-智能体该不该自己拆任务

任务分解-智能体该不该自己拆任务

摘要 复杂任务要拆成步骤,问题是由谁来拆。让智能体自己规划,灵活但不可控;把流程写死,可控但无法应对变化。 这大概是智能体架构设计中最核心的一次取舍。本文拆解四种分解方式、各自的适用条件、分解粒度如何确定,以…

2026/9/30 12:55:08 阅读更多 →
141、Agent的Prompt自动优化

141、Agent的Prompt自动优化

141、Agent的Prompt自动优化 那天晚上排查一个Agent的循环调用问题,日志里反复出现同一句“I don’t have enough information”,明明系统提示词里已经把知识库路径、工具用法、甚至兜底话术都写清楚了,可模型就是不肯用。我盯着那几行Prompt看了一个钟头,忽然意识到问题不…

2026/9/30 12:55:08 阅读更多 →
新南威尔士 COMP9312 DataAnalytics for Graphs 作业1-Q1

新南威尔士 COMP9312 DataAnalytics for Graphs 作业1-Q1

​可以访问链接:Q1 题面 附带的 Jupyter 代码文件:【Colab】COMP9312 Project Q1: First Cycle-Causing Edge A. 题解(中文) 1. 复杂度分析 时间复杂度: O(mα(n)n)O(m\times \alpha(n)n)O(mα(n)n) 并查集查找和合…

2026/9/30 12:55:08 阅读更多 →

最新新闻

DeepSeek保险核赔方案:多模态解析+推理引擎+欺诈预警全链路拆解

DeepSeek保险核赔方案:多模态解析+推理引擎+欺诈预警全链路拆解

简介:这是一份面向保险科技、AI风控及大模型应用工程师的DeepSeek保险智能核赔全套方案,聚焦多模态理赔文档解析与欺诈风险实时预警两大核心场景。文档共811页、50个大章节,从DeepSeek-R1推理引擎剖析入手,依次覆盖文本类保单/申请…

2026/9/30 13:44:02 阅读更多 →
如何从零跑通 OpenTalking 全本地私有化数字人:SenseVoice + CosyVoice + QuickTalk 完整链路指南

如何从零跑通 OpenTalking 全本地私有化数字人:SenseVoice + CosyVoice + QuickTalk 完整链路指南

如何从零跑通 OpenTalking 全本地私有化数字人:SenseVoice CosyVoice QuickTalk 完整链路指南 【免费下载链接】opentalking OpenTalking: An industrial-grade open-source AI digital human framework that supports real-time conversation, private deploymen…

2026/9/30 13:44:02 阅读更多 →
哪些出口日本的产品需要符合 JFSL 370 要求?

哪些出口日本的产品需要符合 JFSL 370 要求?

出口日本的产品,通常不是因为“出口到日本”就统一适用 JFSL 370,而是因为产品或其部件会与食品直接或间接接触。重点对象包括食品容器、包装材料、餐饮器具、食品加工设备中的接触部件,以及用于制造这些产品的树脂、添加剂等材料。最终仍需结…

2026/9/30 13:44:02 阅读更多 →
手机检测数据集落地实践:YOLOv8训练参数与标注规范全解析

手机检测数据集落地实践:YOLOv8训练参数与标注规范全解析

现在跟你说回这个数据集的落地经验。 做行为识别、课堂纪律管理或者驾驶分心检测这类项目时,“画面里有没有人拿手机”几乎是绕不开的第一步。我整理这份手机检测数据集,共2800张已标注完成、直接对标YOLO格式的图片,覆盖手持、桌面摆放、室…

2026/9/30 13:44:02 阅读更多 →
企业微信第三方应用开发全攻略:授权模型、回调与AI接入实战

企业微信第三方应用开发全攻略:授权模型、回调与AI接入实战

做企业微信第三方应用开发这个方向,我接触下来最直观的感受是:接口文档确实写得全,但真正踩坑的地方全在文档之外。前阵子帮一个客户从零搭了一套服务商应用,从注册服务商、创建应用、配回调、接大模型,到最终上架&…

2026/9/30 13:44:02 阅读更多 →
晓多客服机器人AI工作流落地实战指南

晓多客服机器人AI工作流落地实战指南

简介:本资源是一份聚焦AI客服落地实践的专业技术文档,面向客服系统开发者、智能客服产品运营者及人工智能应用研究者,深入解析晓多客服机器人如何通过深度学习与自然语言理解技术,解决家电、电商等行业售前型号对比、售后并发接待…

2026/9/30 13:43:00 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →