前言

在这里插入图片描述


Tool Schema 到底是什么?

很多人在学习 Function Call 或工具调用时,都会遇到一个绕不开的概念:

Tool Schema

但只看这个名字,确实会有点抽象。

它到底是什么?
它和 API 文档有什么区别?
它为什么会直接影响大模型选工具、填参数,甚至影响整个调用效果?

这篇内容,我想把 Tool Schema 彻底讲清楚。


一、Tool Schema 到底是什么?

你可以先把它理解成:

系统写给大模型的一份“工具使用说明书”

这份说明书的目的,不是给人看,而是给模型看。
它主要解决两个问题:

  1. 这个工具是干什么的
  2. 调用这个工具时,要传什么参数,参数怎么填

所以,Tool Schema 本质上就是:

一份结构化的工具定义

它通常会包含这些内容:

  • 工具名
  • 工具功能描述
  • 参数列表
  • 参数类型
  • 参数含义说明
  • 必填字段
  • 有时还会包括枚举值、格式约束、默认值等

二、为什么 Tool Schema 很重要?

因为大模型不会直接去看你的后端代码,也不会自动理解你的数据库字段。
它真正能“看到”的,通常就是系统提供给它的 Tool Schema。

也就是说:

模型怎么理解一个工具,主要靠的不是代码本身,而是 Tool Schema。

如果 Schema 写得清楚,模型更容易:

  • 选对工具
  • 理解工具边界
  • 把参数填对
  • 稳定生成调用意图

如果 Schema 写得很差,模型就容易:

  • 选错工具
  • 明明有工具却不用
  • 参数乱填
  • 工具调用不稳定

所以 Tool Schema 不只是程序接口定义,它还是:

模型理解工具能力的入口


三、Tool Schema 和 API 文档有什么区别?

很多人会把 Tool Schema 和 API 文档混在一起。
它们确实很像,但关注点并不完全一样。

API 文档更偏向开发者

API 文档通常重点描述:

  • 接口地址
  • 请求方式
  • 状态码
  • 返回字段
  • 鉴权方式
  • 错误码说明

它更偏工程实现。

Tool Schema 更偏向模型理解

Tool Schema 更关注:

  • 这个工具适合解决什么问题
  • 模型什么时候该用它
  • 调用它需要哪些参数
  • 参数应该怎么填
  • 它和别的工具有什么区别

所以可以这样理解:

API 文档偏工程实现,Tool Schema 偏模型理解。


四、一个简单但准确的定义

如果让我用一句最简洁的话解释 Tool Schema,我会这样说:

Tool Schema,就是系统提供给大模型的结构化工具说明,用来告诉模型“这个工具能做什么,以及该怎么调用它”。


五、Tool Schema 一般长什么样?

最常见的 Tool Schema,大致会长这样:

{
  "name": "get_weather",
  "description": "查询指定城市在指定日期的天气情况",
  "parameters": {
    "city": {
      "type": "string",
      "description": "要查询天气的城市名称,例如成都"
    },
    "date": {
      "type": "string",
      "description": "要查询的日期,例如今天、明天或具体日期"
    }
  },
  "required": ["city", "date"]
}

六、几个更真实一点的案例

下面我不再只讲天气 demo,而是给你几个更接近真实业务的场景。


案例一:电商客服系统里的“订单查询工具”

业务场景

用户问:

我上周买的耳机现在到哪了?

如果系统只靠模型自己答,它根本不知道真实订单状态。
所以需要一个工具去查订单系统。

这个工具真正要做的事

不是“查所有订单数据”,而是:

根据订单号查询订单当前状态、物流节点和预计送达时间。

可能的 Tool Schema

{
  "name": "query_order_status",
  "description": "查询指定订单的当前状态、物流进度和预计送达时间",
  "parameters": {
    "order_id": {
      "type": "string",
      "description": "订单编号,例如 A202503180001"
    }
  },
  "required": ["order_id"]
}

案例二:企业内部办公助手里的“请假余额查询工具”

业务场景

用户问:

我今年还有多少年假?

这个问题表面很简单,但模型自己并不知道员工的真实人事数据。
所以必须调用 HR 系统。

工具真正要做的事

去 HR 系统查询:

  • 年假总额
  • 已用天数
  • 剩余天数

可能的 Tool Schema

{
  "name": "get_leave_balance",
  "description": "查询员工当前可用的年假、调休和病假余额",
  "parameters": {
    "employee_id": {
      "type": "string",
      "description": "员工唯一标识,例如工号 E10234"
    },
    "leave_type": {
      "type": "string",
      "description": "请假类型,可选值包括 annual_leave、compensatory_leave、sick_leave"
    }
  },
  "required": ["employee_id", "leave_type"]
}
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐