函数调用与工具调用实战:让大模型真正「动手」
工具调用原理 · JSON Schema 声明 · 多轮回写 · 可运行示例与排错
核心结论:没有工具调用,大模型只是个「聊天框」;加上工具调用,它才能查数据库、调 API、算数、发消息——从「会说」变成「会做」。
一、工作原理
- 你用 JSON Schema 声明可用工具(名称、用途、参数)。
- 模型理解用户意图后,输出「调用函数 X,参数 Y」。
- 你的代码真正执行该函数,拿到结果。
- 把结果回传给模型,模型据此生成最终自然语言答复。
二、最小可运行示例
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询某城市当前天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]
# 1) 把 tools 随消息提交,模型返回 tool_calls
# 2) 本地执行 get_weather(city)
# 3) 把 {role:"tool", content: 结果} 回传,再让模型总结
三、提升命中率的写法
- 描述精确:工具的
description写明「何时该用、返回什么」。 - 参数严谨:用枚举、格式约束(如日期 ISO8601)减少模型乱填。
- 系统提示强调:「能用工具查证就别凭空回答」。
- 做好兜底:工具执行失败要返回清晰错误,让模型自我纠正。
进阶把多个工具组合,就是 Agent 的雏形:模型自己决定先查哪个、再调哪个,逐步逼近目标。详见AI Agent 入门。
四、常见问题
模型会乱调收费接口吗?
会。凡是「有副作用」的工具(发消息、下单、删数据)务必加人工确认或权限校验,不要完全自动放行。
中文函数名能用吗?
建议保留英文函数名(兼容性更好),用 description 写清中文用途即可。