工具注册表 工具与循环
别名:
注册表
一张 `name →(spec + 实现 + 生成的 schema)` 的映射表,支持 `register / list / get`。模型要调工具时按名字查表取实现,新增工具只调一次 `register`,不碰分发逻辑与循环——「加一个工具 = 加一个文件」。循环只面向 `list()` / `get()`,不认任何具体工具名,见[第 08 章](/chapters/08-tool-system/)。
它是什么
工具注册表是一张 name →(spec + 实现 + 生成的 schema) 的映射表,支持 register / list / get 三个操作。它解决工具多了以后的分发不可维护问题:第 06 章那种 if (name === 'get_time') ... else if (name === 'add') ... 的分发代码,每加一个工具就要改一次中心函数;注册表把「工具在哪里」从分发代码里拆出来——加一个工具 = 调一次 register,不碰循环、不碰分发、不碰任何中心配置。
注册期与运行期
整个工具系统分两个阶段:
- 注册期:工具作者写下 spec 和实现,
register一下完事(重名直接抛错,防静默覆盖);schema 在注册时就由 schema-generation 生成好、随 entry 存下; - 运行期:Agent 循环只面向注册表——
list()拿全部 schema 发给模型,get(name)查表执行,循环不认任何具体工具的名字,所以加工具永远不需要碰循环。
依赖方向
依赖方向永远是从下往上:registry ← tools ← orchestration ← loop,注册表在最底层、不依赖任何工具,整个设计才立得住。模型要调工具时按名字查表取实现——这正是第 06 章「执行是最朴素的查表」的工程化形态,也是第 07 章循环的挂载点。