前言🔖
大模型本身只会 “生成文字”。
能调用 Skills / Tools / 函数,是模型被特殊训练 + 架构支持后的高级能力。
🔹1. 普通大模型:只会说话
- 输入文本 → 输出文本
- 不会主动去查文件、调接口、读数据库
- 不会用工具
🔹2.支持 Tool Call / Skill Call 的模型:
是专门训练过的,会:
- 理解你需要外部信息 / 工具
- 按固定格式输出:
- 工具名
- 参数
- 调用意图
- 等你把工具结果返回给它,它再整理成自然语言
这就叫:函数调用 / 工具调用 / Skill 调用能力。
函数调用 / 工具调用 / Skill 调用能力, 是Function Call吗?🔖
它们完全等价
- Function Call = 函数调用
- Tool Call = 工具调用
- Skill 调用 = 技能调用
这三个名字,说的是同一种大模型能力。
为什么叫法不一样?
- Function Call:最标准、最技术的叫法(OpenAI 最早用)
- Tool Call:阿里云、通义、Qwen 官方喜欢叫 “工具调用”
- Skill 调用:通义灵码、IDE 智能体里的产品化名字
本质:模型输出结构化参数 → 让代码去执行函数。
这就是 Function Call / Tool Call / Skill 调用 的标准输出:
{
"name": "file_read",
"parameters": {
"file": "main.py"
}
}
- 模型不直接读文件
- 模型只告诉你要读哪个文件
- 你的代码真正去执行
这就是 function call。
普通大模型 不会理解 你需要外部信息 / 工具吗?🔖
🔹1.普通大模型,真的不会 “理解你需要工具” 这件事。
不是它笨,是它的任务目标里根本没有 “调用工具” 这一项。
普通大模型在干嘛?
它只做一件事:根据上文,预测下一个最合理的字。
你问:
今天北京气温多少?
普通模型会:
瞎编一个温度 或者用训练数据里过时的知识回答 完全不会意识到:我需要查天气接口 因为它的训练目标里 ** 没有 “调用工具”** 这个概念。
🔹2.只有专门训练过的模型,才会:
我需要调用工具 → 输出结构化参数 → 等你执行 → 再回答
这个能力叫:
- Function Call
- Tool Call
- Skill 调用
三者完全一样。
普通大模型: 只会 “编话”,不会 “调用工具”。它不知道世界上有外部工具、API、数据库、文件。 支持 Function Call 的大模型: 被专门教过:当你不知道、需要实时数据、需要操作时,要输出固定格式,让外部代码去执行。
会 Function Call的模型 返回什么?🔖
会 Function Call(Tool Call)的模型,到底返回什么。
返回一段机器能看懂的结构化指令:
我要调用哪个工具 + 传什么参数
🔹普通大模型返回(人话)
你问:
帮我读一下 main.py 的内容
普通模型会瞎编 / 讲道理:
好的,main.py 一般是程序入口文件,里面通常会有...
🔹会 Function Call 的模型返回(机器指令)
它返回的是JSON 结构,不是人话:
{
"name": "file_read",
"parameters": {
"file_path": "main.py"
}
}
这就叫:
Function Call / Tool Call / 技能调用
你的代码读到这个 JSON,就会:
- 去读
main.py - 把内容塞回给模型
- 模型再整理成人话给你
🔹再举一个灵码智能体的例子
你在灵码里说:
帮我修复当前文件的报错
灵码底层模型返回的就是:
{
"name": "get_current_file",
"parameters": {}
}
{
"name": "code_diagnose",
"parameters": {
"error": "SyntaxError"
}
}
VS Code 插件收到后,就真的去执行:
- 取当前文件
- 执行诊断
- 把结果还给模型
🔹最核心的一句话
普通模型:只返回文字
支持 Function Call 的模型:返回可执行的指令结构
- 工具名
- 参数
- 格式固定(JSON)
给普通大模型 系统提示词 告诉它返回 调用工具 也不行吗?🔖
可以写提示词让它返回工具格式,但 99% 没用、不稳定、不可靠
原因我一句话讲透:
提示词是教它 “怎么说”,不是教它 “真正会”。
你以为:
我写个超级强的 Prompt:然后普通模型就会乖乖按格式返回。
当你需要查文件时,返回 JSON:{"name":"file_read","parameters":{"file":"xxx"}}
现实是:
- 偶尔能对
- 经常格式错
- 经常参数漏
- 经常不该调用时乱调用
- 经常该调用时不调用
- 完全不可控、不可工程化
普通大模型没有被训练过「工具调用逻辑」,它只是在模仿格式,不是真理解。
专门训练过 Function Call 的模型
- 理解意图
- 知道该不该调用
- 知道调用哪个
- 知道参数怎么填
- 输出100% 标准结构
- 可工程化、可上线
为什么灵码智能体那么稳?
因为它用的是 Qwen 原生支持 Tool Call
- 不是靠 Prompt 硬掰
- 不是靠运气
- 是模型天生就会
Function Call 模型不是天生就会,而是通过多阶段专项训练,让模型学会 “判断是否调用、选哪个工具、输出标准 JSON、整合结果” 的完整能力。
Function Call 训练 = 让模型学会「自然语言 → 结构化工具指令」的映射,并稳定输出可解析的 JSON。
它不是 “理解工具”,而是学会一套严格的格式与决策规则。
支持function call 的大模型,是大模型直接调用了tool吗?🔖
不是!大模型 不会直接调用 tool
它只是告诉你:我要调用哪个工具、传什么参数。
🔹真正去调用工具、发请求、执行代码的,是你自己的业务代码。
- 你 → 大模型:问问题
- 大模型:不直接查、不直接算、不直接联网只输出一段结构化指令(function call):
{
"name": "get_weather",
"parameters": { "city": "北京" }
}
- 你的代码:解析这段 JSON → 真的去调用天气接口
- 你的代码 → 再把结果传回大模型
- 大模型:整理自然语言回答你
🔹总结
- 大模型:只做决策,不执行调用
- 你的系统:负责真正执行 tool
所以:
- 支持 function call ≠ 模型自己会调用 tool
- 支持 function call = 模型会输出「让你去调用 tool」的指令