Claude Code 0331 系统报告

第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;
}

关键设计决策:

  1. 泛型三参数Input(输入Schema类型)、Output(最终返回值)、Progress(流式进度事件)
  2. AsyncGenerator执行:工具执行是异步生成器,支持流式进度报告
  3. 故障关闭默认值buildTool() 工厂函数为所有可选字段提供安全默认值

7.2 工具装配管道

从源码加载到模型可用,工具经过以下管道:

getAllBaseTools()          // 获取所有基础工具(含条件编译)

filterToolsByDenyRules()  // 应用拒绝规则(用户配置+策略)

getTools()                // 分离核心/延迟工具

assembleToolPool()        // 构建工具池(含MCP工具)

getMergedTools()          // 合并工具(处理覆盖和别名)

7.3 延迟加载机制

ToolSearchTool 是延迟加载的枢纽。模型初始只看到核心工具集(约15个),其余工具的描述被缓存在 ToolSearchTool 内部。当模型需要特定能力时,调用 ToolSearchTool 进行关键词搜索,返回匹配工具的完整Schema。

搜索支持两种模式:

  • 关键词搜索:"notebook jupyter" → 匹配 NotebookEditTool
  • 精确选择:"select:MCPTool,LSPTool" → 直接加载指定工具

On this page