函数调用与参数 Schema
函数调用是把可用动作按 JSON Schema 描述给模型:函数名、用途说明、参数类型与必填项。模型不再输出一段自然语言让程序去解析,而是按 Schema 生成结构化调用请求,由平台侧校验参数。这比在提示里写「请输出 JSON」更严格,因为类型与枚举由平台约束,参数缺失、取值越界会在调用前被拦下。
Schema 要点
| description | 写清使用场景与参数语义,模型靠它选函数 |
|---|---|
| enum | 把取值范围收敛成封闭集合,减少同义变体 |
| required | 标明哪些参数必填,缺失时由平台拒绝 |
| 嵌套 | 参数层级不宜过深,深嵌套增加填错概率 |
| 与纯提示对比 | Schema 由平台解析与校验,参数错误率低 |
典型使用场景
- 信息查询:查天气、查订单、查库存等只读操作
- 流程触发:创建工单、发送通知、发起审批
- 数据写入:把抽取结果按固定参数写入数据库
- 多工具选择:同时声明多个函数,由模型按问题选合适的那个
- 参数校验前移:把格式要求交给 Schema,减少提示里的格式描述
函数定义示例
函数定义示例
{
"name": "get_weather",
"description": "查询指定城市当前天气", # 用途说明决定模型何时选它
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名,如 杭州"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"] # 必填项由平台校验
}
}兜底要处理的三种情况
| 情况 | 表现 | 处理 |
|---|---|---|
| 不调用 | 模型直接回答,未发起调用 | 提示里写明需要实时数据时必须调用 |
| 调错函数 | 选了语义相近的另一个函数 | 完善 description,明确适用与不适用场景 |
| 参数缺失或越界 | 缺必填项、枚举值不在集合内 | 平台校验失败后回传错误让模型修正或转人工 |
模型生成的参数不能直接当命令执行:执行前做类型、范围与权限校验,写操作与不可逆操作需二次确认。