AI Agent面试必问Function Calling,90%的人只答出“调工具“,高分回答长这样

欢迎来到「周五刷题营」,每周五一道Java+AI高频面试题,花10分钟刷完,悄悄积累面试底气。
📝 本期考题
面试官:你简历上写了AI Agent和Function Calling,那你说说Function Calling是什么?和普通的API调用有什么区别?大模型怎么知道该调哪个工具?
先别急着看答案,花30秒想想你会怎么回答。
我见过太多人面试时被问到这个题,支支吾吾半天就挤出一句:"就是大模型调用工具嘛。“然后面试官追问"那参数怎么传?调用失败怎么办?结果怎么回传?”,直接就卡壳了。
这道题的分水岭不在概念,在生产级细节。 60分的人能说出基本概念,90分的人能讲清楚从工具定义到错误处理的完整链路。今天把这道题从60分到90分的回答全部讲透,附完整Java代码和面试话术模板。
✅ 60分及格回答:能说出基本概念
能答出这几点,说明你确实用过Function Calling,有基础经验。
-
Function Calling是什么:大模型的一项能力,你把工具的名称、描述、参数定义(JSON Schema)告诉大模型,大模型根据用户问题,自主决定是否调用工具、调用哪个工具、传什么参数,返回一个调用指令,由你的后端代码执行工具,再把结果回传给大模型生成最终回答。
-
和普通API调用的区别:
- 普通API调用:代码写死了调什么接口、传什么参数,大模型不参与决策
- Function Calling:大模型自主决策调哪个工具、传什么参数,代码只负责执行
- 核心区别:决策权在大模型,不在代码
-
大模型怎么知道调哪个工具:靠工具描述(description)。你写的工具描述越清晰,大模型决策越准确。它会根据用户意图和工具描述做匹配,选择最合适的工具。
能答出这3点,60分及格,面试官知道你用过。但想拿高分,必须往下讲生产级细节。
✨ 90分加分回答:能讲清完整生产级链路
能答出这几点,说明你真的在生产环境用过Function Calling,不是跟着教程做了个Demo。
加分点1:工具定义的3层信息
"工具定义不只是写个名称和描述,生产级的工具定义需要3层信息:
- 元信息层:工具名称、描述(写清楚什么时候用、什么时候不用)、参数JSON Schema(必填字段、类型、枚举值)
- 执行配置层:超时时间(每个工具独立配置,比如检索10秒、外部API 30秒)、最大重试次数、是否关键工具(关键工具失败终止任务,非关键工具降级)
- 结果处理层:结果格式化(转成大模型能看懂的键值对,不是丢原始JSON)、结果长度截断(防止Token爆炸)
我们项目里用注解定义工具,这3层信息都在注解里配置:"
@FunctionTool(
name = "search_knowledge_base",
description = "从企业知识库检索文档。用户问公司制度、产品文档时用;问实时信息时不用。",
parameters = "{\"type\":\"object\",\"properties\":{\"query\":{\"type\":\"string\"}},\"required\":[\"query\"]}",
timeoutMs = 10000, // 执行配置层
maxRetry = 1,
critical = false
)
public String search(String argumentsJson) {
// ... 结果处理层:格式化成清晰的键值对
}
加分点2:工具执行的5个生产级机制
"工具执行不是简单的method.invoke(),生产级需要5个机制:
- 参数校验:大模型传的参数可能格式错误、缺必填字段,要先校验,校验失败返回明确的错误信息+正确格式,大模型会自动修正重试
- 超时控制:用独立线程池+Future.get(timeout),防止某个工具卡死拖垮整个Agent
- 失败重试:区分可重试异常(超时、网络错误)和不可重试异常(参数错误),可重试的才重试
- 结果截断:工具返回结果超过2000字符自动截断,防止Token爆炸
- 关键/非关键降级:关键工具失败直接终止任务并告知用户,非关键工具失败后Agent可以用其他方式回答
这5个机制缺一个,Demo能跑但上生产全是bug。"
加分点3:Agent循环的终止保护
"Function Calling是在Agent的ReAct循环里执行的,必须有终止保护,否则大模型判断失误会陷入死循环:
- 最大轮次限制:最多10轮推理,到了就强制终止
- 重复调用检测:同一个工具用同样的参数调了2次还没成功,就停止重复调用
- 连续失败检测:连续3次工具调用失败,终止任务
我们项目里写了一个AgentLoopGuard,每次工具调用后检测这3个条件,触发任何一个就终止循环,把终止原因告诉大模型,让它基于已有信息给出最终回答。"
加分点4:多工具调用和并行执行
"大模型一次可能返回多个工具调用(tool_calls数组),生产级要支持:
- 串行执行:有依赖关系的工具(比如先查用户ID,再查用户订单)串行执行
- 并行执行:无依赖关系的工具(同时查天气和查新闻)可以并行执行,减少总耗时
- 结果顺序回传:无论串行还是并行,结果必须按tool_call_id的顺序回传,大模型才能正确匹配
我们项目里默认串行,对无依赖的工具用CompletableFuture并行执行,平均响应时间减少40%。"
💻 完整Java实现核心代码
面试官追问"能写一下核心实现吗",直接写这段:
// 工具执行器核心逻辑
public ToolResult execute(String toolName, String argumentsJson) {
// 1. 参数校验
ValidationResult validation = validateParams(toolName, argumentsJson);
if (!validation.isValid()) {
return ToolResult.fail("参数校验失败: " + validation.getErrorMsg()
+ ",请修正参数后重新调用。正确格式: " + getToolParams(toolName));
}
// 2. 带超时+重试执行
for (int attempt = 1; attempt <= maxRetry + 1; attempt++) {
try {
Future<ToolResult> future = executor.submit(() -> {
Object result = method.invoke(instance, argumentsJson);
return ToolResult.success(formatResult(result)); // 3. 结果格式化+截断
});
return future.get(timeoutMs, TimeUnit.MILLISECONDS); // 4. 超时控制
} catch (TimeoutException e) {
if (attempt <= maxRetry) continue;
return handleFailure(toolName, "执行超时");
} catch (Exception e) {
if (attempt <= maxRetry && isRetryable(e)) continue; // 5. 可重试才重试
return handleFailure(toolName, e.getMessage());
}
}
return ToolResult.fail("执行失败");
}
📦 落地资源推荐
Function Calling和Agent开发需要稳定的测试环境,我平时调试工具调用、跑Agent循环都用阿里云轻量应用服务器,2核4G跑SpringBoot+大模型调用完全够用,新用户首年特惠性价比高再加上通过推荐渠道可以领取9折优惠券,适合自己动手搭一个Agent测试环境。有部署需求了解https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=fzoabro9阿里云开发者特惠,无需求直接忽略。
资源领取
关注图片上水印即Java-AI工程师打出agent即可领取完整的配套资料!
🎤 面试话术模板
可以直接这么说:
Function Calling是大模型的一项能力,核心是让大模型自主决策调用什么工具、传什么参数,而不是代码写死调用逻辑。和普通API调用的本质区别是决策权在大模型。
生产级实现需要4层:工具定义层(名称、描述、JSON Schema、超时、重试配置)、执行层(参数校验、超时控制、失败重试、结果截断、关键/非关键降级)、循环层(最大轮次、重复调用检测、连续失败检测,防止死循环)、多工具层(串行/并行执行、按tool_call_id顺序回传)。
我们项目用注解定义工具,Spring AOP统一处理执行逻辑,AgentLoopGuard做循环终止保护,支持多工具并行执行,上线后工具调用准确率95%以上,平均响应时间2秒以内。
这段话讲完,面试官就知道你真的在生产环境用过,不是只会调接口。
💬 本期互动
你被问到Function Calling时,最容易卡在哪一步?
A. 概念说不清
B. 参数校验和错误处理
C. Agent循环和死循环
D. 多工具并行执行
评论区报你的选项就行~有想刷的面试题,欢迎后台投稿,入选送完整源码包。
📢 下周预告
下周一开启Agent系列第2周:《Agent没有记忆就是个傻子?Java实现短期记忆+长期记忆+向量记忆》
Agent只能单轮对话?多轮对话上下文丢失?记忆系统是Agent从玩具到生产的关键一步。3种记忆模式的Java实现,附完整代码,记得关注。
祝大家周末愉快!
本文属于「周五刷题营」合集
更多推荐


所有评论(0)