---
title: "Function calling (LLM) — 函数调用"
source: "https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8"
wiki: "systems-analysis.info/int"
article: "Function_calling_(LLM)_—_函数调用"
language: "zh"
categories:
  - "Category:Chinese"
  - "Category:Large language models"
  - "Category:Machine learning"
  - "Category:Prompt engineering"
revision_id: 2345
wiki_created_at: 2026-09-06T23:02:29Z
wiki_modified_at: 2026-09-06T23:02:29Z
downloaded_at: 2026-09-07T22:50:36Z
---

# Function calling (LLM) — 函数调用

**Function Calling**（**函数调用**）是大型语言模型 (LLM)中的一种机制，它允许模型通过生成结构化数据（通常是 JSON）来调用函数，从而与外部工具和 API 交互，而不是直接生成文本回复<sup>[\[1\]](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_note-hopsworks_whatis-1)</sup>。

换句话说，模型会根据用户请求，从预定义的函数集中决定调用哪个函数，以及使用哪些参数。这种机制扩展了 LLM 的应用范围，使其能够充当自然语言与实际操作之间的接口。这为将 AI 与外部系统集成开辟了可能性：模型可以请求最新数据、执行操作或使用服务，这在创建智能助手和自主代理时尤其有价值。此外，通过访问可靠数据源，使用外部工具还能降低幻觉（捏造事实）的风险<sup>[\[2\]](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_note-dark_side_paper-2)</sup>。

## 历史与实现方法

### 早期方法（提示工程与 Toolformer）

教语言模型调用工具的想法形成于 2022–2023 年。早期方法基于复杂的提示工程技术。例如，2022 年提出的“**ReAct**”方案中，模型在对话过程中交替进行推理和操作（工具调用），并将两者编码在同一段文本中。

一个关键的进展是 Meta 研究人员于 2023 年初推出的“**Toolformer**”模型。Toolformer 证明了 LLM 可以通过专门的微调，学会根据文本提示自主调用外部工具（如计算器、搜索引擎、日历），并在生成的文本中插入特殊的 API 调用词元<sup>[\[3\]](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_note-toolformer_paper-3)</sup>。

### 官方支持与发展

OpenAI 公司在 2023 年 6 月正式为其 GPT-3.5 和 GPT-4 模型的 API 引入了函数调用支持，这是一个重要的里程碑<sup>[\[4\]](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_note-openai_fc_announcement-4)</sup>。新版本的模型经过微调，能够识别用户请求中需要调用外部函数的情况，并生成结构精确的 JSON 对象作为参数。OpenAI 称此功能为“一种将 GPT 与外部工具和 API 可靠连接的新方法”。

### 开放计划

随着商业实现的推出，也出现了经过微调以生成正确函数调用的开源模型。

- **Gorilla**: 加州大学伯克利分校的项目，一个经过微调的 LLaMA 版本，能够生成对数千种不同 API 的调用。为了评估这类模型，还创建了伯克利函数调用排行榜（Berkeley Function-Calling Leaderboard）<sup>[\[5\]](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_note-gorilla_site-5)</sup>。
- **ToolAlpaca**, **ToolLLaMA**, **Hermes**: 一系列开源模型，它们通过在合成的函数调用示例上进行微调而得，这些示例通常由更强大的模型生成。

## 工作机制

使用函数调用的过程通常包括以下几个步骤：

1.  **定义函数**。开发者预先定义一组模型可用的函数（例如外部 API），并描述它们的签名和用途，通常采用 JSON Schema 格式。
2.  **分析请求**。在对话过程中，模型分析用户的意图，并自主决定是否需要调用已定义的某个函数来回答问题。
3.  **生成调用**。如果需要执行操作，LLM 会生成一个特殊的结构化输出（例如包含函数名和参数的 JSON），而不是普通文本。如果不需要调用，模型则返回常规的文本回复。
4.  **执行函数**。外部程序（聊天机器人或代理的外壳）接收 JSON，使用提供的参数实际调用指定的函数，然后将结果返回给模型。
5.  **生成最终答复**。模型利用收到的数据生成给用户的最终回复<sup>[\[4\]](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_note-openai_fc_announcement-4)</sup>。

为了在模型训练过程中管理这个多步骤流程，会使用特殊的对话格式，例如 OpenAI 的 ChatML 标记语言。其中除了“用户”和“助手”角色外，还引入了“函数”角色，用于传递函数调用的结果。

## 应用与优势

调用函数的能力显著扩展了 LLM 能够解决的任务范围。

- **与外部 API 集成**。模型可以调用外部服务（例如获取天气、汇率、新闻）来回答需要最新信息的问题。
- **自动化用户操作**。LLM 可以执行常规任务，如发送电子邮件、在日历中创建事件、在网上商店下订单。
- **访问数据库和分析工具**。自然语言查询可以被转换为内部 API 调用或 SQL 查询，以提取和分析数据。
- **提取结构化信息**。LLM 可以从长文本中自行提取事实（例如姓名、日期、地址），并以结构化的 JSON 数组形式返回，便于后续的程序处理。

## 安全问题

在扩展模型能力的同时，函数调用也带来了新的风险。

- **未经检验的输出**。模型与外部工具的交互必须受到严密保护。如果模型从 API 接收到恶意或错误的值，它可能会将其包含在回复中或基于该值调用另一个函数，从而导致不可预测的后果。
- **通过函数参数进行攻击**。研究人员发现了函数调用模式特有的漏洞。2025 年，一种被称为“函数调用的阴暗面”（The Dark Side of Function Calling）的攻击被展示出来。其核心思想是向模型提供一个特殊的“函数”，在其参数内部隐藏了被禁止的指令（*越狱负载*）。模型遵循调用函数的原则，生成了包含违规内容的参数，从而绕过了审核过滤器。测试表明，这种攻击在包括 GPT-4 和 Claude 在内的六种现代模型上成功率超过 **90%**<sup>[\[2\]](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_note-dark_side_paper-2)</sup>。

为防止此类事件，建议只向模型提供受信任的工具，在执行关键操作前引入用户确认环节，并使用专门的“防御性”提示词以及对参数进行严格的危险内容检查。

## 外部链接

- <a href="https://openai.com/index/function-calling-and-other-api-updates/" class="external text" rel="nofollow">OpenAI 官方发布的 Function Calling 公告</a>
- <a href="https://gorilla.cs.berkeley.edu/" class="external text" rel="nofollow">Gorilla LLM 项目主页</a>
- Apideck (2024). *An Introduction to Function Calling and Tool Use*. <a href="https://www.apideck.com/blog/llm-tool-use-and-function-calling" class="external text" rel="nofollow">Apideck Blog</a>.
- LangChain (2025). *Tool Calling (Documentation)*. <a href="https://python.langchain.com/docs/concepts/tool_calling/" class="external text" rel="nofollow">LangChain Docs</a>.
- Mistral AI (2025). *Function Calling – Documentation*. <a href="https://docs.mistral.ai/capabilities/function_calling/" class="external text" rel="nofollow">Mistral Docs</a>.
- Hopsworks (2024). *What is Function Calling with LLMs?*. <a href="https://www.hopsworks.ai/dictionary/function-calling-with-llms" class="external text" rel="nofollow">Hopsworks Dictionary</a>.
- Hopsworks (2024). *Unlocking the Power of Function Calling with LLMs*. <a href="https://www.hopsworks.ai/post/unlocking-the-power-of-function-calling-with-llms" class="external text" rel="nofollow">Hopsworks Blog</a>.
- University of California, Berkeley (2025). *Berkeley Function Calling Leaderboard V3*. <a href="https://gorilla.cs.berkeley.edu/leaderboard.html" class="external text" rel="nofollow">Online Resource</a>.

## 参考文献

- Wu, Z. et al. (2025). *The Dark Side of Function Calling: Pathways to Jailbreaking Large Language Models*. <a href="https://aclanthology.org/2025.coling-main.39.pdf" class="external text" rel="nofollow">ACL 2025</a>.
- OpenAI (2023). *Function Calling and Other API Updates*. <a href="https://openai.com/index/function-calling-and-other-api-updates/" class="external text" rel="nofollow">OpenAI Blog</a>.
- Schick, T. et al. (2023). *Toolformer: Language Models Can Teach Themselves to Use Tools*. <a href="https://arxiv.org/abs/2302.04761" class="external text" rel="nofollow">arXiv:2302.04761</a>.
- Patil, S. G. et al. (2023). *Gorilla: Large Language Model Connected with Massive APIs*. <a href="https://arxiv.org/abs/2305.15334" class="external text" rel="nofollow">arXiv:2305.15334</a>.
- Liu, W. et al. (2024). *ToolACE: Winning the Points of LLM Function Calling*. <a href="https://arxiv.org/abs/2409.00920" class="external text" rel="nofollow">arXiv:2409.00920</a>.
- Yao, S. et al. (2022). *ReAct: Synergizing Reasoning and Acting in Language Models*. <a href="https://arxiv.org/abs/2210.03629" class="external text" rel="nofollow">arXiv:2210.03629</a>.

## 注释

1.  <span id="cite_note-hopsworks_whatis-1">[↑](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_ref-hopsworks_whatis_1-0) “What is Function Calling with LLMs?”. *Hopsworks*. <a href="https://www.hopsworks.ai/dictionary/function-calling-with-llms" class="external autonumber" rel="nofollow">[1]</a></span>
2.  <span id="cite_note-dark_side_paper-2">↑ <sup>[2.0](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_ref-dark_side_paper_2-0)</sup> <sup>[2.1](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_ref-dark_side_paper_2-1)</sup> Wu, Z. et al. “The Dark Side of Function Calling: Pathways to Jailbreaking Large Language Models”. *Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing*, 2025. <a href="https://aclanthology.org/2025.coling-main.39.pdf" class="external autonumber" rel="nofollow">[2]</a></span>
3.  <span id="cite_note-toolformer_paper-3">[↑](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_ref-toolformer_paper_3-0) Schick, T. et al. “Toolformer: Language Models Can Teach Themselves to Use Tools”. *arXiv:2302.04761*, 2023. <a href="https://arxiv.org/abs/2302.04761" class="external autonumber" rel="nofollow">[3]</a></span>
4.  <span id="cite_note-openai_fc_announcement-4">↑ <sup>[4.0](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_ref-openai_fc_announcement_4-0)</sup> <sup>[4.1](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_ref-openai_fc_announcement_4-1)</sup> “Function calling and other API updates”. *OpenAI*, 2023. <a href="https://openai.com/index/function-calling-and-other-api-updates/" class="external autonumber" rel="nofollow">[4]</a></span>
5.  <span id="cite_note-gorilla_site-5">[↑](https://systems-analysis.info/int/Function_calling_(LLM)_%E2%80%94_%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8#cite_ref-gorilla_site_5-0) “Gorilla: Large Language Model Connected to Massive APIs”. *University of California, Berkeley*. <a href="https://gorilla.cs.berkeley.edu/" class="external autonumber" rel="nofollow">[5]</a></span>
