工具与函数模式
用于函数调用的模式。
工具与函数模式 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。
工具就是模式加意图
函数调用允许模型请求您的代码执行某项操作。每个工具都通过名称、描述(说明何时使用)以及用于其参数的 JSON 模式进行声明。
模型不会运行代码;它会发出一个结构化调用请求,由您的运行时进行分发。模式使参数能够被解析。
工具定义的组成
工具定义是一项由模式包装的能力声明。
{
'type': 'function',
'function': {
'name': 'get_weather',
'description': 'Get current weather for a city. Use when the user asks about weather.',
'parameters': {
'type': 'object',
'properties': {
'city': {'type': 'string'},
'units': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}
},
'required': ['city', 'units'],
'additionalProperties': False
}
}
}描述决定选择
当有许多工具可用时,模型主要依据描述进行选择。请将描述写成决策规则:
- 说明何时使用以及何时不使用。
- 与功能相近的其他工具明确区分。
- 说明所需的前置条件。
与模式不佳导致参数错误相比,描述不佳更容易导致选择错误的工具。
调用—执行—返回循环
函数调用是多轮交互。模型发出调用,您执行调用,然后 append 结果,模型继续运行。
resp = client.chat.completions.create(model='gpt-4o', messages=msgs, tools=tools)
call = resp.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
result = dispatch(call.function.name, args)
msgs.append(resp.choices[0].message)
msgs.append({'role': 'tool', 'tool_call_id': call.id,
'content': json.dumps(result)})
# call the model again to continue with the tool result并行工具调用
当多个操作彼此独立时,现代模型可以在一轮中请求多个工具调用。您的运行时应遍历所有 tool_calls,执行这些调用(理想情况下并发执行),并为每个 tool_call_id 返回一条工具消息。
不要假设只有一次调用;请始终使用循环。
for call in resp.choices[0].message.tool_calls:
args = json.loads(call.function.arguments)
result = dispatch(call.function.name, args)
msgs.append({'role': 'tool', 'tool_call_id': call.id,
'content': json.dumps(result)})强制和限制工具使用
使用 tool_choice 控制选择:
auto——由模型决定。required——必须调用某个工具。{name: ...}——强制使用指定工具。none——在这一轮禁用工具。
强制使用特定工具会将函数调用转变为纯粹的结构化提取。
client.chat.completions.create(
model='gpt-4o', messages=msgs, tools=tools,
tool_choice={'type': 'function', 'function': {'name': 'get_weather'}}
)执行前 validate 参数
即使使用了严格模式,也请将工具参数视为不可信输入。在接触真实系统(数据库、支付系统、文件删除操作)之前,请根据模式重新验证参数,并应用业务规则。
def dispatch(name, args):
schema = TOOLS[name]['function']['parameters']
jsonschema.validate(args, schema) # defense in depth
if name == 'refund' and args['amount'] > MAX_AUTO_REFUND:
return {'error': 'requires human approval'}
return HANDLERS[name](**args)工具错误属于协议的一部分
工具失败时,请将结构化错误作为工具结果返回,而不是抛出异常。这样模型就可以道歉、使用修正后的参数重试,或选择其他工具。
请让错误具有可操作性:说明原因,并在安全的情况下提供恢复提示。
{'status': 'error',
'code': 'CITY_NOT_FOUND',
'message': 'No city named Xyz. Ask the user to clarify the city.'}保持工具范围精简
数十个工具会降低选择准确率并增加令牌成本(每个模式在每一轮都会处于上下文中)。应对措施包括:
- 使用带有
action枚举的单个工具,将相关操作归为一组。 - 根据当前状态动态地只提供相关工具。
- 使用命名空间,减少相似工具之间的混淆。
针对副作用强化模式
对于破坏性操作,请将安全性编码到模式本身中:要求明确的确认字段,限制取值范围,并优先使用枚举或经过验证的格式,而不是自由文本标识符。
{
'name': 'delete_records',
'parameters': {
'type': 'object',
'properties': {
'table': {'type': 'string', 'enum': ['logs', 'temp_cache']},
'confirm': {'type': 'boolean'},
'max_rows': {'type': 'integer', 'minimum': 1, 'maximum': 1000}
},
'required': ['table', 'confirm', 'max_rows'],
'additionalProperties': False
}
}工具定义测试
请将工具选择视为一种可度量的行为。构建一个评测集,将提示映射到预期工具及参数,然后断言模型是否选择正确。当您改写描述或添加新工具时,请跟踪回归问题。
cases = [
{'prompt': 'Whats it like in Paris?', 'expect_tool': 'get_weather'},
{'prompt': 'Convert 10 USD to EUR', 'expect_tool': 'fx_convert'}
]
for c in cases:
assert run(c['prompt']).tool_name == c['expect_tool']快速检查
模型在一次助手回复中发出两个相互独立的工具调用。您的运行时必须做什么?
回顾
实际使用工具/函数模式时:
- 描述会影响选择;模式会影响参数是否可解析。
- 遍历所有工具调用;支持并行执行。
- 使用工具选择控制行为;对于纯提取任务,强制选择工具。
- 重新验证参数;返回结构化错误。
- 保持工具接口精简,并强化对破坏性操作的防护。
下一步:当输出仍然出错时,学习修复和验证循环。
用 AI 导师学习 AI Prompt Engineering — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 53
- 课程
- 199
常见问题解答
「工具与函数模式」课时是免费的吗?
是的 — 「工具与函数模式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。
「工具与函数模式」这节课中我会学到什么?
用于函数调用的模式。 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Prompt Engineering 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「工具与函数模式」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Prompt Engineering 课中编写并运行代码吗?
能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。