1 基本概念

当你第一次看到 Function Call 这个名字,直译就是“函数调用”。没错,它说的就是“调用函数”。但你可能会好奇:LLM 怎么会去调用函数呢?

在理解这个之前,先想一想什么是“函数”。其实你每天都在无意识地使用函数:比如你在百度或 Google 搜索一个内容,搜索结果出来后,你点击其中一条链接。这个“点击”背后,其实就是一次函数调用——系统把你选择的内容,从数据库里取出来,再展示到网页上。

这些过程你看不到,但它们都在后台自动完成。Function Call 在大模型里也是类似的:模型并不自己“知道”所有答案,而是通过调用外部的函数(工具),把结果取回来,然后再回答你。

如果让你来设计 Function Call,你会先想到什么? 大多数有编程经验的同学,第一反应可能是:

  • 这个函数要完成什么功能?
  • 需要哪些参数?
  • 参数怎么传递?
  • 最后返回什么结果?

没错,这就是函数的基本要素。那接下来问题来了:LLM 怎么知道你写的这些函数呢?

前排提示,文末有大模型AGI-CSDN独家资料包哦!

答案是:你需要把它们“注册”到 LLM 中。所谓注册,其实就是把函数的定义(功能说明、参数格式、返回结果类型)描述一遍,交给 LLM 记住。这样,当模型遇到相关问题时,它就能主动选择调用哪个函数,并生成对应的参数。

接下来,模型会把生成的参数传给你定义的函数,函数运行得到结果。然后这个结果会被当作“新的上下文”再交给 LLM,模型结合结果和你原来的问题,生成最终的答案。

上述描述就是function call的完整过程。

2 为什么需要 Function Call?

最初的大模型(GPT-2、GPT-3)只能靠自己“记忆”生成答案。

但一旦用户问到 实时信息(如“今天上海的天气”)或 外部操作(如“帮我订张票”),模型就无能为力,只能“胡编”一个结果。

这时研究者就意识到:模型必须要能和外部世界互动

2023年6月 OpenAI正式推出Function Calling,其发展历程如下:

大模型很强,但它的“脑子”来自训练时刻的快照:知识是静态的、通用的、不可验证的。一旦问题落到真实业务里,就会立即遇到三类鸿沟:

  • 第一,时效性——“明天杭州的天气”“这班机有没有延误”“库存还剩多少”都需要实时系统给答案;
  • 第二,个性化与权限——“我这个账号的账单”“我司本月的销售额”“我工单的处理进度”属于企业或个人的私域数据,模型本体既看不到也不该看到;
  • 第三,行动与闭环——不仅要回答,还要去做事:下单、发邮件、建工单、拉取报表、写回数据库,单靠语言生成办不到。

Function Call 的价值就在于把“会说话”的模型,接上“会做事”的工具:开发者先以函数/工具的声明定义可用能力(名称、参数、返回值和安全边界),模型在理解用户意图后自动选择并生成结构化参数,由应用去调用真实世界的 API 或服务,拿到可验证的结果再让模型组织成自然语言回复。

这样一来,答案可追溯、可审计、可复现,降低幻觉,还能把企业现有系统(数据库、搜索、ERP、工单、物联网设备)无缝纳入 AI 工作流。

换句话说,Function Call 让大模型从“静态记忆 + 概率式输出”,进化为“按需取数 + 安全执行 + 可控反馈”的执行中枢:既补齐时效与专有知识的短板,又把回答变成可落地的动作闭环,这就是它在任何严肃场景中不可或缺的原因。

3 Function Call 的核心机制(工作原理)

  • 应用向大语言模型发起请求:应用端将用户的自然语言输入(Prompt)以及可用函数的定义信息(Function Declarations / Tool Specifications)一并传递给大语言模型。这样模型在理解问题时,就知道有哪些外部工具可供调用。

  • 大语言模型进行决策:模型内部经过推理,判断是直接生成自然语言回复,还是需要调用一个或多个外部工具。如果需要调用工具,模型会生成对应的函数名及参数(Function Call Arguments)。

  • 模型返回调用指令或直接回复, 模型将处理结果返回给应用端。这个结果可能是:

  • 一条包含函数名与参数的函数调用指令。

  • 一条可直接展示的自然语言消息,或

  • 应用解析并执行函数:当应用收到函数调用指令时,会解析出函数名与参数,并实际执行对应的函数(通常是调用外部 API 或服务)。

  • 应用将函数执行结果反馈给模型:应用把函数执行的原始输出结果(如 API 返回的 JSON 数据)与上下文提示词一并传入模型,使其能够基于数据生成用户可理解的回答。

  • 大语言模型生成最终响应或继续调用,模型接收到函数执行结果后,会决定:

  • 如果问题尚未解决,继续触发后续的工具调用,直到获得足够信息。

  • 直接基于结果生成最终自然语言答案,或

4 实际案例展示

我用一个简单的例子来解释Function Call的工作原理:

如果我现在问ChatGPT:杭州今天天气如何?内部是怎么运作的呢?

第 1 步:用户提问

  • 用户:输入提示词(Prompt) → “杭州今天天气如何?”

第 2 步:应用 (ChatGPT)

  • ChatGPT 接收到用户问题。
  • ChatGPT 需要判断:这个问题能直接回答吗?还是要调用外部数据?
  • ChatGPT 发现:天气是实时数据,自己“不会算”,于是决定调用 外部函数
  • 函数声明(Function Declaration),应用层(比如 ChatGPT 产品)会提前写好一组函数的定义(声明),比如:
  • 每个函数都会有 名字(name)、描述(description)、参数(parameters schema)

  • 定义的格式必须符合 OpenAI 规范(目前是 JSON Schema),这样模型才能正确理解。

  • get_weather(location, date)

  • get_stock_price(symbol, date)

  • get_inventory(item_id)

第 3 步:模型生成调用参数 模型收到“用户问题 + 函数声明”后,先理解用户需求,再在可用函数里选择合适的一个,并生成调用所需的函数名和参数,例如:

函数名:get_weather  


参数:{location=杭州,date=2025-09-21}

第 4 步:函数调用 API

  • ChatGPT 向 天气 API 发送请求。
  • API 返回结果:
{


  "temperature": "28°C",


  "condition": "多云"


}

第 5 步:应用返回答案

  • Function Call调用的结果给到模型;
  • 模型生成答案给到应用ChatGPT;
  • ChatGPT最终响应给用户;

5 什么是“把函数注册到模型中”

在 Function Call 的机制里,有一个常见的问题是:模型本身并不知道你有哪些函数。那么,如何让模型“知道”并正确调用呢?这就涉及到 函数注册 的过程。

通过 Prompt 告诉模型

  • 在调用模型时,除了用户的自然语言问题,还需要在 Prompt 中一并写入函数的定义。
  • 定义包括:函数名、参数类型、参数说明、返回值格式,甚至权限或使用场景。
  • 这样,模型在推理时会把这些函数当作“候选工具”,并选择合适的一个生成参数。
  • 在前面章节的示例里,我展示过一个较复杂的 Prompt,它把所有函数的描述一次性写清楚,每次调用模型时,函数定义会和用户问题一起传入。

通过 API 调用参数传递(tools 字段)

  • 在程序层面,调用大模型时通常会有一个 tools 字段(或类似参数)。
  • 你可以把需要的函数用 JSON Schema 的格式列出来:包括函数名、参数、说明等。
  • 当请求发给大模型时,这些函数就相当于被“注册”进了模型当前的上下文。
  • 模型在生成响应时,会根据工具的定义返回结构化的函数调用请求。

所谓“函数注册到模型中”,并不是把函数永久写进模型,而是 在每次会话或调用时,通过 Prompt + tools 参数,把函数的定义临时交给模型。模型就能在推理时“记住”这些函数,并在需要时调用。

prompt 和 tools 参数都需要在调用模型 API 时一并传入。

05 Function Call与MCP(Model Context Protocol )、Agent关系

有了 Function Call,模型能“调一次工具”。但真实业务往往不是一次就完,还牵涉到先调谁、怎么排顺序、失败如何重试,以及工具如何被统一接入与复用。于是就有了两条演进线:Agent 负责把多步流程编排成闭环,MCP 负责把工具接入标准化、可发现、可治理。接下来我们就讲它们与 Function Call 的关系。

Function Call与MCP关系:

MCP 把“工具/函数”的定义与托管从应用层挪到独立的 MCP Server。你按统一 Schema(名字、参数、返回值、权限等)在各台服务器上暴露工具;应用侧只要作为 MCP Client 连接这些服务器,就能自动发现并调用工具,不再为每个客户端/每个模型重复接入一次。像 CursorDifyChatGPT(自定义连接器/Responses API) 都已经能作为 MCP 客户端对接远程 MCP 服务器,用的就是这一套标准。

更严谨地说:MCP ≠ 只是“函数换了个放置位置”

  • Function Call:描述“如何调用一个工具”的模型行为(选择工具 → 产出结构化参数 → 执行 → 回传结果)。
  • MCP:描述“工具如何被发现与接入”的协议层(服务发现、能力声明、会话与鉴权、可观测、跨应用复用)。
  • 典型链路是:MCP 负责发现/接入 → 模型在客户端内用 Function Call 产出参数 → 客户端调用该 MCP 工具并回传结果给模型。换言之,MCP 是“接线标准”,Function Call 是“用电方式”。

所以说,MCP未来可以形成规模商业化模式:

  • 商业模式:既然 MCP 解决了“工具可复用、跨应用接入”的问题,那在 Server 端确实可以设计为 按调用次数、按 QPS、按并发量收费,就像现在的 API(OpenAI、Stable Diffusion、各类 SaaS API)一样。

与Agent关系:

  • MCP Server 里暴露了若干工具(搜索、数据库、RAG、第三方 API 等),MCP 把工具摆到桌面上。

  • MCP Client(如 ChatGPT、Cursor、Dify)连上去,把这些工具“挂载”到模型可见的环境。

  • Agent 决定怎么用这些工具完成目标,形成执行逻辑,决定 先调哪个工具、后调哪个工具,利用 Function Call机制来一步步调用 MCP 工具,直到达成目标。

因此未来可能会出现:Agent-as-a-Service + MCP 工具市场。

”到模型可见的环境。

  • Agent 决定怎么用这些工具完成目标,形成执行逻辑,决定 先调哪个工具、后调哪个工具,利用 Function Call机制来一步步调用 MCP 工具,直到达成目标。

因此未来可能会出现:Agent-as-a-Service + MCP 工具市场。

读者福利:倘若大家对大模型感兴趣,那么这套大模型学习资料一定对你有用。

针对0基础小白:

如果你是零基础小白,快速入门大模型是可行的。
大模型学习流程较短,学习内容全面,需要理论与实践结合
学习计划和方向能根据资料进行归纳总结

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

请添加图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

这里我们能提供零基础学习书籍和视频。作为最快捷也是最有效的方式之一,跟着老师的思路,由浅入深,从理论到实操,其实大模型并不难

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐