AI 通关攻略 · 第 6 关 | Function Calling:让 AI 从"会说话"进化到"会做事"

4 阅读5分钟

AI 通关攻略 · 第 6 关 | Function Calling:让 AI 从"会说话"进化到"会做事"

故事从一个问题说起

LLM 本身只能输出文本。但在实际应用中,我们经常需要:

  • 查询数据库返回准确数据
  • 执行代码得到计算结果
  • 发送邮件、创建日历事件
  • 调用第三方 API 获取实时信息

Function Calling 就是让 LLM 能够"调用函数"的技术。 它是 Tool Calling 的一种具体实现方式。


1. 什么是 Function Calling?

Function Calling(函数调用)是一种让 LLM 生成结构化指令的技术。

具体来说:

  1. 开发者预先定义好函数的名称、参数格式(schema)功能描述
  2. 用户提问时,LLM 判断是否需要调用某个函数
  3. 如果需要,LLM 生成符合 schema 的参数(不是普通文本,而是结构化的 JSON)
  4. 系统执行函数,把结果返回给 LLM
  5. LLM 整合结果,再生成最终回答

类比:LLM 就像一个只会说话但不会做饭的厨师。Function Calling 就是给这个厨师配了一个厨房——厨师说出"需要切菜",厨房就自动切好菜递给他。


2. Function Calling 的工作流程

完整流程图

用户提问
   ↓
LLM 判断:这个问题需要调用函数吗?
   ↓
[不需要] → 直接生成文本回答
[需要] → LLM 生成函数名 + 参数(JSON)
   ↓
系统执行函数,获取结果
   ↓
把函数结果作为上下文返回给 LLM
   ↓
LLM 整合结果,生成最终回答

具体例子

用户问:"北京今天的天气怎么样?"

Step 1:假设我们给 LLM 提供了一个 get_weather 函数:

{
  "name": "get_weather",
  "description": "获取指定城市的实时天气",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "城市名称"
      }
    },
    "required": ["city"]
  }
}

Step 2:LLM 理解问题,生成调用:

{
  "name": "get_weather",
  "arguments": {
    "city": "北京"
  }
}

Step 3:系统执行函数,得到结果:

{
  "city": "北京",
  "weather": "晴",
  "temperature": "18°C",
  "humidity": "45%"
}

Step 4:LLM 整合结果,生成自然语言回答:

"今天北京天气晴朗,气温 18°C,湿度 45%,比较舒适。"


3. Function Calling vs Tool Calling

很多人容易混淆这两个概念:

对比项Function CallingTool Calling
定义LLM 生成结构化函数调用的技术更广义的概念,任何让 LLM "使用工具"的技术
范围是 Tool Calling 的一种具体实现包含 Function Calling + 其他工具调用方式
本质区别LLM 输出的是符合 schema 的 JSON可以是 API 调用、代码执行、文件读取等任何形式

简单理解:Tool Calling 是"使用工具"的总称,Function Calling 是"生成函数调用"的具体技术。Function Calling 是 Tool Calling 在 LLM 领域最主流的实现方式。


4. Function Calling 的实际应用场景

4.1 数据库查询

// 用户问:"我们公司有多少员工?"
{
  "name": "query_database",
  "arguments": {
    "sql": "SELECT COUNT(*) FROM employees"
  }
}

LLM 不知道数据库里有什么,但通过 Function Calling 可以帮你写 SQL、查询数据库。

4.2 代码执行

// 用户问:"帮我算一下 123 * 456 + 789"
{
  "name": "execute_python",
  "arguments": {
    "code": "print(123 * 456 + 789)"
  }
}

4.3 日历管理

{
  "name": "create_calendar_event",
  "arguments": {
    "title": "团队周会",
    "date": "2026-03-25",
    "time": "10:00",
    "duration": 60
  }
}

4.4 发送邮件

{
  "name": "send_email",
  "arguments": {
    "to": "team@company.com",
    "subject": "周报总结",
    "body": "本周完成了..."
  }
}

4.5 实时信息查询

// 查股票、汇率、新闻等
{
  "name": "get_stock_price",
  "arguments": {
    "symbol": "AAPL"
  }
}

5. Structured Output(结构化输出)

Function Calling 有一个"兄弟概念":Structured Output

它们的关系

对比项Function CallingStructured Output
触发条件需要调用外部函数时使用任何时候都需要结构化 JSON 时使用
必须执行函数✅ 是的(执行是 Function Calling 流程的一部分)❌ 不一定(只是让输出格式规范)
典型用途查询数据库、调用 API提取字段、生成报告、API 响应

Structured Output 的例子

用户问:"帮我提取这篇文章中的人名和地名。"

LLM 直接输出(不需要调用函数):

{
  "people": ["张三", "李四", "王五"],
  "locations": ["北京", "上海", "深圳"]
}

这是 Structured Output,不是 Function Calling——没有外部函数被执行。

注意:Structured Output 在某些 LLM 中是通过特殊的提示技术(如 JSON Mode)实现的,与 Function Calling 的实现机制不同。


6. Function Calling 的局限性

6.1 LLM 不理解函数的真实逻辑

LLM 只是根据 schema 描述"猜测"参数格式。它不知道函数实际能做什么,可能会:

  • 生成错误格式的参数
  • 在不需要调用时调用
  • 在需要调用时不调用

6.2 函数结果的解读依赖 LLM

函数返回的是原始数据,LLM 能否正确整合这些数据生成回答,取决于它的理解能力。

6.3 安全性问题

Function Calling 涉及实际执行代码或操作,需要严格的安全防护:

  • 权限控制:LLM 只能调用被授权的函数
  • 参数校验:执行前必须校验 LLM 生成的参数是否合法
  • 隔离执行:危险操作(如删除文件、发送邮件)应在隔离环境中执行

7. 常见 LLM 的 Function Calling 支持

模型Function Calling 支持
GPT-4 / GPT-4o✅ 原生支持,成熟稳定
GPT-3.5 Turbo✅ 支持
Claude 3✅ 支持,但叫"Tool Use"
Gemini✅ 支持(Function Calling + Extensions)
Llama 3✅ 通过微调版本支持
国产模型(通义、文心等)✅ 各自有实现方案

8. 总结

Function Calling = LLM 判断是否需要 → 生成结构化调用 → 执行 → 整合结果

核心价值

  • 让 LLM 从"只说话"进化到"能做事"
  • 打通了 AI 和真实世界(数据库、API、系统)之间的壁垒
  • 是 Agent 架构的底层技术支撑

Function Calling vs Tool Calling vs Structured Output 的关系

Tool Calling
├── Function Calling(主流,最重要)
│   └── LLM 生成 JSON → 执行函数 → 返回结果
└── Structured Output
    └── LLM 生成 JSON → 直接输出,不执行任何操作