Agent 效果不达预期时,如何分析 Bad Case 并确定优化方向?
未标记
考查重点:失败归因与定向回归。按检索缺证据、推理误判、参数错误和执行失败拆 Bad Case;固定样本只改对应环节,回归检查收益与退化
本题目录
参考答案
核心回答
Bad Case 分析的目标是用证据定位偏离,再通过对照验证原因,让优化对应实际故障。可以按四步展开:
- 明确成功条件:核对用户目标、权限、数据和时间范围,确认预期结果,先分清系统确实做错还是评估判断有误。
- 沿轨迹取证:串起输入、检索结果、实际发给模型的上下文、工具名称与参数、执行结果和最终答案,找到最早有证据表明偏离预期的环节。
- 提出假设并验证:说明哪项信息缺失、哪一步传错或做错;保持其他条件不变,用局部替换或单因素对照验证,再修改对应逻辑。
- 归类并回归:按影响、频率和风险安排修复,用原失败题、未参与调参的同类题和原成功题检查质量、耗时、成本,以及是否引入新错误。
例如“华北”已经被召回,却没有进入生成 SQL 的上下文,就先追踪合并和过滤过程,再通过补回取值做对照;一次恢复只支持这个假设,还要结合数据流和重复结果继续核验。
第一步:先确认“错”在哪里
以电商问数为例:用户问“华北地区销售总额”,系统生成 SQL 并执行成功,但返回空值或空结果。先核实用户权限、时间范围、指标口径和数据版本,确认该条件下确实应该有销售数据;如果实际没有记录,空结果可以是正确结果。还要检查评估器,不能因为答案没匹配固定句式,就把同义的正确回答判错。
对于创建订单、修改文件这类执行任务,还要核对实际结果。例如任务要求订单已经落库,Agent 回复“已创建”或工具返回“成功”,都不能代替订单记录;异步接口还要按约定检查最终状态,再核对订单标识、关键字段和是否重复创建。即使最终结果正确,也要检查有没有跳过必需的确认或误改其他状态。只规定不可省略的业务约束,不把某一条参考调用路径当成唯一正确顺序。
然后用同一个 request_id 找齐这次请求的材料。除了最终 SQL 和数据库返回,还要看原问题、字段/指标/取值三路召回、合并和过滤前后的上下文、实际发给模型的消息,以及各步骤耗时。这样才能区分“资料从未找到”和“找到了但后面没传进去”。记录可观察的输入、输出和状态即可,不需要依赖模型隐藏的思维过程。
Agent 还可能在分支选择、停止条件或工具循环上失败。例如工具已经报错,系统却继续把它当成有效数据总结;或者已经得到结果,仍不断调用同一工具。因此轨迹不仅要记录模型说了什么,还要记录它实际做了什么、何时结束。
第二步:沿着“华北”这条信息追踪
问数链路里,字段说明解决查哪一列,指标定义解决怎么算,字段取值解决过滤条件写什么。假设实际 SQL 使用了 region_name = '华北地区',而数据中存的是“华北”,就沿着取值的传递过程找证据:
- 原始数据和取值索引里有“华北”吗? 原始数据有、索引没有,先检查采集、入库和更新;信息源还没准备好,下游模型无法稳定补救。
- 本次取值召回返回了吗? 索引里有但本次没返回,固定索引和问题,检查查询表达、权限/元数据过滤、候选数量和检索结果。只知道“没召回”,还不能直接断定是 Embedding 模型不行。
- 召回后有没有进入最终上下文? 对照返回的
column_id/value、合并后的字段examples、过滤后的table_infos和实际模型输入。如果“华北”在某一步消失,就检查那一步的映射或过滤。日志只打印“合并成功”不足以证明内容完整。还要比较发送前的最终消息:合并结果里有“华北”,也可能在后续摘要、预算裁剪或模板组装时丢失;不能拿裁剪前的日志证明模型已经看见它。 - 模型看到正确取值后,仍写错了吗? 若最终输入已明确给出“华北”,
SQL却写成“华北地区”,再检查输入是否冲突、提示词是否把真实值用途说清,以及模型对证据的使用。此时比较 Prompt 或模型才有针对性。 SQL条件正确,执行和呈现还对吗? 如果已经使用“华北”,继续查时间限制、指标额外条件和表关联;数据库返回有数据但最终回答说“没有数据”,问题又可能在结果解析或回答生成。
这里找的是最早已证实的偏离,并不保证每个请求只有一个原因。比如取值缺失和表关联错误可能同时存在,补好一个问题后,还需要继续核验结果。
EXPLAIN 通过也不能证明业务正确。它能发现部分语法、表名或字段问题,却不知道“华北地区”是不是正确业务取值。遇到 Unknown column 也一样:先看正确字段是否进入上下文、是否被过滤掉,再看模型写出的字段名或别名,不能直接跳到“换模型”。
第三步:用对照验证原因,再选择改法
假设证据显示:取值召回已返回“华北”,但最终输入缺少它。可以保持问题、其他材料、模型和提示词不变,只把缺失取值补回最终输入,观察 SQL 和查询结果是否恢复。这个实验检查的是“缺少该取值是否影响结果”,随后还要检查合并/过滤代码和状态,才能确定实际修复位置。补回时只使用本次权限和版本下应当可用的取值,不把评测参考答案或无权读取的资料混入输入。
人工补入是诊断对照,不是生产链路已经修好的证据。修复合并或裁剪逻辑后,要撤掉人工注入,从原问题重新走正常链路,核对“华北”能否自然进入最终输入,以及 SQL 和查询结果是否正确;否则可能只是用人工提示绕过了故障。
一次补入后答对只是支持这个假设,不能单独证明唯一根因。生成有随机性,补入信息也可能恰好绕过别的缺陷。可以固定可保存的输入和工具返回,对随机环节重复运行;再用其他地区的同类问题检查修复是否有效。若实验结果不支持假设,就回到轨迹继续找,而不是把猜测写成结论。
优化也要跟原因对应:取值漏入库就修数据更新;映射时丢值就修合并逻辑;正确证据已经齐全但持续不用,再比较上下文组织、提示词或模型;工具异常则检查超时、接口和异常分支。如果检索链路异常并触发降级,还要记录本次实际使用的路径;配置上写着混合检索,不代表这次真正执行了混合检索。一次同时换切块、检索器、Prompt 和模型,即使结果变好,也很难知道是哪项改动起作用。
这套方法可以迁移到非 RAG 的 Agent:工具选错,看选择时有哪些可用工具和信息;参数错,核对参数来源和校验;工具返回对但结论错,核对结果解析与生成。表面症状负责引导取证,具体修改仍由证据决定。
第四步:把修复放回固定样本中验证
把 Bad Case 记录成“问题和预期、实际结果、关键轨迹、验证过的原因、修复方案”,再按原因聚类。优先处理影响范围大、出现频繁的问题;低频但可能造成严重错误动作的问题也应优先。不要只按出现次数排序,也不必把相同根因的几十条失败逐条独立调 Prompt。
回归至少要同时看三类样本:原失败题验证是否修好,未参与调参的同类题验证是否解决一类问题,原成功题检查有没有回退。对比时固定数据/知识库快照、模型配置和评分规则;随机环节报告重复结果。只在原失败题上变好,可能只是针对那一道题调出来的效果。
最终还要比较任务成功、错误类型分布、耗时和成本。工具调用更少未必更好,可能只是提前退出;平均分提高也可能掩盖某类高风险问题变差。相关题目:如何设计 RAG 评估方案和指标?。
追问:复现不了或日志不全怎么办?
离线复现不了线上问题怎么办? 先对比数据版本、用户权限、缓存、时间条件和外部服务响应。能保存线上工具返回时,可固定这些返回重放后续流程,再单独检查工具链;重放涉及写入动作时应在隔离环境替换执行,避免重复操作。一次未复现不等于问题不存在,缺少哪些证据就补哪些观测。
召回服务报错,可以当成“没找到”继续回答吗? 两者含义不同:服务异常表示本次没有取得有效查询结果;查成功但无记录才是有效业务结果。可以设计降级,但应保留异常状态并避免把失败伪装成空数据。在问数流程中,SQL 校验失败可以进入校正分支;校正后是否再校验、最多重试几次,需要明确设计。教程现有流程校正后直接执行,带次数上限的再校验是可增加的改进。
工具超时,就能认定动作没执行吗? 不能。超时只说明调用方没有按时拿到结果,远端可能已经完成,也可能仍在执行。排查写操作时,要把调用记录与外部业务标识、执行状态、幂等键对应起来;先查状态,或按服务端支持的幂等约定处理。日志中的“超时”“取消”不能直接改写成“未创建订单”,也不能据此盲目重放。
对应教程
配套教程展示问数链路、典型错误和日志排查;本文进一步说明怎样聚类失败样本、通过单因素对照定位原因,并建立回归集。
- 电商问数第 11 章:关键词抽取与多路召回:§2 的字段、指标和取值分工。
- 电商问数第 12 章:召回信息合并与上下文构建:§5 的取值如何进入字段
examples。 - 电商问数第 14 章:SQL 生成与执行闭环:§10 的字段不存在、空结果与校正失败。
- 电商问数第 17 章:前后端联调与日志追踪:§2、§5 的异常分支和
request_id。
参考资料
- 国内:小林面试笔记:如何评估一个 Agent 的效果?:参考工具、轨迹与最终环境状态的分层检查,说明正常空结果、工具异常和真正完成任务不能混为一类,并保留不同合法路径与回归切片。
- 国内:JavaGuide:AI 应用评测:参考 Badcase 的证据、候选层、对照与回归记录,组织“华北”逐段取证、局部替换和修复后正常链路回归。
- 国内:JavaGuide:AI 可观测性与 Trace:参考上下文截断、调用尝试与外部状态的区别,补充为什么合并成功日志不能证明模型看见证据,超时日志也不能证明远端动作没有发生。
- 国内:王二讲 Agent:派聪明的 RAG 测评集:借鉴正确片段被后续阈值过滤、检索失败后实际降级的排查案例,说明应检查各阶段内容和实际执行路径,不能只看检索配置或总分。
- 国内:阿里云:RAG 效果优化:参考索引、检索、重排与生成逐段诊断的方法,说明应先确认资料在哪一步丢失,再选择修复入口并用固定基线比较。
- 国内:阿里云:如何保证幂等性:以支持
ClientToken的接口为例,补充写操作超时后的重复执行风险,以及状态核验与服务端幂等约定的重要性。 - 国外:Anthropic:Demystifying evals for AI agents:参考任务、运行轨迹、最终结果与评估器的区别,说明失败可能来自系统、评分或环境,单次恢复也不能代替重复验证。
- 国外:LangSmith:Evaluate a RAG application:参考答案与参考答案、用户问题、检索材料分别比较的做法,说明应先确认“错”的判断依据,再区分缺证据和未正确使用证据。
相关面经
30 篇CVTE
如何提高Agent数据处理的准确率的,通过哪些方式?
科大讯飞
后端开发工程师改造开源项目的时候,遇到模型输出结果和预期不符的情况吗,怎么处理?
百度
AI智能体算法如果评测集上的准确率很高,但线上效果很差,你会怎样排查?
字节跳动
AI 应用开发工程师失败案例是怎么做的?
网易
Agent 开发工程师当用户反馈Agent“很蠢”时,如何定位问题(可解释性)?[#面经#](https://www.nowcoder.com/creation/subject/928d551be73f40db82c0ed83286c8783) 牛客AI配图神器#
展开剩余 25 篇面经
滴滴
企业级算法实习生印象比较深的bad case?
海底捞
AI工程师实习生遇到过哪些bad case,根因,如何解决
美团
AI 后端有没有用户反馈过 Critic 判断错误?这种 Bad Case 如何处理?
阿里巴巴
AI 应用研发工程师华为
AI 开发工程师对失败的任务怎么进行分析并且反过来迭代优化?
字节跳动
前端开发工程师最难定位的问题
百度
业务问答 Agent 是否收到过异常反馈,如何处理?
百度
Agent Harness 研发工程师项目上线的时候有没有出现什么修复失败的问题。
传音
Java 开发工程师7 具体说明ai项目里的一个模块的流程,出现异常怎么解决,怎么识别错误。
百度
AI 测试开发工程师拷打项目:不过基本上是围绕测试进行的,比如如何构建测试集,怎么评测agent输出的效果,并行节点遇到冲突怎么解决?项目开发系统怎么构建trace,如何定位问题等等,agent返回结果不理想怎么排查问题?
阿里巴巴
AI 应用开发工程师讲一下你在这个项目里遇到最难定位的一个 Bad Case 是什么?
作业帮
Agent 应用开发工程师这种方式的bad case有吗?做得不够好的地方?
VITURE
Agent 平台开发工程师拼多多
Agent 应用开发工程师整体要把 Agent 效果提上来,除了换模型、加各种约束,还能怎么优化?
知识科技
Agent 应用开发工程师阿里巴巴
基础设施平台开发工程师如果模型判断不出或判断错误,你们怎么识别和处理?
百度
Agent 应用开发工程师倘若你负责的Agent工作流板块场景出了问题,讲一下你怎么解决
哔哩哔哩(B站)
Agent 应用开发工程师Agent效果一般般,并且有一定的badcase,怎么确定Agent优化方向
唯品会
Agent 开发工程师Agent 做不了的时候,你们怎么发现问题?
唯品会
Agent 开发Agent的bad case及调试方式。
字节跳动
Agent 开发出现Badcase时,怎么快速定位是哪个环节出了问题?怎么判断该对哪个Agent做SFT优化?
快手
Agent 研发badcase分析有什么心得?有做沉淀吗?
公司未注明
Agent 开发真实的业务场景下,一类agent的需求通常是收敛的,你需要对agent在特定场景上做优化,你有什么优化的思路吗?RAG是一种处理手段,那如果agent的任务里不仅是在知识库检索,还包含写脚本、写SQL之类的任务,你还有什么处理方法?
花小小新疆炒米粉
AI 工程师badcase解决
字节跳动
AI 产品经理收录题集
AI 智能体与大模型应用开发面试题库
Harness Engineering 面试题
专题学习通用追问
Agent与工具调用
展开其余 2 条原题
Agent错误处理与自愈机制 「京东、字节跳动、美团、阿里巴巴」







