Function Call(函数调用 / 工具调用)是什么?
Function Call 是大语言模型(LLM)与外部工具交互的核心能力,也被称为 Tool Calling 或 Tool Use。它是把 LLM 从“只会聊天”变成“能做事”的 Agent 的关键技术。
简单一句话总结:
Function Call = LLM 主动告诉系统“我需要调用某个工具”,然后系统执行工具并把结果返回给 LLM。
一、Function Call 的本质
传统 LLM 只能输出文本,无法直接访问互联网、运行代码、查数据库等。
Function Call 让 LLM 拥有了“动手能力”:
- 开发者提前定义好工具函数(Functions / Tools),并告诉 LLM 这些工具的名称、描述、参数格式。
- LLM 在思考时,如果需要外部信息或操作,就会输出一个结构化的调用请求(而不是直接回答)。
- 系统解析这个请求,真正执行工具,把结果塞回 LLM 的上下文。
- LLM 拿到结果后,继续思考或给出最终答案。
二、工作流程(以 ReAct 为例)
graph TD
A[用户提问] --> B[LLM 思考]
B --> C{需要工具?}
C -->|是| D[输出 Function Call]
D --> E[系统执行工具]
E --> F[把结果返回 LLM]
F --> B
C -->|否| G[直接输出最终答案]
三、Function Call 与普通 Prompt 的区别
| 维度 | 普通 Prompt 输出 | Function Call 输出 |
|---|---|---|
| 输出类型 | 纯文本 | 结构化 JSON(工具名 + 参数) |
| 自主性 | 被动回答 | 主动请求外部帮助 |
| 准确性 | 容易幻觉 | 通过真实工具结果大幅降低幻觉 |
| 能力边界 | 仅限训练知识 | 可调用实时数据、代码、API 等 |
| 可控性 | 低 | 高(开发者定义工具权限) |
四、实际例子
用户问题:帮我查一下今天新加坡温度并告诉我穿什么衣服合适。
没有 Function Call 时(纯 LLM):
“今天新加坡大概28度,建议穿短袖…”
(可能是 hallucination,数据不准)
使用 Function Call 时:
- LLM 输出:
{ "name": "get_weather", "arguments": { "city": "Singapore", "date": "2026-04-21" } } - 系统执行工具,得到真实结果:
{"temp": 31, "condition": "多云"} - LLM 继续生成最终回答:
“今天新加坡31℃,多云转晴,建议穿短袖+薄外套,注意防晒。”
五、主流平台的 Function Call 支持(2026年现状)
- OpenAI:最早提出,最成熟(
tools参数) - Anthropic (Claude):强烈支持,表现优秀
- Grok (xAI):原生支持工具调用(我现在就在使用)
- Google Gemini:Function Calling
- Meta Llama:开源模型也广泛支持
- 国产:通义千问、DeepSeek、Kimi 等均已支持
六、Function Call 在 Agent 中的地位
- ReAct 模式:最依赖 Function Call
- Plan-and-Execute:规划阶段决定调用哪些工具
- Multi-Agent:不同 Agent 之间通过 Function Call 协作
- Agentic Workflow:Function Call 是连接各个节点的“胶水”
没有 Function Call,就没有真正的 Agent。
七、开发者视角:如何定义一个 Tool
# 示例(LangChain / OpenAI 风格)
tools = [
{
"name": "search_web",
"description": "联网搜索最新信息",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "搜索关键词"}
},
"required": ["query"]
}
}
]
结语
Function Call 是 LLM 进化成 Agent 的“分水岭”。
它让 AI 从“知识库”变成了“行动者”,是目前所有 Agent 框架(LangChain、LangGraph、CrewAI、AutoGen 等)的核心基石。
掌握 Function Call,你就掌握了构建 Agent 的入门钥匙。