第7章 · 工具架构
第7章 · 工具架构
7.1 Tool.ts:统一接口
Tool.ts(792行)定义了所有工具的统一接口:
interface Tool<Input, Output, Progress> {
name: string;
description: string;
inputSchema: JSONSchema;
// 核心执行
execute(input: Input, context: ToolContext): AsyncGenerator<Progress, Output>;
// 权限检查
isAllowed(input: Input, context: PermissionContext): PermissionDecision;
// 系统提示中的描述
prompt(): string;
// 是否应延迟加载
shouldDefer?: boolean;
// 是否需要用户确认
needsPermission(input: Input): boolean;
}关键设计决策:
- 泛型三参数:
Input(输入Schema类型)、Output(最终返回值)、Progress(流式进度事件) - AsyncGenerator执行:工具执行是异步生成器,支持流式进度报告
- 故障关闭默认值:
buildTool()工厂函数为所有可选字段提供安全默认值
7.2 工具装配管道
从源码加载到模型可用,工具经过以下管道:
getAllBaseTools() // 获取所有基础工具(含条件编译)
↓
filterToolsByDenyRules() // 应用拒绝规则(用户配置+策略)
↓
getTools() // 分离核心/延迟工具
↓
assembleToolPool() // 构建工具池(含MCP工具)
↓
getMergedTools() // 合并工具(处理覆盖和别名)7.3 延迟加载机制
ToolSearchTool 是延迟加载的枢纽。模型初始只看到核心工具集(约15个),其余工具的描述被缓存在 ToolSearchTool 内部。当模型需要特定能力时,调用 ToolSearchTool 进行关键词搜索,返回匹配工具的完整Schema。
搜索支持两种模式:
- 关键词搜索:
"notebook jupyter"→ 匹配 NotebookEditTool - 精确选择:
"select:MCPTool,LSPTool"→ 直接加载指定工具