主题
内置工具集
本文引用的源码文件
本文引用的文件
- src/background/constants.js
- src/background/tool-executor.js
- src/background/tools/browser-tools.js
- src/background/tools/storage-tools.js
- src/background/tools/tab-tools.js
- src/background/tools/media-tools.js
- src/background/tools/ai-tools.js
- src/background/tools/agent-tools.js
- src/background/tools/memory-tools.js
- src/background/tools/debugger-tools.js
- src/content/page-interaction.js
- src/content/page-extract.js
- src/shared/tools.js
目录
引言
本文件面向 AI Helper 扩展(Manifest V3,版本 2.3.1)的“内置工具集”,聚焦浏览器工具、内容提取工具、存储工具、标签页管理工具、调试工具、媒体工具与 AI 工具。文档从执行环境、参数契约、并行能力、确认机制、错误处理、分类体系与设计原则出发,给出可操作的调用模式与优化建议,帮助读者在页面交互、表单自动化、数据抓取和跨进程协作中稳定工作。
项目结构
内置工具以“定义 + 执行”双层组织:
- 定义层:按类别拆分到 background/tools/*.js,集中声明 id、category、execution、parallelizable、requiresConfirmation、function.name/description/parameters。
- 执行层:background/tool-executor.js 负责注册、调度、参数校验、确认弹窗、截图、Agent 通信、MCP/RAG 动态注入等;content/* 提供页面侧 DOM 操作与提取实现。
graph TB subgraph "Background 服务" C["constants.js<br/>工具定义聚合与元数据"] E["tool-executor.js<br/>工具注册/调度/确认/截图/MCP/RAG"] BT["browser-tools.js"] ST["storage-tools.js"] TT["tab-tools.js"] MT["media-tools.js"] AT["ai-tools.js"] AGT["agent-tools.js"] MEM["memory-tools.js"] DBG["debugger-tools.js"] end subgraph "Content Script" PI["page-interaction.js<br/>元素快照/ref/滚动收集"] PE["page-extract.js<br/>元数据/链接/表单/图片/搜索/iframe"] end C --> E BT --> C ST --> C TT --> C MT --> C AT --> C AGT --> C MEM --> C DBG --> C E --> PI E --> PE
图表来源
- src/background/constants.js#L87-L149
- src/background/tool-executor.js#L1-L23
- src/background/tools/browser-tools.js#L1-L10
- src/content/page-interaction.js#L1-L10
- src/content/page-extract.js#L1-L10
章节来源
核心组件
- 工具定义聚合:background/constants.js 汇总各模块导出,生成 RAW_TOOLS、BUILTIN_TOOLS、CATEGORY_ORDER、TOOL_EXECUTION_MAP、PARALLELIZABLE_TOOLS、CONFIRMATION_REQUIRED_TOOLS 等单一数据源映射。
- 工具执行器:background/tool-executor.js 解析参数、路由到 content_script 或 background 处理器,处理确认弹窗、超时、截图、Agent 命令、MCP/RAG 动态注入等。
- 页面交互与提取:content/page-interaction.js 提供 query_elements、interact_element、scroll_collect 等;content/page-extract.js 提供 page_content、extract_data、search_in_page、iframe_content 等。
章节来源
- src/background/constants.js#L87-L149
- src/background/tool-executor.js#L1-L23
- src/content/page-interaction.js#L1-L10
- src/content/page-extract.js#L1-L10
架构总览
工具调用通常经历以下阶段:
- LLM 选择工具并传入参数。
- tool-executor.js 校验参数、判断是否需要用户确认。
- 根据 execution 字段分发到 content_script 或 background 处理器。
- content_script 执行 DOM 操作或提取;background 执行浏览器 API、网络请求、截图、Agent 命令等。
- 结果回传,必要时触发截图下载、通知或流式输出。
sequenceDiagram participant LLM as "大模型" participant Exec as "tool-executor.js" participant CS as "content_script" participant BG as "background" participant Agent as "本地代理" LLM->>Exec : 调用工具(名称+参数) Exec->>Exec : 参数校验/确认检查 alt 需要确认 Exec-->>LLM : 弹出确认/澄清 LLM-->>Exec : 用户决策 end alt execution=content_script Exec->>CS : 执行页面交互/提取 CS-->>Exec : 返回结构化结果 else execution=background Exec->>BG : 执行浏览器API/网络/截图/Agent BG-->>Exec : 返回结果 opt 需要访问本地代理 BG->>Agent : 文件/命令/记忆/RAG Agent-->>BG : 返回结果 end end Exec-->>LLM : 最终结果/截图/通知
图表来源
详细组件分析
浏览器工具(页面交互、表单、内容提取)
覆盖 interact_element、scroll_to、wait_element、fill_form、keyboard_input、file_upload、select_dropdown、page_content、extract_data、query_elements、search_in_page、iframe_content、scroll_collect。
- 执行环境
- content_script:interact_element、scroll_to、wait_element、fill_form、keyboard_input、file_upload、select_dropdown、search_in_page、iframe_content、scroll_collect。
- background:page_content、extract_data、query_elements。
- 并行能力
- page_content、extract_data、query_elements、search_in_page、iframe_content 标记为可并行。
- 定位策略
- 优先使用 query_elements 返回的 ref 编号进行 interact_element/fill_form/select_dropdown,避免脆弱 CSS selector。
- 当 ref 失效时,会尝试基于缓存 selector 重查,失败则提示重新查询。
- 表单自动化
- fill_form 批量填写,支持 text/select/checkbox/radio/contenteditable。
- keyboard_input 绕过 React/Vue 受控组件,适合单字段输入或快捷键。
- file_upload 通过 DataTransfer 注入文件。
- select_dropdown 兼容原生 select 与自定义下拉。
- 内容提取
- page_content 获取文本或 HTML,支持 selector 与长度限制。
- extract_data 结构化提取 table/metadata/links/forms/images。
- query_elements 返回树形快照,包含可见 iframe 子帧与打开的弹层。
- search_in_page 支持 plain/regex、大小写敏感、上下文片段与高亮。
- iframe_content 仅同源可读取,支持嵌套。
- scroll_collect 滚动收集长内容,去重拼接。
flowchart TD
Start(["开始"]) --> Choose["选择工具类型"]
Choose --> |页面交互| IE["interact_element<br/>ref/text/selector"]
Choose --> |表单| FF["fill_form / keyboard_input<br/>file_upload / select_dropdown"]
Choose --> |内容提取| PQ["query_elements / page_content<br/>extract_data / search_in_page<br/>iframe_content / scroll_collect"]
IE --> RefCheck{"ref 是否有效?"}
RefCheck --> |是| DoAction["点击/悬停/输入"]
RefCheck --> |否| Fallback["用缓存 selector 重试"]
Fallback --> ActionDone["完成"]
DoAction --> ActionDone
FF --> DoneFF["完成"]
PQ --> DonePQ["完成"]
图表来源
- src/background/tools/browser-tools.js#L4-L378
- src/content/page-interaction.js#L51-L152
- src/content/page-extract.js#L605-L663
章节来源
- src/background/tools/browser-tools.js#L4-L378
- src/content/page-interaction.js#L51-L152
- src/content/page-extract.js#L605-L663
存储工具
- manage_storage:读写 localStorage/sessionStorage,clear 需确认。
- manage_cookies:CRUD 与按域名清除 Cookie,requiresConfirmation=true。
- fetch_url:HTTP GET/POST,仅允许 http/https,内网地址需用户明确授权白名单。
flowchart TD
SStart["manage_storage/manage_cookies/fetch_url"] --> CheckScope{"是否涉及敏感操作?"}
CheckScope --> |是| Confirm["用户确认"]
CheckScope --> |否| Proceed["直接执行"]
Confirm --> Proceed
Proceed --> Result["返回结果/错误"]
图表来源
章节来源
标签页管理工具
- manage_tab:open/switch/close/reload/navigate,close 需确认。
- list_tabs:all/active 模式,可选 includeUrl/includeTitle。
- search_browser_data:书签/历史搜索。
章节来源
调试工具(DevTools Protocol)
- debug_page:attach/detach/evaluate/input/network/screenshot/emulate。
- 设计原则:仅在常规工具无法满足时使用(如原生事件、抓包、最早时机 JS、全屏截图、设备模拟)。
- attach 需要用户确认,并在标签页显示黄色调试栏,完成后应 detach。
章节来源
媒体工具
- notify:桌面通知,支持声音类型。
- clipboard:copy/paste/get_selected。
- download_file:下载文件,requiresConfirmation=true。
- qrcode:生成二维码。
- capture_page:download/analyze/both,支持视觉模型分析。
章节来源
AI 工具
- clarify_question:向用户提问并暂停执行直到响应。
- plan_task:复杂任务拆解,支持 sequential/parallel/dependency 策略与失败策略、并发上限、重试次数。
- search_chats:对话历史检索。
- preview_ui:预览/加载 UI 原型。
- dispatch_task:派发子任务给子代理。
- doneCriteria:plan_task 的子任务达标断言 schema,由 completion verification 控制动态注入。
章节来源
本地代理工具
- agent_file:read/write/list/delete/download。
- agent_trash:list/restore。
- agent_exec:shell 命令执行,带超时与多端安全约束。
- agent_search:file/content 搜索。
- agent_skill:load/run Skill。
- manage_agent:list/switch 已配对代理。
- exec_log:提取历史执行日志。
- take_note:记录短期工作笔记。
章节来源
长期记忆工具
- agent_memory:store/recall/manage,支持 fact/summary、importance 范围、tags 过滤、limit 等。
章节来源
依赖关系分析
- 工具定义聚合:background/constants.js 导入 browser-tools、tab-tools、storage-tools、media-tools、ai-tools、agent-tools、memory-tools、debugger-tools,合并为 RAW_TOOLS,并派生 BUILTIN_TOOLS、CATEGORY_ORDER、TOOL_EXECUTION_MAP、PARALLELIZABLE_TOOLS、CONFIRMATION_REQUIRED_TOOLS、CONFIRMATION_ACTION_MAP、BUILTIN_TOOLS_UI。
- 执行器依赖:tool-executor.js 依赖 constants.js 提供的元数据,同时依赖 local-agent-client、stream-controller、tool-screenshot、tool-memory、tool-debugger、notifier、react-loop、snapshot-orchestrator 等。
- 页面侧依赖:content/page-interaction.js 与 content/page-extract.js 被 background 工具在执行期调用。
graph LR CT["constants.js<br/>RAW_TOOLS/CATEGORY_ORDER/..."] --> EX["tool-executor.js<br/>注册/调度/确认/截图/MCP/RAG"] BT["browser-tools.js"] --> CT ST["storage-tools.js"] --> CT TT["tab-tools.js"] --> CT MT["media-tools.js"] --> CT AT["ai-tools.js"] --> CT AGT["agent-tools.js"] --> CT MEM["memory-tools.js"] --> CT DBG["debugger-tools.js"] --> CT EX --> PI["page-interaction.js"] EX --> PE["page-extract.js"]
图表来源
章节来源
性能考虑
- 优先使用 query_elements 的 ref 定位,减少 CSS selector 复杂度与匹配成本。
- 对长列表/无限滚动使用 scroll_collect,合理设置 maxScrolls 与 pauseMs,避免频繁滚动导致卡顿。
- 并行工具(page_content、extract_data、query_elements、search_in_page、iframe_content)可在同一轮中并发调用,但注意目标页面状态一致性。
- 控制 page_content/extract_data 的输出规模(maxLength、maxResults),避免过大结果影响上下文预算。
- 截图 analyze 模式有额外视觉模型开销,按需启用 visionMaxDim/visionQuality。
- 使用 wait_navigation/wait_element 等待关键状态后再继续,减少无效重试。
- 对耗时较长的 Agent 命令,合理设置 timeoutMs,避免长时间占用资源。
[本节为通用指导,不直接分析具体文件]
故障排查指南
- 未知工具/未知 action:检查工具定义与参数枚举是否匹配。
- 标签页不可用:确认 tabId 是否存在且可访问;系统页面不允许使用工具。
- Content Script 注入失败:检查页面是否允许注入,或目标是否为错误页。
- 内网地址访问被拒:fetch_url 与 manage_tab(open) 均受内网访问策略限制,需在扩展设置开启“内网地址访问”并将主机加入允许列表。
- 用户未确认:requiresConfirmation 或 confirmationActions 触发的操作需用户确认,否则中止。
- 导航/DOM 变化导致 ref 失效:重新调用 query_elements 获取最新快照。
- 截图分析失败:检查视觉模型 API 配置与可用性。
- 命令执行超时/无 exitCode:查看命令输出与退出码,必要时缩短命令或调整超时。
章节来源
- src/background/tool-executor.js#L24-L229
- src/background/tools/storage-tools.js#L54-L76
- src/background/tools/tab-tools.js#L12-L29
结论
内置工具集以清晰的分类与统一的定义-执行分离架构,提供了从页面交互、表单自动化、内容提取到存储、标签页、媒体、AI 协作与本地代理的全链路能力。通过 ref 定位、并行化、确认机制与安全边界,既提升了自动化效率,也保障了安全性与稳定性。建议在复杂任务中使用 plan_task 分解步骤,结合 query_elements 与 scroll_collect 提升鲁棒性,并通过截图与日志辅助排障。
[本节为总结性内容,不直接分析具体文件]
附录:最佳实践与示例路径
- 元素定位策略
- 首选 query_elements 返回的 ref,再使用 interact_element/fill_form/select_dropdown。
- 参考路径:src/background/tools/browser-tools.js#L11-L31、src/background/tools/browser-tools.js#L231-L307。
- 表单自动化
- 批量填写用 fill_form;React/Vue 受控组件用 keyboard_input;文件上传用 file_upload;下拉用 select_dropdown。
- 参考路径:src/background/tools/browser-tools.js#L127-L229。
- 数据抓取
- 结构化数据用 extract_data;纯文本/HTML 用 page_content;长内容用 scroll_collect;iframe 内容用 iframe_content。
- 参考路径:src/background/tools/browser-tools.js#L231-L378、src/content/page-extract.js#L605-L663。
- 页面交互模式
- 先 wait_element/wait_navigation 等待关键状态,再进行 click/type/hover。
- 参考路径:src/background/tools/browser-tools.js#L34-L105。
- 存储与网络
- manage_storage/clear 需确认;manage_cookies 全局清除需确认;fetch_url 仅 http/https,内网需白名单。
- 参考路径:src/background/tools/storage-tools.js#L3-L76。
- 标签页与书签历史
- manage_tab(close 需确认);list_tabs 获取 active tabId;search_browser_data 搜索书签/历史。
- 参考路径:src/background/tools/tab-tools.js#L3-L74。
- 调试与媒体
- debug_page 仅在必要时使用;capture_page 支持 analyze;download_file 需确认。
- 参考路径:src/background/tools/debugger-tools.js#L1-L103、src/background/tools/media-tools.js#L51-L113。
- AI 协作与计划
- plan_task 单独调用,指定 requiredTools;clarify_question 用于歧义澄清;dispatch_task 派发子任务。
- 参考路径:src/background/tools/ai-tools.js#L3-L128。
- 本地代理与记忆
- agent_exec 设置超时;agent_file/agent_trash 谨慎删除;agent_memory 维护事实与摘要。
- 参考路径:src/background/tools/agent-tools.js#L49-L187、src/background/tools/memory-tools.js#L3-L40。
章节来源
- src/background/tools/browser-tools.js#L34-L378
- src/background/tools/storage-tools.js#L3-L76
- src/background/tools/tab-tools.js#L3-L74
- src/background/tools/debugger-tools.js#L1-L103
- src/background/tools/media-tools.js#L51-L113
- src/background/tools/ai-tools.js#L3-L128
- src/background/tools/agent-tools.js#L49-L187
- src/background/tools/memory-tools.js#L3-L40