如何用 Function Calling 给大模型接上工具
大模型本身只会生成文字,既查不了实时天气,也算不准复杂数学。Function Calling(函数调用)让它能”请求”调用你写好的工具:模型判断该用哪个函数、给出参数,你的程序执行后把结果喂回去。这是所有 AI Agent 的地基,这篇教程用 OpenAI 兼容接口完整实现一次。
工作原理
模型并不真的执行代码,它只输出”我想调用哪个函数、传什么参数”,执行由你的程序完成:
sequenceDiagram
participant U as 你的程序
participant M as 大模型
participant T as 本地工具函数
U->>M: 1. 提问 + 工具清单
M-->>U: 2. 返回调用意图 函数名+参数
U->>T: 3. 执行真实函数
T-->>U: 4. 返回结果
U->>M: 5. 把结果回填
M-->>U: 6. 生成最终回答
前置准备
pip install openai |
并设置好 OPENAI_API_KEY 环境变量(参考「如何调用大模型 API」那篇)。
步骤一:写好要暴露的工具函数
先实现真正的功能,这里用查天气做示例:
def get_weather(city: str) -> str: |
步骤二:用 JSON Schema 描述工具
模型靠这段描述来决定何时、如何调用。描述越清楚,调用越准:
tools = [ |
步骤三:发起请求,接收调用意图
把用户问题和工具清单一起发给模型:
import os, json |
如果模型决定调用工具,msg.tool_calls 就不为空。
步骤四:执行函数并回填结果
解析出函数名和参数,执行真实函数,再把结果作为一条新消息发回:
if msg.tool_calls: |
步骤五:让模型生成最终回答
带着工具结果再请求一次,模型就会用自然语言总结:
final = client.chat.completions.create( |
步骤六:封装成通用循环
把上面串起来,支持模型连续调用多个工具:
AVAILABLE = {"get_weather": get_weather} |
它的循环判断逻辑:
graph TD
A[收到用户问题] --> B[带工具清单请求模型]
B --> C{模型要调用工具吗}
C -->|是| D[执行函数]
D --> E[结果回填消息]
E --> B
C -->|否| F[返回最终回答]
注意事项
- 工具描述是关键,写不清模型就不会用或用错
- 参数要做校验,模型偶尔会给出不合法的值
- 工具权限越大风险越高,涉及删除、支付等要加确认
- 多轮调用会累积 token,注意成本和超时
小结
Function Calling 的精髓是一个循环:模型提出调用意图 → 程序执行 → 结果回填 → 模型继续,直到不需要工具为止。掌握它,你就理解了 AI Agent”能干活”的底层机制,后续接入搜索、数据库、代码执行都是同一套路子。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 非鱼小站!
评论
WalineDisqus








