面试题
本章按初级、中级、高级三个层次列出与 Tool Use 相关的思考题,覆盖概念理解、工程实现与系统设计。
初级
什么是 Tool Use?它和让模型直接生成 Python 代码有什么区别?
- 参考答案要点:Tool Use 是模型输出结构化调用描述,由运行时执行;直接生成代码则需要解释器执行,风险与可控性不同。
为什么 Tool Use 通常用 JSON Schema 描述工具参数?
- 参考答案要点:JSON Schema 结构化、可校验、跨语言、跨厂商兼容,便于运行时校验与错误回显。
模型怎么知道应该调用哪个工具?
- 参考答案要点:依赖工具 description 与 parameters schema,模型在生成时根据用户意图选择。
Tool Choice 的
auto、required、none分别是什么意思?- 参考答案要点:
auto让模型自行决定;required强制至少调用一个工具;none禁止调用工具。
- 参考答案要点:
工具执行完成后,为什么要把结果再喂给模型?
- 参考答案要点:模型基于工具返回的客观结果生成最终答案,减少幻觉,实现多轮推理。
中级
描述一次完整工具调用的生命周期,并指出每个阶段可能出错的地方。
- 参考答案要点:Register/Discover → Decision → Parse → Validate → Permission → Execute → Format → Feedback。错误包括解析失败、校验失败、权限拒绝、执行超时、结果格式化异常等。
并行工具调用和顺序工具调用各适用于什么场景? 如果两个调用有依赖关系,你会怎么处理?
- 参考答案要点:独立查询可并行;有依赖时串行或由 Planning 模块生成 DAG。不能盲目并行。
什么是严格模式(strict mode)?它有什么限制?
- 参考答案要点:OpenAI strict mode 通过 constrained decoding 强制模型输出符合 schema。限制包括 schema 需可编译、复杂 anyOf 可能不支持。
如何处理工具调用超时和下游故障?
- 参考答案要点:设置连接超时与整体超时;区分可重试与不可重试错误;指数退避重试;熔断与降级。写操作超时后要先验证外部状态再重试(verify-before-retry),防止重复副作用。
MCP 和 OpenAI Function Calling 是什么关系?
- 参考答案要点:MCP 是开放协议,统一外部能力发现与调用;OpenAI Function Calling 是厂商 API。Tool Use 层可用 MCP 接入外部能力,再适配到不同模型。2026 年的趋势是平台原生吸收:OpenAI Agents API 公测内置 MCP 支持与 tool search,Anthropic 提供 MCP 连接器。
什么是工具投毒(Tool Poisoning)和 Rug Pull?如何防护?
- 参考答案要点:工具投毒是把恶意指令藏在工具描述/metadata 中的间接提示注入;Rug Pull 是 Server 通过审批后篡改工具定义。防护:描述审查去指令化、哈希存证 + 变更告警、静态扫描(mcp-scan)、最小权限与沙箱、破坏性操作 HITL。
什么是渐进披露(Progressive Disclosure)?为什么大规模工具集必须用它?
- 参考答案要点:只把工具元数据常驻索引,按意图召回 5~10 个候选 schema 注入 Prompt,完整文档用时再加载。全量注入会导致 token 成本爆炸(400 工具约 405K token)与选择准确率下降(lost in the middle)。
如何保证写操作工具的幂等性?
- 参考答案要点:使用 idempotency key、唯一请求 ID、数据库唯一约束、状态机校验等手段。
结果太长撑爆上下文时怎么办?
- 参考答案要点:截断、摘要、存入 Memory 返回引用、分页查询。
高级
设计一个支持 10,000+ 工具的 Tool Registry,在 100ms 内为每次请求筛选出最相关的工具集合。
- 参考答案要点:
- 按 namespace / domain / tenant 预过滤。
- 工具描述 embedding + 向量检索,按请求意图召回 Top-K。
- 缓存热门工具组合。
- 分层架构:全局 Registry + 本地缓存 + 索引服务。
- 动态发现时异步更新索引,不阻塞请求路径。
- 参考答案要点:
如何设计一个跨 OpenAI、Anthropic、Google 的 Tool Use 抽象层?
- 参考答案要点:
- 内部统一
ToolDefinition与ToolInvocation模型。 - Schema Manager 负责归一化与序列化。
- Parser/Formatter 按 provider 实现适配器。
- Tool Choice 语义做近似映射。
- 通过测试矩阵保证不同 provider 行为一致。
- 内部统一
- 参考答案要点:
在多租户 SaaS 中,如何实现工具级别的权限隔离与审计?
- 参考答案要点:
- 租户级 Registry 视图,不同租户看到不同工具集。
- 工具声明所需 scope,运行时校验 JWT / OAuth token。
- 参数级授权:检查 tenant_id、user_id、resource_id。
- HITL Gate 对高风险操作弹窗确认。
- 审计日志记录调用者、参数、结果、时间、trace ID。
- 参考答案要点:
当模型频繁选错工具或构造错误参数时,你会从哪些维度排查和优化?
- 参考答案要点:
- 检查 description 是否清晰、是否与其他工具冲突。
- 减少每轮注入工具数量,改用工具检索动态召回。
- 启用严格模式/受约束解码,增强 schema 约束。
- 在 description 中加入 Few-shot 示例。
- 分析错误日志,定位高频错误模式,针对性优化 schema 或增加语义校验。
- 参考答案要点:
BFCL 和 τ-bench 分别评估什么?为什么 τ-bench 的 pass^k 比单次成功率更重要?
- 参考答案要点:
- BFCL(Berkeley)评估函数调用本身的正确性:函数选择、参数构造、并行/多轮调用、幻觉抑制等,偏“单次调用质量”。
- τ-bench/τ²-bench(Sierra)评估工具—Agent—用户三方交互下任务最终是否完成,按世界状态打分,偏“端到端可靠性”。
- pass^k 要求同一任务连续 k 次全部成功,衡量的是一致性而非运气;生产 Agent 的失败往往来自低概率不一致(偶发选错工具、偶发参数错误),因此 pass^k 更贴近真实可靠性。
- 参考答案要点:
“用代码执行代替 JSON 工具调用”(CodeAct / programmatic tool calling)有什么收益与代价?什么时候不适合?
- 参考答案要点:
- 收益:顺序调用链可折叠进单轮代码(延迟约减半)、抗上下文退化、代码表达力强(循环/条件/数据处理)。
- 代价:需要强代码能力的模型、沙箱隔离要求高、审计对象从结构化参数变成任意代码。
- 不适合:弱代码模型、强审计/合规场景、简单一次调用(代码形态反而增加不确定性)。《The Bitter Lesson of Tool Calling》显示 PTC 收益与模型代码能力正相关,并非普适。
- 参考答案要点:
如何防止 Tool Use 被用于恶意目的(例如数据泄露、越权访问、资源滥用)?
- 参考答案要点:
- 最小权限原则:每个工具只暴露必要能力。
- 沙箱执行:网络隔离、文件系统只读、禁止危险系统调用。
- 参数级授权与输入校验:防止 IDOR、SQL 注入、命令注入。
- 限流与配额:防止高频调用耗尽资源。
- HITL 与审计:敏感操作人工确认,全链路可追溯。
- 输出过滤:防止工具返回的敏感数据进入模型上下文。
- 参考答案要点:
设计一个可观测方案,帮助团队持续优化 Tool Use 系统的准确率与成本。
- 参考答案要点:
- Trace:OpenTelemetry 全链路,覆盖模型、解析、校验、执行、格式化。
- Metrics:成功率、schema 违规率、工具选择错误率、P99 延迟、token 成本、重试率、降级率。
- Logging:结构化、脱敏、可检索。
- 评估:定期抽样,用人工或 LLM Judge 评估工具选择准确率。
- 告警:核心指标跌破阈值时通知。
- A/B:对比不同 schema 描述、不同模型对准确率和成本的影响。
- 参考答案要点:
托管 Agent 运行时(如 OpenAI Agents API)与自研 Tool Use 层是什么关系?哪些该交给平台,哪些必须自己掌握?
- 参考答案要点:
- 可交给平台:工具循环执行、托管 computer use、tool search、context compaction、基础 trace。
- 必须自己掌握:Tool Registry 与版本治理、参数级授权与 HITL、供应链安全(哈希存证/变更告警)、审计日志、跨厂商抽象层(避免被单一平台锁定)。
- 判断标准:涉及业务权限、合规审计、数据边界的逻辑不下放;纯执行与性能优化可借力平台。
- 参考答案要点:
面试建议
- 初级题目关注“是什么”和“为什么”,考察候选人是否理解 Tool Use 的基本语义。
- 中级题目关注“怎么做”,考察候选人对生命周期、错误处理、跨协议适配的经验。
- 高级题目关注“如何设计”,考察候选人在大规模、多租户、跨厂商场景下的系统思维与安全意识。