百度:AI智能体项目中的工具调用,怎么测稳定性?

  • 企业与岗位:百度|测试开发提前批
  • 适用层级:初级—中级
  • 来源可信度:本人自述

整理说明:以下6道题均依据此前采集的面经问题忠实转述,不代表逐字原话。

一、原面经涉及的6道面试问题

问题1:预编排和ReAct编排有什么区别?

参考回答: 预编排先把流程、条件和分支定义好,执行路径相对确定,便于回归、审计和故障复现。ReAct由模型根据当前上下文选择下一步行动及工具,适合步骤无法完全预知的任务,但引入更多随机性、调用成本和容错复杂度。不是任务越复杂就越要用ReAct,流程稳定时预编排往往更容易保障质量。

问题2:项目里的ReAct架构用的是Spring AI的现有能力,还是自己实现的?

参考回答: 应首先如实说明实际实现方式,明确框架承担了哪些职责,项目自己写了哪些逻辑,例如工具注册、参数校验、执行循环、终止条件、状态保存和异常恢复。如果使用Spring AI,需要解释具体版本及所用接口;如果自主实现,需要解释为什么现有框架不能满足业务需求。不能因为使用了Spring AI,就把底层循环和错误处理归为自己开发。

问题3:Agent接入了多少工具?这些工具的使用率怎么样?

参考回答: 除了给出工具数量,还应说明工具的任务场景、调用量和有效性。使用率可明确成某工具被调用的任务占比或工具调用总量占比,同时结合正确选择率、成功率、延迟及无效调用率判断价值。高调用率不一定代表工具有用,也可能说明Agent存在重复或误调用。

问题4:如果一句话触发所有工具,执行稳定性测试做过没有?

参考回答: 先构造确有多工具需求的任务,测试工具选择、参数Schema、依赖顺序、并发或串行策略、超时和失败隔离;再构造冲突意图及不应调用工具的输入,检查误调用。记录每次执行的Trace、最终任务完成情况及重复执行的波动;对有副作用的工具重点测试重试幂等与权限边界。

问题5:如果两个工具之间存在输入输出依赖,应该怎样组织调用?

参考回答: 把依赖明确为上游输出与下游输入的契约,上游执行成功、结果经字段和类型校验后才触发下游。对空值、超时、格式变化、部分成功、重复调用和回滚补偿分别设计测试。不能仅靠模型自然语言“记住”依赖关系,而没有程序层面的校验。

问题6:你的7个工具相互独立,为什么还要使用ReAct?

参考回答: 这是架构必要性的追问。工具相互独立不意味着必然适合ReAct。如果用户意图可用清晰规则分类,固定路由或预编排更简单、更易测试。只有当任务存在开放式、多轮决策、工具选择需要动态依据中间结果调整等特点时,ReAct的收益才可能超过复杂度和成本。回答应结合自己的项目说明选择依据,并承认替代方案。

二、重点技术复盘:多个Agent工具怎么测稳定性?

建议按四层核查:

  1. 选择正确性:该调用哪些工具、哪些不该调用,有无漏调用和重复调用。
  2. 参数与权限:Schema、业务参数及调用权限是否满足约束。
  3. 执行过程:串并行时序、超时、重试、异常传播和副作用幂等。
  4. 任务结果:最终目标是否完成,是否出现“工具调用成功但业务结果错误”。

需要将输入、模型和Prompt版本、工具调用顺序、参数、响应、异常以及最终断言关联到同一条Trace,以便复现和回归。

三、延伸追问

如果工具A扣减库存,调用超时后Agent重试,如何保证不会重复扣库存?

参考思路: 使用业务级幂等键、服务端去重及状态查询;超时不等于失败,不应直接盲目重放有副作用的操作。测试要覆盖请求实际成功但响应丢失等场景。

推荐学习