Agent 面试 · Tool Calling
工具调用是 Agent 的「手脚」。面试重点:模型出意图,你的系统执行。
高频问法
- Tool Calling / Function Calling 是什么?
- 和「让模型输出 JSON 再自己解析」有什么区别?
- 怎么设计一个工具(入参、出参、错误)?
- 并行调多个工具可以吗?注意什么?
- 工具太多了模型选错怎么办?
口述参考
1)是什么
模型不「假装调了接口」,而是按约定产出:
text
工具名 + 参数(结构化)
→ 后端真实执行
→ 结果(成功/失败信息)写回上下文
→ 模型继续推理或结束你方负责:鉴权、校验、超时、幂等、审计。
2)对比自己解析 JSON
| 做法 | 优点 | 风险 |
|---|---|---|
| 自然语言里「我已经查询了」 | 演示快 | 不可信 |
| 正则 / 手写 JSON 解析 | 灵活 | 格式一漂就挂 |
| 官方 Tool Calling + Schema | 与模型对齐、可校验 | 依赖厂商协议 |
生产建议:Schema 校验失败就重试或降级,不要硬跑。
3)工具设计清单(面试可照念)
每个工具至少讲清:
| 项 | 说明 |
|---|---|
| 名称与描述 | 给模型看,描述要「何时用」 |
| 入参 Schema | 类型、必填、枚举、范围 |
| 出参 | 成功结构;失败要有 code/message,别只抛栈 |
| 副作用 | 只读 vs 写入;写入是否要确认 |
| 超时与重试 | 多久算失败;能否幂等重试 |
| 权限 | 谁能调;是否按租户隔离 |
示例(口述):「查订单工具只读;取消订单工具要用户 id + 订单 id,且做幂等键,防止重复取消。」
4)并行工具
可以:互不依赖的只读查询可并行,降低延迟。
注意:有先后依赖(先查库存再下单)必须串行;并行写入要防冲突。
5)工具太多选错
- 按场景拆子集(不同 Agent 不同工具包)
- 描述写清「不要用于…」
- 危险操作二次确认或人工审批
- 监控「选错工具率」,用日志反推改描述
追问预备
- 「流式输出时怎么插工具?」→ 先收齐 tool_call,再执行,再继续生成。
- 「和 MCP 关系?」→ MCP 偏「工具/资源怎么标准暴露」;Tool Calling 是模型侧调用形态。知道分层即可。