Agent 开发

Agent 表现不符合预期,怎么定位是 prompt、模型能力还是流程设计问题?

91学AI·2026/7/26·13 阅读

考察点

这道题考的是系统性排障能力。很多人排查 agent 问题靠「拍脑袋改 prompt 试试」,面试官想看的是你能不能分层隔离变量:先定位问题发生在哪一层,再用可控实验验证假设。追问通常往「用什么工具拿 trace」「eval 集怎么搭」「线上线下表现不一致怎么查」走。

参考答案

先建立分层模型

Agent 的失败基本可以归因到四层:工具层,工具本身有 bug、返回格式不符合预期、超时或被限流;上下文层,指令模糊、关键信息没进上下文、工具描述有误导性;模型能力层,推理跟不上、指令遵循差、幻觉;流程设计层,架构问题,比如该拆的子任务没拆、单个 agent 挂了太多工具导致选择困难。这个分层不是理论洁癖,是因为不同层的修法完全不同——prompt 层的问题你换十个模型也没用,流程层的问题你改一百版 prompt 也只是碰运气。

第一步:拿到完整 trace

没有 trace 不谈调试。用 LangSmith、Langfuse 或者 OpenTelemetry 把每一次 run 的每步模型输入输出、工具调用的参数和返回、耗时、token 消耗全部落盘。拿到 bad case 之后,顺着 trace 找「第一个偏离预期的决策点」,而不是盯着最终输出倒推。我的经验是,八成的问题顺着 trace 看一遍就能定位到层,剩下两成才需要做实验。最常见的错误是看到最终答案错了就直接改系统提示——答案错往往是第三步的检索就歪了,你改的是第五步的 prompt。

分层验证

怀疑工具层,就把那一步的工具调用抠出来,用同样的参数直接调一遍。结果不对或超时,就是工具问题,和模型无关。这一步五分钟就能完成,永远最先做。

怀疑上下文层,去检查模型在那一步实际收到的完整消息列表——是你以为它收到的那些吗?实际踩过的坑包括:系统提示被截断策略裁掉了、检索结果根本没拼进去、历史消息里混入了上一个任务的残留内容、工具描述写得让模型误以为参数是另一个含义。验证方法是固定输入、只改 prompt 重放,看输出是否改善。

怀疑模型能力层,用同一个 prompt 换更强的模型重放。强模型能过、弱模型不过,说明摸到了能力边界,对策是在这个步骤路由到强模型,或者降低这一步的推理负担——把复杂判断拆成两步、给 few-shot 示例、让输出格式更简单。如果强模型也不过,那大概率不是模型问题,回头重查上下文层和流程层。

怀疑流程层,看 case 分布:如果多个 bad case 集中失败在同一个节点,而且换模型、改 prompt 都改善有限,基本就是架构问题。典型症状是一个 agent 挂着二十个工具,选错率居高不下——这时该做的是拆职责、加路由层,而不是继续在 prompt 里喊「请仔细选择工具」。

从 debug 到 eval

修完单个 case 不算完。把每个 bad case 收进回归集,攒上几十个典型场景就有了 eval 集:可以对中间步骤设检查点,用规则或 LLM-as-judge 打分——工具选对没有、检索结果够不够、最终答案是否满足 rubric。之后每次改 prompt、升模型、调流程,先跑 eval 再上线,防止按下葫芦浮起瓢。debug 解决点的问题,eval 解决面的问题,两个都要有。

一个实战例子

我们一个搜索 agent 经常答非所问。trace 一看,它第一轮检索直接拿用户原话当 query,里面全是口语表达,专有名词一个没命中,检索结果为空,然后模型开始凭印象编。这是流程设计问题——缺 query 改写步骤。加了一个 rewrite 节点把口语查询改写成检索友好的形式,这一类 case 直接消失。教训就一条:找到第一个分叉点,别在下游打补丁。

可能的追问

  • 线上和离线表现不一致怎么查? 重点查上下文差异:线上有历史对话、用户画像注入、实时变化的检索结果。拿线上的真实输入完整重放到离线环境,差异自然会暴露。
  • 模型升级后效果反而退化怎么办? prompt 是针对旧模型的行为特点调出来的,新模型的指令遵循方式变了,旧 prompt 里的「哄模型」话术可能起反作用。用 eval 集灰度验证,针对新模型重新调 prompt 再全量。
  • LLM-as-judge 可信吗? 评判标准要写成具体 rubric 而不是「好不好」,上线前先抽样和人工标注对一致性,一致率达标才能当回归信号,别拿 judge 当绝对真理。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.