先这样答
设计可回放的 Agent 状态需要记录三类核心数据。回放时系统采用确定性重放机制。第一类是完整输入。系统要保存用户的原始输入。系统提示词与工具定义的版本号也必须一同记录。第二类是每步中间产物。Agent 运行过程中的规划路径需要落盘。工具调用请求与返回结果要逐一保存。模型的原始输出也属于中间产物,必须完整留存。第三类是随机性来源。系统必须记录温度参数与采样种子。时间敏感数据也要生成快照。
回放阶段执行确定性重放。系统按顺序将记录的输入流喂给 Agent。排查 Bad Case 的核心难点在于外部工具会随时间变化。外部接口的数据状态在回放时往往已经改变。直接调用真实接口会导致复现失败。开发者必须对外部响应进行 mock。系统也可以直接读取当时保存的快照数据替代真实请求。这种机制排除了外部干扰,让线上问题完整复现。
面试官会怎么追问
-
「外部工具的 Mock 具体怎么结合记录数据来做?」 系统读取落盘的工具调用与返回结果。回放遇到工具调用节点时,系统拦截真实的外部请求。框架直接将记录的历史返回结果作为响应塞回给 Agent。这保证了模型接收到的上下文与线上完全一致。
-
「为什么完整输入里必须包含工具定义的版本号?」 工具的输入输出结构会随时间迭代。用新版工具定义去解析旧版的输入流会触发错误。记录版本号能让回放系统拉取当时的准确定义。这避免了工具变更破坏确定性重放。
-
「记录模型的原始输出在回放环节有什么实际作用?」 原始输出是每步中间产物的比对基准。回放时系统按序喂入记录的输入流。开发者比对重放输出与记录的原始输出。这能确认当前步骤是否严格复现。这帮助快速定位 Bad Case 发生的具体节点。
回答的坑
- 遗漏时间敏感数据的快照,导致依赖时间的工具在回放时给出不同结果。
- 误以为重放就是直接重新运行代码,忽略了必须拦截外部请求并注入历史返回结果。
同系列的题