Function Calling使用

入门·10 分钟·通过可运行代码讲解「Function Calling使用」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。

Function Calling使用

Function Calling 让模型不只生成文字,还能按照你定义的函数格式请求调用外部工具。它是构建工具型助手和 Agent 的基础能力。

为什么需要Function Calling

如果用户问“北京今天气温多少”,模型自己不应该凭空回答。正确做法是让模型识别出需要查天气,然后调用天气函数,把真实结果再组织成自然语言。

Function Calling 的价值是把“语言理解”和“外部能力”连接起来。

一个天气函数例子

先定义普通 Python 函数:

def get_weather(city: str) -> dict:
    return {
        'city': city,
        'weather': '晴',
        'temperature': '26℃'
    }

真实项目中这个函数可能会请求天气 API。

给模型描述工具

你需要告诉模型工具名称、用途和参数结构:

tools = [{
    'type': 'function',
    'function': {
        'name': 'get_weather',
        'description': '查询指定城市的天气',
        'parameters': {
            'type': 'object',
            'properties': {
                'city': {'type': 'string', 'description': '城市名称'}
            },
            'required': ['city']
        }
    }
}]

模型看到用户问题后,会决定是否需要调用这个函数。

执行流程

Function Calling 通常分两步:

  1. 第一次请求:模型判断要调用哪个函数,并给出参数。
  2. 程序执行函数,把结果发回模型。
  3. 第二次请求:模型根据函数结果生成最终回答。

注意:函数不是模型自动执行的,而是你的程序执行的。模型只负责提出调用请求。

参数校验很重要

不要盲目信任模型给出的参数。调用真实接口前要检查:

  • 参数是否缺失;
  • 类型是否正确;
  • 是否越权;
  • 是否包含危险内容;
  • 是否超过频率限制。

例如删除文件、发送邮件、付款等高风险函数必须人工确认。

适合的场景

  • 查询天气、快递、订单;
  • 检索数据库;
  • 执行计算;
  • 创建日程;
  • 调用企业内部系统;
  • 将自然语言转换成结构化参数。

常见错误

  • 工具描述太模糊,模型不知道何时调用;
  • 参数 schema 写得太松,导致格式不稳定;
  • 函数执行失败后没有把错误反馈给模型;
  • 给模型过多工具,选择变得混乱;
  • 高风险工具没有权限控制。

小结

Function Calling 的核心是:模型负责理解意图和生成参数,程序负责执行工具和控制权限。它让 AI 从“会说”走向“能做”,但也要求更严格的工程安全设计。