深入理解 Function Calling
深入理解 Function Calling
Function Calling 是指 LLM 生成结构化函数调用指令的能力,由外部系统基于这些结构化输出执行相应工具。它赋予了 LLM 与外部系统交互的能力,也是 Agent Harness 系统能够持续迭代执行的核心机制。
Function Calling 的演进历程
早期的 Function Calling 实现依赖提示词工程:将工具信息和输出格式约束整合到上下文中,然后解析 LLM 的文本输出来提取调用指令。这种方式存在两大痛点:一是工程链路冗长复杂,二是 LLM 针对 Function Calling 场景的输出极不稳定。这催生了 LangChain 早期的链式拼接解决方案,但可靠性依然不足。
真正的突破来自 OpenAI 在 2023 年 6 月为 GPT-4 和 GPT-3.5-turbo 引入的原生 Function Calling 能力。通过针对该场景的专项训练,模型在输出格式稳定性和工具选择准确性上实现了质的飞跃。SDK 也开始支持通过 functions 或 tools 参数直接传递工具定义,并返回标准化的工具调用消息。此后,各大模型厂商纷纷跟进并不断强化 Function Calling 能力,并衍生出 MCP(Model Context Protocol)、Skill 等生态体系。
LLM 工具数量上限问题
工具数量的合理上限需要综合考虑模型能力、上下文长度、工具描述的 token 消耗以及任务复杂度等多个维度:
- 大模型:对于支持 1M 上下文的前沿模型,建议工具数量不超过 20 个,10 个以内效果最佳
- 小模型:7B 等小参数模型最多支持 5 个工具,能够保持相对较高的准确率,适合做意图识别或分层工具路由
以 Claude Code Agent 为例,它只配置了 8 种核心工具:bash、read、write、edit、grep、glob、task、todoWrite,体现了"少而精"的设计理念。
应对大量工具的策略
当工具数量较多时,可以采用以下策略优化 Agent 的工具调用能力:
1. 多 Agent 协作架构
根据业务领域将工具分配给不同的专业 Agent,通过 Agent 协作机制分散工具调用压力。例如:数据分析 Agent、文件操作 Agent、网络请求 Agent 各自管理相关工具集。
2. 分层路由机制
先通过工具分类函数(Tool Classifier)获取与当前任务相关的候选工具列表,然后再进行二次精确选择。这种两阶段决策可以有效降低单次选择的复杂度。
3. 动态工具检索
利用语义相似度和关键词匹配技术,根据用户意图动态检索最相关的工具子集,再将其注入到 Agent 上下文中。这种方式能够在保持工具库规模的同时,避免上下文过载。