Skip to content

工具系统 ToolRegistry

源码版本v2026.7.20

职责

Tool 是 agent 能调用的原子函数(终端、浏览器、文件、MCP、技能调用……)。ToolRegistry 在模块导入时通过 AST 扫描自动发现 tools/*.py 里的工具并注册,提供一个 name → ToolEntry 的查询表给主循环做工具分发。工具是静态的——与技能的「可演化」相对。

关键文件

数据流

  1. 启动期 init_agent:276 触发 toolsets 配置。
  2. discover_builtin_tools:67 遍历 tools/ 目录,用 AST 判断每个模块是否调用 registry.register(tools/registry.py:30)。
  3. 命中的模块被导入,其模块级 registry.register(...) 调用执行,把 ToolEntry 写入 registry 单例:765
  4. 主循环每轮把启用的 toolsets 对应的 ToolEntry.schema 收集进发给 provider 的 tools 字段。
  5. provider 返回 tool_call → 主循环用 get_entry(name)(tools/registry.py:274)查到 handler 执行 → 结果用 tool_result:798 封装回填。

小结

工具系统的精妙在「导入即注册」——靠 AST 扫描避免手动维护清单,新增工具只需往 tools/ 丢一个调 register 的文件。registry 单例是全局唯一真相,主循环只读它。和技能的区别:工具是死的函数,技能是可被学习循环改写的流程。

非官方社区学习站,内容以 MIT 许可的 NousResearch/hermes-agent 源码为依据。