做一个有温度和有干货的技术分享作者 —— Qborfy
今天我们来学习 AI 函数调用 Function Calling
一句话核心: Function Calling(函数调用)是大模型在对话过程中,根据用户需求调用外部函数或工具的一种能力。
通俗地讲,它让大模型从“能说会道”的参谋,变成了“能动手做事”的助手。当模型遇到自己无法直接解决的问题时(比如查询实时信息、进行复杂计算),它不再说“我做不到”,而是会“告诉”你的程序:“嘿,你需要调用那个叫 get_weather 的函数,并把 location 参数设置为‘北京’。”
需要注意的是,模型本身并不直接执行函数,它只负责生成调用的“指令”。真正的执行工作由你的程序来完成。
它的核心价值在于将大模型的语言理解能力与外部工具的执行能力相结合,从而突破其固有局限(如知识截止日期、无法访问网络等),完成更复杂的任务。
是什么

通过一张图来理解 Function Calling 的工作原理:

这个流程的核心在于,大模型至少被调用了两次:第一次是分析意图并决定调用哪个函数,第二次是将函数的执行结果整合成对人类友好的自然语言回复。
怎么做
下面我们通过几个案例来理解 Function Calling 的使用场景和实现方式。
案例 1:智能天气查询助手
这是最经典的案例,展示了如何弥补大模型知识时效性的不足。
1 | # 1. 定义可供调用的工具(告诉模型你有什么函数) |
案例 2:并行查询(进阶技巧)
当用户的问题涉及多个独立查询时,可以开启并行调用功能,大幅提升效率。
用户提问:“同时查询北京和上海的天气。”
实现:设置parallel_tool_calls=True参数,模型可以同时生成两个函数调用请求,你的程序可以并行执行两个天气查询 API,然后一次性将结果返回给模型进行总结。
案例 3:股票查询系统
这个案例展示了如何将专业、实时的数据(如股价)接入对话系统。
1 | # 工具定义示例 |
当用户询问“青岛啤酒的股价是多少?”,模型会调用此函数,你的程序可以连接真实的金融数据 API 获取信息,再由模型生成回复。
实战案例
下面我们通过 openai sdk 来实现一个简单的天气查询功能:
1 | from openai import OpenAI |
- 核心工具/库:OpenAI Python SDK。即使你使用的不是 OpenAI 的模型(如通义千问、DeepSeek),许多国产大模型平台也兼容 OpenAI 的 API 格式。这意味着你只需简单配置不同的
base_url和api_key,就可以用几乎相同的代码调用不同品牌的模型,大大降低了学习和开发成本。 - 关键参数:在调用
client.chat.completions.create方法时,核心参数是tools(用于定义可用函数列表)和tool_choice(用于控制调用行为,如auto自动决定或强制调用某个函数)。
❄️ 冷知识
- 模型没有“手”:一个大反直觉的真相是,大模型本身并不具备执行代码的能力。它只是一个“超级大脑”,负责生成调用函数的“计划”。真正去执行这个计划、拥有“手和脚”的是你自己的程序。
- 描述决定一切:模型是否调用一个函数,很大程度上依赖于你为函数写的
description(描述)。描述必须清晰、准确,模型才能正确理解何时该调用它。 - “思考”过程可控:你可以通过
tool_choice参数精细控制模型的行为。比如,可以强制模型必须调用某个函数(tool_choice={"type": "function", "function": {"name": "get_weather"}}),或者禁止它调用任何函数(tool_choice="none"),让它完全靠自己知识库回答。 - 与 MCP 的关系:你可以把 Function Calling 看作是一个“基础版”的工具调用技术,简单直接。而MCP(Model Context Protocol) 则是一个更高级、更标准化的“企业级工具箱协议”,它旨在以统一的方式管理成千上万的工具,更适合构建复杂的 AI 智能体(Agent)工作流。它们是互补而非替代关系。
参考资料
- 本文作者: Qborfy
- 本文链接: https://www.qborfy.com/ailearn/daily/14.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
