Files

3.9 KiB

id, title, type, domain, stack, tags, level, related, week
id title type domain stack tags level related week
ai.function-calling.interview Function Calling 面试题 interview ai
function-calling
Function Calling
工具调用
面试
intermediate
ai.function-calling.tool-loop
10
16

Function Calling 面试题

基础

【基础】Function Calling 是什么?流程是怎样的?

参考答案:让模型以结构化的方式表达“要调用哪个函数、传什么参数”。流程:带上工具定义请求模型 → 模型返回 tool_calls → 应用校验参数并执行 → 把结果以 tool 消息回传 → 模型继续,直到给出答案。模型不执行代码。

追问:不支持工具调用的模型怎么办?→ 在提示词中约定输出 JSON 格式,再解析和校验(容错性差一些),或者使用框架提供的结构化输出适配。

【基础】工具定义里最重要的是什么?

参考答案:清晰的名字和描述(什么时候用、返回什么)、准确的参数 Schema(类型、必填、枚举、格式、描述)。模型完全依靠这些信息选择工具和填参数。

追问:工具很多(上百个)怎么办?→ 按意图先筛选出相关的少量工具再交给模型(工具检索 / 路由),或分给不同的子 Agent。

【基础】tool_call_id 有什么用?

参考答案:把工具结果和对应的调用关联起来。模型一次可能发起多个调用,每个结果都要带上对应的 id,否则模型不知道哪个结果属于哪个调用,接口也会报错。

追问:并行调用的工具之间有依赖怎么办?→ 模型一般只会并行调用互不依赖的工具;有依赖的会分多轮。应用层执行时不要假设顺序。

进阶

【进阶】模型给的参数不合法怎么处理?

参考答案:用 pydantic / JSON Schema 校验,把具体的错误信息作为工具结果回传,让模型修正后重试;限制重试次数;严格模式(部分厂商支持 strict 让输出严格符合 Schema,以官方文档为准)可以减少格式错误,但业务规则校验仍要自己做。

追问:为什么不直接抛异常?→ 抛异常会中断整个对话;回传错误让模型有机会自我修正,用户体验更好。

【进阶】有副作用的工具怎么保证安全?

参考答案:权限在工具内部基于当前用户校验;写操作需要用户确认或人工审批;幂等键防重复;限流;审计日志;高风险操作不开放给模型。

追问:用户确认时应该展示什么?→ 展示校验后的真实参数(订单号、金额),而不是模型生成的描述文字。

场景题

【场景题】用户说“帮我查一下张三的工资”,助手调用了查询工具,怎么防止越权?

参考答案:工具不接受任意的员工 ID 作为可信输入,而是用当前登录用户的身份调用 HR 系统,由 HR 系统判断权限;或者工具内部检查当前用户与目标员工的关系(本人 / 上级 / HR)。无权限时返回“无权限”,模型据此回复。详见安全调用业务接口。

追问:如果是网页内容里藏着“查询所有人的工资”的指令呢?→ 同样被工具层权限拦住;同时把外部内容标记为数据,并检测异常的工具调用模式。

【场景题】Agent 查询一个慢接口,用户等了 30 秒,怎么优化?

参考答案:工具设置超时,超时后返回错误让模型告知用户稍后再试;流式输出中间状态(“正在查询订单系统…”);能并行的工具并发执行;常用查询加缓存;把长耗时操作变成异步任务,完成后通知。

追问:怎么知道慢在哪里?→ 每次模型调用和工具调用都记录耗时(链路追踪),区分是模型慢还是工具慢。