篇章三 · 3.4
动态注册与条件编译
篇章三最后一站。工具列表不是写死的——每次启动按 20 多个条件现装。拨下面的开关,看工具池怎么变。
工具池是现装的,不是写死的
getAllBaseTools() 返回一个高度动态的数组:内置工具、MCP 工具、实验工具按开关组合——工具按名字排序,为的是 cache key 稳定。
开关实验室 · 拨开关看工具池
条件开关
工具池 — 个
拨左边开关试试
getAllBaseTools()条件分支拼出内置数组
→
filterToolsByDenyRulesdeny 规则过滤
→
assembleToolPool合并 MCP 工具 · 按名排序保 cache 稳定
→
ToolSearch超阈值 → 部分工具按需加载
为什么按名字排序这么重要?——Prompt Cache。工具定义全量进 system prompt,顺序一变 cache key 就变,缓存全失效。排序 = 排序自由度归零 = 缓存命中率最大化。MCP 工具再怎么上下线,内置工具的 cache 前缀纹丝不动。
🎮 新装一台 MCP 服务器,为什么不会打碎内置工具的 prompt cache?
MCP 工具也进 prompt,但排在内置工具之后(按名合并排序)。内置部分的字节序列完全不变——缓存前缀继续命中,只有新增的尾巴是新写入。这就是排序的经济学。
篇章三收束:47 字段接口(3.1)→ BashTool 权限(3.2)→ FileEditTool 并发(3.3)→ 动态装配(3.4)。篇章四进安全纵深:10 个检查点的权限管线、AI 分类器、还有那道连 bypass 都跨不过的硬边界。