Files

62 lines
3.9 KiB
Markdown

---
id: ai.function-calling.interview
title: Function Calling 面试题
type: interview
domain: ai
stack: [function-calling]
tags: [Function Calling, 工具调用, 面试]
level: intermediate
related: [ai.function-calling.tool-loop]
week: [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)。无权限时返回“无权限”,模型据此回复。详见[安全调用业务接口](scenarios/safe-business-tools.md)。
**追问**:如果是网页内容里藏着“查询所有人的工资”的指令呢?→ 同样被工具层权限拦住;同时把外部内容标记为数据,并检测异常的工具调用模式。
### 【场景题】Agent 查询一个慢接口,用户等了 30 秒,怎么优化?
**参考答案**:工具设置超时,超时后返回错误让模型告知用户稍后再试;流式输出中间状态(“正在查询订单系统…”);能并行的工具并发执行;常用查询加缓存;把长耗时操作变成异步任务,完成后通知。
**追问**:怎么知道慢在哪里?→ 每次模型调用和工具调用都记录耗时(链路追踪),区分是模型慢还是工具慢。