Function Calling 工具定义怎么写:工具名称、描述、参数与返回值设计提示词(让模型选对工具、填对参数)
给大模型接工具(Function Calling / Tool Use)时,模型老是该调用不调用、选错工具或参数乱填时用:把你现有的接口或工具草稿贴进来,AI 逐个评审并重写——名称是否自解释、描述有没有说清何时用何时不用、参数类型与枚举是否收紧、出错时返回什么能让模型自己纠正。
通用大模型 对话模型通用
我在给一个大模型应用设计工具(Function Calling)。请评审并改写下面的工具定义,目标是让模型能选对工具、填对参数、在出错时自行纠正。 应用场景:[应用场景] 现有工具定义或接口说明: [现有工具定义] 观察到的问题(没有可写「尚未上线」):[观察到的问题] 使用的模型与平台:[模型与平台] 请按以下清单逐个工具检查,并给出改写后的完整定义(JSON Schema 形式): 一、工具集合层面 1. 工具之间职责是否重叠?名字相近、功能交叉的工具,模型很容易选错;能合并的合并,不能合并的在描述里写明分界。 2. 粒度是否合适:是照搬后端的每个接口,还是按「用户想完成的事」来组织?一个常见任务如果要连续调用四五个工具才能完成,考虑提供一个更高层的工具。 3. 数量是否过多;哪些工具可以只在特定场景才提供。 二、单个工具的名称与描述 1. 名称:动词加对象,一眼能看出做什么;同一套工具命名风格一致。 2. 描述要写出:这个工具做什么;什么情况下应该用;什么情况下不要用(改用哪个);有没有副作用(会不会修改数据、发送消息、产生费用);返回什么。 3. 描述是写给模型看的说明文字,按「给一个新同事解释这个工具」的详细程度来写,不要只有一个短语。 三、参数 1. 每个参数的类型、是否必填、含义、格式(如日期格式、时区、单位)和一个示例值。 2. 取值有限的用枚举;数值给出范围;不要用一个自由文本参数承载多个含义。 3. 参数名自解释,避免 id、type、data 这类需要猜的名字;涉及标识符的,说明从哪里获得(例如「先调用搜索工具得到」)。 4. 模型无法知道的值(当前用户、当前时间、权限)不要让它填,由程序注入。 四、返回值与报错 1. 只返回模型下一步需要的字段,去掉冗长的内部字段;列表结果要有数量上限和分页方式。 2. 报错信息要能指导下一步:写明哪里不对、应该怎么改(例如「日期格式应为 YYYY-MM-DD,你提供的是 3/5」),而不是只返回错误码。 3. 有副作用的工具:是否需要「预览 / 确认」两步,或提供只读的试运行参数。 五、输出 1. 问题清单:工具 | 问题 | 可能导致的现象 | 改法。 2. 改写后的全部工具定义。 3. 配套的系统提示词片段:用两三句话说明这些工具的使用原则(何时该先查再改、何时该先问用户)。 4. 10 条测试用的用户请求:包含应调用单个工具的、需要连续调用的、不应调用任何工具的、参数信息不全应先反问的,并写出每条的预期行为。 各平台对工具定义的字段名和限制不完全相同,凡涉及平台特性的地方请标注「以该平台最新文档为准」。
高亮处换成你自己的内容:[应用场景]、[现有工具定义]、[观察到的问题]、[模型与平台]
ChatGPT Plus 充值
已被复制 0 次
使用说明
核心观念:工具定义就是提示词。模型决定「要不要调用、调用哪个、参数填什么」时,唯一的依据是工具的名称、描述和参数说明。很多团队花大力气打磨系统提示词,工具描述却只有一行,结果模型该调用时不调用,或者把两个相近的工具用混。把工具当成要交给新同事的接口文档来写,效果往往比调系统提示词更直接。
怎么填变量:[现有工具定义] 直接贴 JSON;还没写的话贴后端接口说明也行。[观察到的问题] 写现象:「问天气时不调用工具直接编」「订单号经常填成手机号」「一次对话调用了八次搜索」。[模型与平台] 用来提醒平台差异,具体的字段格式、是否支持严格模式、并行调用等,以对应平台的官方文档为准。
常见问题与调整:
- 该调用时不调用 → 多半是描述没写「什么时候应该用」。让它重点改写这一句,并在系统提示词里说明哪类问题必须先查工具再回答。
- 调用过于频繁 → 检查描述或系统提示词里是否有「拿不准就调用」「务必使用」这类话;改成有条件的说明。
- 参数总是填错 → 追问:「针对 order_id 参数,补充格式说明、示例值和『从哪里获得』,并设计一条能引导纠正的报错信息。」
- 工具太多 → 追问:「按使用场景把工具分组,哪些可以按需加载?」
安全提醒:会修改数据、对外发送或产生费用的工具,不能只靠提示词来约束,程序层面要做权限校验和必要的人工确认;来自网页、文档等外部内容里的指令不应触发这类工具。
示例输出
示例,仅供参考(原定义只有 name: "query" 和一句描述「查询」;改写后节选)
json
{
"name": "search_orders",
"description": "按条件搜索当前登录用户的订单,返回最多 10 条摘要。用户询问订单状态、物流或想找某一笔订单时使用。只读,不会修改任何数据。需要订单的完整明细时,用返回结果中的 order_id 再调用 get_order_detail。不要用它查询其他用户的订单。",
"parameters": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["pending_payment", "paid", "shipped", "completed", "refunded"],
"description": "订单状态;不限定时省略此参数"
},
"created_after": {
"type": "string",
"description": "只返回此日期之后创建的订单,格式 YYYY-MM-DD,例如 2026-09-01"
}
},
"required": []
}
}
问题清单(节选):原名称 query 无法看出查的是什么;没有说明只能查当前用户的订单;没有状态枚举,模型曾填入「已发货」「shipped」「发货中」三种写法。
同款作品
用这条提示词做出来的作品;原作者会因此获得积分
还没有同款,来做第一个。


0 条评论
还没有评论,来抢沙发~