NiceOffer

八股文解析

Function Calling 和 Agent 是什么关系?

LLMAgentFunctionCalling八股文

一句话结论

Function Calling 是 Agent 的“手”,Agent 是 Function Calling 的“大脑”——前者是模型调用外部工具的技术协议,后者是基于该能力完成复杂任务推理与执行的完整系统。

面试标准答法

第一层:概念定义与本质区别

Function Calling(函数调用) 是 LLM 的一种推理输出能力——模型在生成回复时,不是直接输出最终答案,而是输出一个结构化的函数调用请求(包含函数名和参数 JSON),由外部系统执行该函数并将结果返回给模型继续推理。

Agent(智能体) 是一个闭环系统,包含:LLM 作为推理核心(Reasoning Core)、工具集(Toolset)、记忆模块(Memory)、任务规划器(Planner)和执行循环(Execution Loop)。Function Calling 只是 Agent 系统中“模型与外部世界交互”的接口层。

关键区别用一句话概括:Function Calling 解决“模型如何调用工具”,Agent 解决“模型为什么调用工具、调完工具后下一步做什么”。

第二层:Function Calling 的机制细节

以 OpenAI 的实现为例(其他厂商如 Anthropic、Google 均类似):

训练阶段:模型在微调(Fine-tuning)时,训练数据包含“用户指令 → 函数定义列表 → 模型输出函数调用 JSON”的样本对。模型学会的是:当用户意图匹配某个函数时,输出一个结构化的调用请求。

推理阶段(三步循环):

  1. 函数定义注入:将可用函数的 JSON Schema(包含 name、description、parameters 及其类型约束)拼入系统提示词(System Prompt)
  2. 模型决策输出:模型判断需要调用函数时,输出 tool_calls 字段,包含函数名和参数(严格遵循 JSON Schema 校验)
  3. 结果回填与续推:外部执行函数后,将结果作为新的 user 消息(role: "tool")回填给模型,模型基于结果生成最终回复或发起下一次调用

关键参数

  • tool_choice:控制强制调用("required")、自动选择("auto")或指定函数
  • parallel_tool_calls:是否允许单次推理并行调用多个函数
  • strict:是否启用结构化输出(Structured Outputs),确保参数严格符合 Schema

第三层:Agent 的系统架构

Agent 的完整工作循环(ReAct 范式的工程实现):

用户请求 → 规划器(Planner)拆解子任务 → 模型推理选择工具 → Function Calling 触发工具执行 
→ 结果回填 → 记忆更新(Memory Update) → 判断任务是否完成 → 未完成则继续循环 / 完成则汇总输出

Agent 依赖 Function Calling,但远不止于此

能力维度Function Calling 覆盖Agent 额外需求
工具调用单次调用的协议层多步调用编排(Orchestration)
决策逻辑是否调用、调哪个任务分解、路径规划、失败重试
状态管理无状态短期上下文 + 长期记忆持久化
错误处理返回错误码异常恢复、替代方案、用户澄清
安全控制参数校验权限管理、操作审计、人类审批

第四层:对比表格

维度Function CallingAgent
定位API 协议/接口能力完整系统架构
核心组件模型 + 函数 SchemaLLM + Planner + Memory + Tools + Executor
状态管理无状态,单次调用有状态,多轮循环
任务复杂度单步工具调用多步推理与工具编排
失败处理返回错误信息自主重试/降级/请求用户确认
适用场景天气查询、计算器、数据库查询数据分析报告、自动化运维、复杂工作流
实现复杂度低,API 层面即可支持高,需要设计循环、记忆和规划
典型产品OpenAI Function Calling APIAutoGPT、LangChain Agent、Manus

常见追问表格

追问回答要点
Function Calling 和 Tool Use / Tool Calling 有区别吗?本质相同,不同厂商命名差异。OpenAI 叫 Function Calling,Anthropic 叫 Tool Use,Google 叫 Function Calling。底层都是模型输出结构化调用指令。真正的区别在于工具描述格式(JSON Schema vs 自然语言描述)和结果回传格式(role: "tool" vs role: "user")
没有 Function Calling 能实现 Agent 吗?可以,但很别扭。早期方案:让模型输出特定格式文本(如 Action: search[query])然后正则解析。Function Calling 的价值在于结构化输出的可靠性——模型被专门训练过输出合法 JSON,解析成功率从 80% 提升到 99%+。若模型不支持 Function Calling,可用 JSON Mode + 手动约束替代,但需要更强的提示词工程和容错逻辑
Function Calling 的模型如何决定调用哪个函数?核心靠函数描述(description) 的语义匹配。模型将用户意图与函数描述做语义相似度匹配,同时参考参数约束判断是否满足调用条件。工程优化点包括:描述写清使用场景和边界条件、参数名用语义化命名、合理设置 tool_choice 减少误调用
并行调用(Parallel Function Calling)怎么工作?模型在单次推理中生成多个 tool_calls 数组项,每个包含独立函数名和参数。系统并行执行这些调用,结果按顺序回填。注意点:并行调用要求函数间无依赖关系;若 B 依赖 A 的输出,必须拆成多轮串行调用
Function Calling 的延迟和成本如何优化?① 函数定义精简——过长的 Schema 会占用大量 token,只注入当前任务可能用到的函数;② 函数分组——按领域分组,首轮先调用“路由函数”确定子集;③ 缓存函数定义——对固定函数集做 prompt caching;④ 结果截断——工具返回结果过长时先摘要再回填

面试回答模板(30 秒版)

延伸准备

1. Function Calling 的底层训练原理
深入研究模型是如何通过 SFT(Supervised Fine-Tuning)和 RLHF 学会输出结构化函数调用的。了解 OpenAI 的 Function Calling 论文中提到的数据构造方法——如何将函数调用样本转化为对话格式、如何用拒绝采样(Rejection Sampling)提升调用格式的准确率。面试时能说出“模型不是天生会调用函数,而是通过大量‘用户指令 → 函数定义 → 调用输出’的样本对微调而来”,会明显加分。

2. 从 Function Calling 到 Toolformer 的演进
对比早期方案:Toolformer(Meta, 2023)通过自监督方式让模型自己决定何时调用工具,用 API 返回结果替换原 token 序列进行继续训练。理解这个演进能说明你了解“工具调用能力”从训练阶段注入到推理阶段涌现的路径,以及为什么 Function Calling 是更工程化的方案。

3. Agent 的规划策略与 Function Calling 的配合模式
深入掌握 Plan-and-Execute 模式(先规划完整步骤,再逐步执行)与 ReAct 模式(推理-行动交替进行)的区别,以及各自对 Function Calling 的依赖方式。Plan-and-Execute 会先调用 Planner 生成步骤列表,再逐步执行;ReAct 则每步都依赖模型推理后调用 Function Calling。能对比两种模式的延迟、错误累积和可解释性差异,说明你对 Agent 工程有实战经验。

想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。