函数调用
函数调用(Function calling)让 LLM 在任务需要外部数据或模型本身之外的动作时,能够请求特定的工具。当你要求模型做一些需要这些工具之一的事情时,它可以调用该工具,并在其响应中使用结果。
下面是一个具体的例子:
- 你问: "苹果股票当前的价格是多少?"
- LLM 思考: "我需要当前的股票数据,所以我要使用我的股价函数"
- LLM 调用:
get_stock_price("AAPL") - 函数返回: "$195.25"
- LLM 回应: "苹果股票当前的价格是 $195.25"
在技术层面,LLM 仍然像其他基于 Transformer 的模型一样预测下一个 token。提示中包含定义良好的函数签名和描述,引导模型产生与这些格式匹配的输出。这让你可以构建这样的工作流:
- 从用户的输入中调用 API
- 触发动作(例如发送邮件、获取天气)
- 将输出传回模型,用于多轮对话
常见问题
函数调用和结构化输出有什么区别?
这两个概念经常被混淆。这里有一个简单的区别:
- 结构化输出: 由你来决定模型在响应中使用的格式。例如,你可以强制模型输出 JSON、列表或特定的对象。
- 函数调用: 你告诉模型何时采取动作。函数调用工具通常以结构化方式定义(例如 JSON)。
两者可以一起使用。
所有 LLM 都支持函数调用吗?
并非所有,但许多现代模型支持。像 Llama、Qwen 和 DeepSeek 这样的开源模型,在通过 vLLM、SGLang 或 MAX 提供服务时通常工作得很好。
函数调用和工具或智能体一样吗?
工具(Tools)是动作本身。函数调用是模型请求这些动作的方式。智能体(Agents)是可以在循环中使用函数调用并结合推理的系统;它们可以规划、按顺序调用多个工具、评估结果,并根据学到的内容调整策略。