tool call 老瞎编参数,我把 schema 收紧之后成功率从 60% 到 90%
-
写 agent 的时候一直被 tool call 折腾,模型要么不调工具,要么参数乱填。
后来我发现根子在 schema 写太松:字段类型全给了 string,描述也含糊。
改法很简单:
- 能 number 就别 string,能 enum 就别放开
- required 字段老老实实标出来
- description 里写清楚「这个参数长啥样」,最好给个示例值
比如查询订单的工具,我原来 status 描述就写个「订单状态」,改成「订单状态,取值只有 paid/pending/cancelled 三个,示例:paid」之后,瞎填的情况基本没了。
{ "name": "query_order", "parameters": { "order_id": { "type": "string", "description": "订单号,格式 ORD-2024-XXXXX" }, "status": { "type": "string", "enum": ["paid", "pending", "cancelled"], "description": "订单状态,示例:paid" } }, "required": ["order_id"] }这招对 gpt 和 qwen 都有效。