Claude Code中工具列表的构建机制及调用优先级

2026-03-02  本文已影响0人  梅西爱骑车

关于 Claude Code工具列表的构建机制及调用优先级问题。

大模型本身并不直接感知“官方”、"MCP"、"Skills"或"Workflow"这些分类标签,它看到的只是一个统一的 tools JSON 数组。

以下是详细的架构解析、注入方式及优先级逻辑:


一、工具是如何写入 tools 列表提示词中的?

在 API 请求层面,所有工具最终都会被标准化为 Anthropic Tool Use 的 JSON Schema 格式。客户端(如 Claude Code CLI)负责在发送请求给模型前,将不同来源的工具“组装”成一个列表。

1. 17 个官方工具 (Built-in Tools)

2. 自定义 MCP 工具 (Model Context Protocol)

3. Skills (技能)

4. Workflows (工作流)

组装后的最终 tools 列表示例

模型收到的 tools 参数是一个扁平的 JSON 数组:

"tools": [
  // 1. 官方工具 (通常排在前面)
  { "name": "bash", "description": "...", "input_schema": {...} },
  { "name": "edit", "description": "...", "input_schema": {...} },
  // ... 其他官方工具

  // 2. MCP 工具 (动态追加)
  { "name": "query_database", "description": "Query the production DB via MCP...", "input_schema": {...} },
  
  // 3. 技能
  { "name": "skills", "description": "available skills: -skill1:skill1 desc -skill2:skill2 desc ...", "input_schema": {...} }
  // 4. 工作流封装的工具
  { "name": "run_code_review_skill", "description": "Perform a deep code review...", "input_schema": {...} }
]

二、大模型有调用优先级吗?

简短回答:没有硬性的代码级优先级,但有基于概率和提示词的“软优先级”。

模型是概率生成的,它不会像代码里的 if-else 那样优先执行列表第一个工具。优先级的体现主要依赖以下三个因素:

1. 描述(Description)的语义匹配度 (最重要)

2. 系统提示词 (System Prompt) 的指令

3. 工具列表的顺序 (Ordering)

4. 客户端过滤 (Client-Side Filtering)


三、总结与最佳实践

如果你正在开发基于 Claude 的 Agent 或配置 MCP 工具,想要控制工具调用优先级,请遵循以下策略:

控制维度 操作方法 优先级影响
System Prompt 明确写出“优先使用 X 工具”、“仅在 X 不可用时使用 Y"。 ⭐⭐⭐⭐⭐ (最高)
工具描述 在 Description 中强调场景(“这是处理 SQL 的首选工具”)。 ⭐⭐⭐⭐
工具命名 使用语义清晰的名称(safe_delete vs delete)。 ⭐⭐⭐
列表顺序 将高频、核心工具放在 tools 数组的前部。 ⭐⭐ (微弱)
动态过滤 在客户端代码中,根据上下文移除不需要的工具。 ⭐⭐⭐⭐⭐ (硬性控制)

关于 Skills 和 Workflows 的特别建议:
不要试图让模型去“理解”什么是 Skill 或 Workflow。将它们工具化

通过这种方式,无论底层是官方工具、MCP 还是自定义逻辑,对模型来说都是平等的“能力选项”,而你通过 System PromptDescription 来引导它的选择。

上一篇 下一篇

猜你喜欢

热点阅读