Skip to content

工具规划

工具规划是 GodeX 将统一的 Responses API 工具声明集合转换为提供者特定工具配置的过程。由于不同提供者支持不同的工具类型、对工具数量有不同限制、并使用不同的命名约定,GodeX 必须为每个工具决定是原生传递、降级为兼容类型还是完全忽略。此规划在每次请求时执行一次,其结果同时被请求构建器和响应重建器消费。

概览

关注点组件关键文件
工具规划编排planToolstool-plan.ts:66
目录构建器buildToolCatalogtool-catalog.ts:9
单工具声明规划planToolDeclarationtool-plan.ts:108
名称分配createProviderNameAllocatortool-plan.ts:157
身份映射ToolIdentityMaptool-identity.ts:18
调用还原restoreToolCallcall-restorer.ts:16
声明渲染renderProviderToolDeclarationsdeclaration-renderer.ts:29
工具选择规划planProviderToolChoicetool-plan.ts:198

规划流程

planTools 函数 (tool-plan.ts:66) 编排整个规划过程:

单工具决策逻辑

对于目录中的每个工具,planToolDeclaration (tool-plan.ts:108) 做出以下三种决策之一:

决策条件结果
supported(支持)工具类型在 nativeToolTypes以相同类型直接传递
degraded(降级)工具类型在 degradedToolTypes映射为提供者兼容的类型
ignored(忽略)工具类型完全不支持完全跳过声明

提供者名称分配

提供者命名约束要求经过清理的唯一工具名称。createProviderNameAllocator (tool-plan.ts:157) 返回一个闭包,该闭包:

  1. 应用 toProviderName 编解码器(默认为 tool-identity.ts:54 中的 defaultToolNameCodec
  2. 将名称清理为仅包含字母数字、下划线和连字符(最多 64 个字符)
  3. 通过后缀追加(_2_3 等)进行去重

工具身份映射

ToolIdentityMap (tool-identity.ts:18) 维护请求的工具名称与提供者分配名称之间的双向映射。它在规划阶段填充,在响应重建阶段消费,用于将提供者工具调用映射回原始请求类型。

字段描述
requestedName原始 Responses API 请求中的名称
providerName发送给提供者的清理后名称
requestedType原始工具类型(如 customlocal_shell
providerType提供者侧工具类型(如 function

该映射强制唯一性:如果两个不同的工具映射到相同的提供者名称,它会抛出 BRIDGE_REQUEST_UNSUPPORTED_PARAMETER 错误 (tool-identity.ts:23)。

工具选择规划

工具选择在 planProviderToolChoice (tool-plan.ts:198) 中规划:

请求的选择解析逻辑
none返回 undefined(不发送工具选择)
"auto" / "required"如果提供者支持则直接支持;否则降级为 "auto"(如果可用),或拒绝
显式指定(如 {type: "function", name: "x"}与声明匹配;如果提供者无法强制指定类型则降级

renderProviderToolChoice 函数 (tool-choice.ts:19) 将规划后的选择转换为提供者特定格式。

声明渲染

renderProviderToolDeclarations (declaration-renderer.ts:29) 将每个 ToolDeclarationPlan 转换为提供者期望的格式:

提供者类型渲染逻辑
function标准 ChatFunctionToolDeclaration,包含 name、description、parameters
web_search提供者特定的网络搜索配置
retrieval文件搜索,包含来自 vector_store_idsknowledge_id
mcpMCP 服务器配置,包含 server_labelheaders

自定义工具通过 degradedCustomToolDescriptiondegradedCustomToolParameters(来自 custom-tool-degradation.ts:14)进行降级,将自定义工具的 input 字段包装为单个字符串参数。

内置工具类型(local_shellshellapply_patch)使用 builtin.ts:9 中的定义。

调用还原

当提供者在响应中返回工具调用时,restoreToolCall (call-restorer.ts:16) 使用身份映射重建正确的 Responses API 项类型:

每种特化类型(如 LocalShellCallShellCall)尝试将原始 JSON 参数解析为结构化操作。如果解析失败,则回退为带有请求名称的通用 FunctionCall (call-restorer.ts:45)。

最大工具数强制

assertMaxTools (tool-plan.ts:175) 在规划的声明数量超过提供者的 maxTools 限制时抛出 BridgeError。这防止发送超出提供者处理能力的工具数量。

交叉引用

参考