当前位置: 首页 > article >正文

WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入

WeClaw_42_Agent工具注册全链路从BaseTool到意图识别的标准化接入作者: WeClaw 开发团队日期: 2026-03-29版本: v1.0标签: Agent 工具、BaseTool、意图识别、渐进式暴露、延迟注入 摘要本文系统讲解 WeClaw Agent 工具注册的完整链路。当需要将一个新功能如远程文件分享注册为 LLM 可调用的 Agent 工具时需要经历 8 个步骤的标准化流程。文章以remote_file_share工具为实战案例深入剖析 BaseTool 抽象基类、ActionDef 定义、tools.json 配置、意图识别三表联动、渐进式工具暴露引擎、延迟依赖注入等核心机制。核心收获 掌握 BaseTool 抽象基类和 ActionDef 模型⚙️ 理解 tools.json 声明式工具注册 学会意图识别三表联动CATEGORIES MAPPING PRIORITY 掌握渐进式工具暴露的三级策略 了解延迟依赖注入模式的应用场景 需求背景为什么需要工具注册从能做到会调在第 41 篇中我们实现了send_file_to_pwa()等文件传输方法。但这些方法只是RemoteBridgeClient的内部 API大模型LLM无法自动调用。用户: 帮我做个 PPT 发到手机上 ❌ 没有工具注册时 AI: PPT 已生成保存在 generated/xxx.pptx ← 无法发送 ✅ 注册为 Agent 工具后 AI: 1. 调用 ppt_generator 生成 PPT 2. 自动调用 remote_file_share_send_file(file_pathgenerated/xxx.pptx) 3. PPT 已生成并发送到你的手机完整注册链路一览① 创建工具模块 → ② tools.json → ③ 意图关键词 → ④ 工具映射 ↓ ↓ ↓ ↓ BaseTool 子类 声明式注册 INTENT_CATEGORIES INTENT_TOOL_MAPPING ↓ ⑧ 全链路校验 ← ⑦ GUI 注入 ← ⑥ 构造参数 ← ⑤ 工具名前缀 ↓ ↓ ↓ ↓ validate.py gui_app.py registry.py tool_exposure.py 步骤一创建工具模块BaseTool 抽象基类所有 Agent 工具都继承自BaseTool需实现两个核心方法fromsrc.tools.baseimportActionDef,BaseTool,ToolResult,ToolResultStatusclassRemoteFileShareTool(BaseTool):远程文件分享工具。nameremote_file_shareemojititle远程文件分享description将桌面端文件发送到 PWA 端timeout180# 大文件上传超时defget_actions(self)-list[ActionDef]:定义工具支持的动作列表。...asyncdefexecute(self,action:str,params:dict)-ToolResult:执行指定动作。...ActionDef 定义每个 Action 定义为一个ActionDef包含名称、描述和 JSON Schema 参数defget_actions(self)-list[ActionDef]:return[ActionDef(namesend_file,description(将桌面端本地文件发送到 PWA 端用户。当你为远程 PWA 用户生成了文件必须调用此工具将结果发送回去。),parameters{file_path:{type:string,description:要发送的本地文件绝对路径,},description:{type:string,description:文件描述会显示在 PWA 端,},user_id:{type:string,description:目标 PWA 用户 ID留空则发送给当前会话用户,},},required_params[file_path],),ActionDef(namesend_files,description将多个桌面端本地文件批量发送到 PWA 端用户。,parameters{file_paths:{type:array,items:{type:string},description:要发送的本地文件路径列表,},# ...},required_params[file_paths],),ActionDef(namesend_voice,description将语音/音频文件作为语音消息发送到 PWA 端。,parameters{file_path:{type:string,...},transcript:{type:string,...},# ...},required_params[file_path],),]Schema 生成机制BaseTool.get_schema()自动将 ActionDef 转换为 OpenAI Function Calling 兼容格式# 函数名格式{tool_name}_{action_name}# 例如remote_file_share_send_file# 生成的 schema 示例{type:function,function:{name:remote_file_share_send_file,description:将桌面端本地文件发送到 PWA 端用户...,parameters:{type:object,properties:{file_path:{type:string,...},description:{type:string,...},user_id:{type:string,...},},required:[file_path]}}}⚙️ 步骤二tools.json 声明式注册{remote_file_share:{enabled:true,module:src.tools.remote_file_share,class:RemoteFileShareTool,display:{name:远程文件分享,emoji:,description:将桌面端本地文件发送到 PWA 端,category:communication},config:{},security:{risk_level:low,require_confirmation:false},actions:[send_file,send_files,send_voice]}}字段说明| 字段 | 作用 ||------|------||module/class| 动态导入路径 ||display.category| 意图分类关联 ||config| 传递给构造函数的参数 ||security.risk_level| 高风险工具需用户确认 ||actions| 声明支持的动作用于校验 | 步骤三~四意图识别三表联动WeClaw 的意图识别系统基于三张核心映射表协同工作表一INTENT_CATEGORIES — 关键词 → 意图INTENT_CATEGORIES:dict[str,list[str]]{communication:[发送文件,发文件到手机,传文件,分享文件,发到PWA,发送到手机,传到手机,发给手机,发送语音,语音消息,发语音,录音发送,远程分享,远程发送,文件传输,文件分享,发到浏览器,发送到浏览器,],# ... 其他 17 个意图维度}表二INTENT_TOOL_MAPPING — 意图 → 工具列表INTENT_TOOL_MAPPING:dict[str,list[str]]{communication:[wechat,remote_file_share],# ... 其他意图}表三INTENT_PRIORITY_MAP — 工具优先级INTENT_PRIORITY_MAP:dict[str,dict[str,list[str]]]{communication:{recommended:[wechat,remote_file_share],alternative:[],},# ... 其他意图}三表协同工作流用户输入: 把这份报告发到手机上 ↓ INTENT_CATEGORIES 匹配: 发到手机 → communication (置信度 0.9) ↓ INTENT_TOOL_MAPPING 查找: communication → [wechat, remote_file_share] ↓ INTENT_PRIORITY_MAP 排序: recommended → [wechat, remote_file_share] ↓ 渐进式暴露引擎: 高置信度 → 仅暴露 recommended 工具 ↓ LLM 可见工具: [wechat, remote_file_share] (而非全部 51 工具) 步骤五工具名前缀注册多下划线工具名的解析难题LLM 调用函数时使用{tool_name}_{action_name}格式remote_file_share_send_file │ │ │ │ └─── tool_name ───┘ └ action┘但简单按第一个下划线拆分会得到错误结果remote_file_share_send_file.split(_)[0]# → remote ❌解决方案known_prefixes 前缀表def_extract_tool_name(func_name:str)-str:从函数名中提取工具名。known_prefixes[browser_use,app_control,voice_input,remote_file_share,# 本次新增daily_task,medication,# ... 共 40 前缀]forprefixinknown_prefixes:iffunc_name.startswith(prefix_)orfunc_nameprefix:returnprefix# 默认取第一个下划线前的部分returnfunc_name.split(_)[0]if_infunc_nameelsefunc_name注意事项validate_tool_chain.py中也有一份硬编码的前缀列表需同步更新。 步骤六~七构造参数与依赖注入registry.py — 构造参数映射def_build_init_kwargs(self,tool_name:str,cfg:dict)-dict:从工具配置中提取构造参数。kwargs{}tool_configcfg.get(config,{})iftool_nameshell:kwargs[timeout]tool_config.get(timeout,30)eliftool_namebrowser:kwargs[headless]tool_config.get(headless,False)eliftool_nameremote_file_share:# 无构造参数bridge_client 通过延迟注入pass# ... 50 工具分支returnkwargs延迟依赖注入模式RemoteFileShareTool依赖RemoteBridgeClient但两者的创建时机不同时间线 1. gui_app.py 创建 ToolRegistry → 注册所有工具含 RemoteFileShareTool 2. gui_app.py 创建 MainWindow → MainWindow 创建 RemoteBridgeClient 3. gui_app.py 将 bridge_client 注入到 RemoteFileShareTool ← 延迟注入注入代码# gui_app.py — MainWindow 创建后remote_bridgegetattr(self._window,_remote_bridge,None)ifremote_bridge:rfs_toolself._tool_registry.get_tool(remote_file_share)ifrfs_toolandhasattr(rfs_tool,set_bridge_client):rfs_tool.set_bridge_client(remote_bridge)logger.info(已为 remote_file_share 工具注入 bridge_client)工具端接口classRemoteFileShareTool(BaseTool):def__init__(self)-None:self._bridge_clientNone# 延迟注入defset_bridge_client(self,bridge_client)-None:注入 RemoteBridgeClient 实例。self._bridge_clientbridge_clientdef_check_bridge(self)-ToolResult|None:检查 bridge 是否可用。ifnotself._bridge_client:returnToolResult(statusToolResultStatus.ERROR,error远程桥接客户端未初始化)ifnotself._bridge_client.is_connected:returnToolResult(statusToolResultStatus.ERROR,error远程桥接未连接)returnNone自动选取 PWA 用户当 LLM 未指定user_id时自动选取第一个在线 PWA 用户def_resolve_user_id(self,params:dict)-str:解析目标用户 ID。user_idparams.get(user_id,)ifuser_id:returnuser_id# 自动选取当前在线的 PWA 用户ifself._bridge_clientandself._bridge_client.stats.pwa_connections:first_connself._bridge_client.stats.pwa_connections[0]returnfirst_conn.user_idreturn✅ 步骤八全链路校验validate_tool_chain.py 七项检查$ python scripts/validate_tool_chain.pyWinClaw 工具全链路一致性校验已加载 tools.json:58个启用工具 ✅[1/7]INTENT_TOOL_MAPPING 覆盖:58工具 ✅[2/7]INTENT_TOOL_MAPPING 引用有效 ✅[3/7]INTENT_PRIORITY_MAP 引用有效 ✅[4/7]_extract_tool_name 已知前缀覆盖 ✅[5/7]dependencies 引用有效 ✅[6/7]_build_init_kwargs 覆盖 ✅[7/7]三表 key 对齐:18个意图 结果:7通过,0警告,0失败校验项说明| 校验 | 检查内容 | 确保 ||------|---------|------|| [1] | tools.json 中的工具是否都在 MAPPING 中 | 不遗漏 || [2] | MAPPING 引用的工具是否都在 tools.json 中 | 不多引 || [3] | PRIORITY 引用的工具是否都在 tools.json 中 | 不多引 || [4] | 多下划线工具名在 known_prefixes 中 | 解析正确 || [5] | 依赖的 input_sources 工具存在 | 依赖有效 || [6] | _build_init_kwargs 有对应分支 | 构造正确 || [7] | 三表的 key 完全对齐 | 意图一致 | 经验教训1. 前缀表需双重同步教训只更新了tool_exposure.py的known_prefixes校验仍然失败。原因validate_tool_chain.py中有一份硬编码的副本也需要同步更新。最佳实践每次新增多下划线工具必须同时更新两处。2. 延迟注入的时序依赖教训工具注册在 ToolRegistry 创建时完成但 bridge 在 MainWindow 创建时才存在。解决方案使用set_bridge_client()模式与 CronTool 的set_agent_dependencies()保持一致。3. 意图关键词的覆盖度教训初始只添加了发送文件一个关键词用户说传到手机时无法匹配。解决方案充分枚举同义变体18 个关键词覆盖各种口语表达。 架构总结工具注册八步标准流程| 步骤 | 文件 | 内容 ||------|------|------|| ① |src/tools/xxx.py| 创建 BaseTool 子类 || ② |config/tools.json| 声明式注册 || ③ |src/core/prompts.py| INTENT_CATEGORIES 关键词 || ④ |src/core/prompts.py| INTENT_TOOL_MAPPING PRIORITY || ⑤ |src/core/tool_exposure.py| known_prefixes 前缀 || ⑥ |src/tools/registry.py| _build_init_kwargs 分支 || ⑦ |src/ui/gui_app.py| 延迟依赖注入按需 || ⑧ |scripts/validate_tool_chain.py| 全链路校验 |字数统计: 约 5,200 字阅读时间: 约 14 分钟代码行数: 约 350 行4. 3. 2. 4. 3. - - - - -

相关文章:

WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入

WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入作者: WeClaw 开发团队 日期: 2026-03-29 版本: v1.0 标签: Agent 工具、BaseTool、意图识别、渐进式暴露、延迟注入📖 摘要 本文系统讲解 WeClaw Agent 工具注册的完整链路。当需要将一…...

Go性能剖析pprof工具使用

Go语言凭借其高效的并发模型和简洁的语法,成为众多开发者的首选。随着项目规模扩大,性能问题逐渐显现。如何快速定位性能瓶颈?Go内置的pprof工具正是解决这一问题的利器。本文将带你深入了解pprof的核心功能,助你轻松优化代码性能…...

C++ 智能指针的生命周期陷阱

C智能指针的生命周期陷阱:隐藏的坑与破解之道 在现代C开发中,智能指针作为资源管理的利器,极大减轻了开发者手动管理内存的负担。看似简单的shared_ptr、unique_ptr和weak_ptr背后,却隐藏着微妙的生命周期陷阱。这些陷阱可能导致…...

4款降AI率工具实测横评:最便宜和最贵的效果差多少?

花了几百块,测了一圈,现在把结果告诉你。 降AI率工具、降AI工具保姆级测评2026、降AI这个需求,不同工具之间差距其实挺明显的,不是"随便用一个都一样"。 我的结论:嘎嘎降AI(www.aigcleaner.com…...

DeepSeek句式重构指令怎么用?手把手教你降AI率超过30%

第一次操作的话,照着下面的步骤来,15分钟内搞定DeepSeek句式重构指令、降AI、降AIGC率。 工具选嘎嘎降AI(www.aigcleaner.com),达标率99.26%,有退款保障,操作也不复杂。 准备工作 需要准备的&…...

火影AI绘画实战:用忍者绘卷Z-Image Turbo生成鸣人、佐助角色图教程

火影AI绘画实战:用忍者绘卷Z-Image Turbo生成鸣人、佐助角色图教程 1. 教程概述与准备工作 如果你是火影忍者的粉丝,现在可以通过AI技术轻松生成你最喜欢的角色图像。本教程将带你使用"忍者绘卷Z-Image Turbo"这个专门为火影风格优化的AI绘画…...

问道1.6夏日清风单机虚拟机版|200+礼包加持·最强方官1.6完整体验

温馨提示:文末有联系方式【全新封装|问道1.6夏日清风单机虚拟机版】 本版本基于稳定虚拟机环境深度优化,完美集成‘夏日清风’主内容与当前最成熟的‘最强方官1.6’核心框架,运行零冲突、免配置,开箱即玩。【超值&…...

MStar-Bin-Tool-Master中文版|晨星芯片BIN固件解包/封包工具(适配机顶盒与智能电视)

温馨提示:文末有联系方式工具简介 MStar-Bin-Tool-Master中文增强版是一款专为晨星(MStar)系列主控芯片设计的固件解析与重构工具,全面支持主流机顶盒与智能液晶电视所用BIN格式刷机包,提供直观易用的图形化操作界面&a…...

汽车动力性能计算工具插件:一键测算电机需求与整车性能,工程师专属轻量级辅助软件

温馨提示:文末有联系方式插件核心功能亮点 本款汽车动力性系统专用计算小工具,可精准推演电机功率与扭矩需求,同步输出整车加速性能、最大爬坡度、最高稳定车速等关键动力参数,覆盖常规工况与典型驱动场景,满足前期方案…...

C++的std--ranges容错系统

C的std::ranges容错系统:现代编程的稳健之道 在C20标准中,std::ranges库的引入彻底改变了算法与容器的交互方式,其容错机制为开发者提供了更安全、更灵活的编程体验。传统迭代器容易因越界或无效操作导致未定义行为,而std::range…...

从“看见光点”到“看懂世界”:视觉重建让这个世界变得更近一些

三十多年前,“让盲人重新看见”更像一句带有未来感的科学想象。而今天,这件事已经进入临床试验和真实的人体研究。视觉重建之所以被视为脑机接口里最具挑战性的方向之一,不只是因为它要解决“能不能刺激大脑”的问题,更因为它要回…...

从芯片设计到产线测试:深入浅出聊聊DFT中的SCAN链设计与JTAG标准(含IEEE 1149.1)

从芯片设计到产线测试:深入浅出聊聊DFT中的SCAN链设计与JTAG标准(含IEEE 1149.1) 在芯片设计领域,可测试性设计(DFT)早已从"锦上添花"变成了"不可或缺"的核心环节。想象一下&#xff0…...

前端 HTML 转 PDF

spdf 两个库转换成 PDF 文件并下载到本地。 简单说:它能让用户 “一键下载” 网页上的某个区域为 PDF(比如报表、数据统计页、合同预览页等),还预留了 “水印功能” 的注释代码(可按需启用)。 核心依赖说…...

如何用Bypass Paywalls Clean突破付费墙限制?技术解析与实战指南

如何用Bypass Paywalls Clean突破付费墙限制?技术解析与实战指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字内容付费墙日益严密的今天,Bypass Payw…...

国产N32芯片开发避坑指南:J-Link在Keil中的特殊配置(含Cortex-M0配置模板)

国产N32芯片开发实战:J-Link调试配置深度解析与Keil环境优化 在国产MCU生态快速崛起的背景下,N32系列芯片凭借优异的性价比和本土化服务优势,正逐步成为工程师替代进口方案的新选择。然而,从传统ST芯片转向国产平台时,…...

DeepSeek风格迁移降AI怎么用?从0到1完整操作教程

第一次操作的话,照着下面的步骤来,15分钟内搞定DeepSeek风格迁移降AI、降AI、降AIGC率。 工具选嘎嘎降AI(www.aigcleaner.com),达标率99.26%,有退款保障,操作也不复杂。 准备工作 需要准备的&…...

第一次降AIGC率不知道从哪入手?这份保姆级操作手册帮你

第一次操作的话,照着下面的步骤来,15分钟内搞定降AIGC率、降AI工具保姆级测评2026、降AI。 工具选嘎嘎降AI(www.aigcleaner.com),达标率99.26%,有退款保障,操作也不复杂。 准备工作 需要准备的…...

基于MCGS嵌入版7.7的全自动洗车机组态仿真程序编写与流程图详解

MCGS洗车程序 MCGS嵌入版7.7组态仿真程序 全自动洗车机,脚本程序编写 有完整的流程图"这洗车机PLC程序怎么又卡在喷淋环节了?"凌晨两点的工控车间里,我盯着MCGS嵌入版的仿真界面直挠头。全自动洗车机的脚本调试真是个磨人的小妖精&…...

2026年硕士论文降AIGC率必备工具:4款实测效果对比

试了四五款工具,最后留下来的就这几个。先说结论:降AIGC率这个需求,嘎嘎降AI(www.aigcleaner.com)是目前性价比最高的选择,4.8元/千字,达标率99.26%。 如果对价格不敏感、对知网特别严格&#…...

电力系统输电线路距离保护建模与仿真:方向阻抗继电器探秘

1.电力系统输电线路距离保护的建模与仿真matlab/simulink仿真模型 2.方向阻抗继电器 (1)“0度接线”方向阻抗继电器的构造 (2)“相电压和具有K3I0补偿的相电流接线”的方向阻抗继电器模块的构造在电力系统中,输电线路距…...

SSM+JSP洪涝灾情应急物资管理系统源码+论文

代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

Realtek 8852AE Wi-Fi 6驱动深度解析与实战指南

Realtek 8852AE Wi-Fi 6驱动深度解析与实战指南 【免费下载链接】rtw89 Driver for Realtek 8852AE, an 802.11ax device 项目地址: https://gitcode.com/gh_mirrors/rt/rtw89 问题引入:Wi-Fi 6网卡在Linux环境下的兼容性挑战 当您的Linux系统无法识别Realt…...

如何3步掌握Home Assistant SSH Web终端:从零到精通的管理指南 ✨

如何3步掌握Home Assistant SSH Web终端:从零到精通的管理指南 ✨ 【免费下载链接】app-ssh Advanced SSH & Web Terminal - Home Assistant Community Apps 项目地址: https://gitcode.com/gh_mirrors/ad/app-ssh 在智能家居系统的日常维护中&#xff0…...

SSM+Vue大学生兼职网站源码+论文

代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

AI正冲击金融岗!高薪职业如何守住饭碗?金融人转行AI指南

AI技术正全面冲击金融行业,初级分析师、风控专员、客服等中低端认知劳动密集型岗位面临被替代风险。但高端投行、深度研究、资源型和创新型岗位短期内仍安全。金融人转型AI有独特优势,如数据敏感性、业务理解力等。转型路径包括AI应用专家、金融科技产品…...

自学嵌入式第三天

选择排序 先找再换,每轮先找最小的再做交换每一轮的第一个数作为最小,从第二个数开始比较选出最小值交换到第一个位置。插入排序 一列数从第二个开始作为要插入的数a,逐个向前比较,比a大的数向后移一位,直到遇见比a小…...

开源新形态:从代码到Prompt的转变

【导语:3月末,开源作者yetone发布新项目voice-input-src,以独特方式“开源”,即用自然语言Prompt生成代码,此做法引发讨论,或预示开源模式新转变。】AI驱动的语音输入法开源项目开源作者yetone在GitHub上发…...

Python高效开发技巧汇总

这是一篇关于Python开发的技术文章示例内容,可以替换为真实文章内容。...

GitHub功能多元拓展,korb工具革新REWE购物流程

【导语:GitHub提供了涵盖AI代码创作、开发者工作流、应用程序安全等多方面的丰富功能,同时推出不同规模和用例的解决方案。而korb命令行工具则为REWE超市购物带来新体验,可实现自动化购物流程。】GitHub:功能全面的开发者平台GitH…...

**雾计算中的边缘智能:基于Python的轻量级任务调度系统设计与实现**在物联网(IoT)飞速发展的今天,传统云

雾计算中的边缘智能:基于Python的轻量级任务调度系统设计与实现 在物联网(IoT)飞速发展的今天,传统云计算模式已难以满足低延迟、高带宽和实时响应的需求。**雾计算(Fog Computing)**作为云与终端设备之间的…...