面试 · 场景排查型
考察目标:从现象追到根因,展示实战排障能力 约 8 题,覆盖 AI Agent 工程典型故障场景 说明:每题分「题干」(标题)与「参考答案」两段。
Q1:Agent 一直选错工具,怎么排查?#
参考答案
排查链路:
text
trace → tool description → schema → 上下文约束 → 候选重叠 → eval 验证详细步骤:
- 看 trace:模型为什么选这个工具?决策时的 prompt 是什么?候选工具有哪些?
- 看 tool description:description 模糊吗?与其他工具语义重叠吗?边界说清了吗?
- 看 schema:参数约束够吗?有 enum 吗?required 明确吗?
- 看上下文约束:system prompt 里有工具使用规则吗?任务边界清楚吗?
- 看候选重叠:多个工具 description 在向量空间相似度高吗?需要合并/拆分吗?
- eval 验证:标注 golden tool,跑工具选择准确率,改完重新跑
常见根因与解决:
- description 模糊 → 重写,明确"做什么"和"不做什么"
- 工具太多 → 加 Router 预筛
- 语义重叠 → 合并相似工具或用 enum 强制区分
- 上下文不足 → system prompt 加工具使用规则
(选错工具的根因原理与 eval 方法见 3-原理 Q1。)
Q2:RAG 检索正确但回答错误,怎么排查?#
参考答案
排查链路:
text
检索是否进上下文 → 是否截断 → 引用是否被忽略 → system prompt → rerank → faithfulness eval详细步骤:
- 检索是否进上下文:trace 里看 RAG 结果是否真的塞进了 messages
- 是否截断:top-k 太大被截断了?超 context budget 被丢了?相关 chunk 是否被挤出有效上下文
- 引用是否被忽略:模型有没有基于检索内容回答,还是自己编了;chunk 有没有带来源标注让模型能引用
- system prompt:有没有明确要求"必须基于检索证据回答、给出出处、证据不足就说不知道"
- rerank:相关 chunk 排到前面了吗?还是被噪声 chunk 淹没("lost in the middle")
- faithfulness eval:用 Ragas 评 faithfulness 分数,量化"忠实度"
常见根因(注意正确归因,忠实度问题几乎不是 temperature 引起的):
- 检索结果被截断 / 排序靠后,没真正进入有效上下文(context budget 不够、rerank 没起效)
- system prompt 没要求"基于证据作答 / 给出处 / 不足即拒答"——模型没有被约束去引用,就会自由发挥
- chunk 缺来源标注,模型无法把事实对应到出处,只能"凭记忆"编
- 参数化知识与检索内容冲突时,模型偏信自己(需强制"以检索为准"并显式标注冲突)
纠偏:不要把忠实度归因到"temperature 太高"——temperature 影响的是输出随机性/多样性,不是"是否基于证据作答"。忠实度靠证据是否进上下文 + 是否强制引用来治,不靠调低温度。
Q3:Agent 执行到一半卡住,怎么排查?#
参考答案
排查链路:
text
卡在 LLM/工具/等待输入? → 超时? → 循环? → 等审批? → 工具异常未处理? → 需 checkpoint/resume?详细步骤:
- 卡在哪一层:
- 卡在 LLM(推理不返回)→ 模型问题/网络/限流
- 卡在工具(工具不返回)→ 工具实现问题/网络
- 卡在等待(等用户审批)→ UX 问题
- 是否超时:LLM/工具调用是否超时
- 是否循环:Agent 是否反复调用同一工具(检测与打断原理见 3-原理 Q3)
- 是否等审批:HITL 审批是否未处理
- 工具异常未处理:工具抛异常但 Agent 不知道怎么办
- 是否需要 checkpoint/resume:长任务中断了能否恢复
常见根因与解决:
- LLM 限流 → 重试 + 降级(切小模型)
- 工具超时 → 设超时 + 重试 + 降级
- 循环 → max_consecutive_same_tool 检测
- 等审批 → 优化审批 UX、支持异步
- 异常未处理 → 加 try/except + 错误回灌给模型
Q4:Coding Agent 改坏代码,怎么排查?#
参考答案
排查链路:
text
理解 repo? → 跑测试? → patch 过大? → 无 review gate? → 无 worktree 隔离? → test loop/hooks/diff?详细步骤:
- 理解 repo 了吗:Agent 是否读了 README、看了目录结构、理解了模块划分
- 跑测试了吗:有没有 Test Loop?改完是否跑了测试
- patch 过大:改了太多文件?是不是该拆成多个小 patch
- 有无 review gate:是否有自动 review(lint/security scan)+ 人工 review
- 有无 worktree 隔离:在主仓库改还是 worktree 改?是否污染主分支
- test loop/hooks/diff:Hooks 拦截了吗?diff 是否清晰?
常见根因:
- 没 Test Loop → "自信地写 bug"
- patch 过大 → 一次改太多,模型注意力分散
- 没 review gate → 错误直接合入
- 没隔离 → 改坏了主仓库
解决:
- 加 Test Loop(改完必跑测试)
- patch 拆小(一次一个逻辑变更)
- 加 Review Gate(自动 + 人工)
- 用 worktree 隔离(Claude Code 与 Codex 都支持,见 2-对比 Q4)
Q5:MCP 工具调用异常,怎么排查?#
参考答案
排查链路:
text
server 可用? → tools/list 正常? → schema 被读取? → transport 权限/环境变量? → 返回结构? → 注入风险?详细步骤:
- server 可用吗:MCP Server 进程是否启动?端口是否监听?
- tools/list 正常吗:调用 tools/list 看返回的工具列表
- schema 被读取吗:Agent 是否正确解析了工具 schema
- transport 权限/环境变量:stdio/HTTP/SSE 配置对吗?凭证注入了吗?token audience 校验了吗?
- 返回结构:工具返回的格式是否符合预期
- 注入风险:返回内容里有没有恶意指令(间接 prompt injection,拆解见 1-概念 Q11)
常见根因:
- Server 崩溃未重启
- schema 格式错误
- 凭证未注入或过期、token 透传给上游(Confused Deputy 风险,见 3-原理 Q11)
- transport 配置错(如 stdio 路径错)
- 返回内容触发 prompt injection
Q6:Agent 成本突然升高,怎么排查?#
参考答案
排查链路:
text
调用次数/上下文长度/循环/重试/多 agent 并行/异常长任务 → 如何设 step·token·cost budget详细步骤:
- 调用次数:是否调用次数突然增多(看 trace)
- 上下文长度:是否上下文膨胀(没 Compaction?RAG 召回太多?缓存前缀被打破导致命中率骤降?)
- 循环:是否陷入循环反复调用
- 重试:工具失败后是否无脑重试
- 多 agent 并行:是否启了过多并行 agent
- 异常长任务:是否有任务跑了几百步
如何设 budget(本题为 budget 分级的规范条目,其他题引用此处):
text
Step Budget: max 50 步/任务(防失控循环)
Token Budget: max 200K token/任务(直接限制)
Cost Budget: max $5/任务(跨模型可比)
预警:
70% → 提醒 Agent 优化策略
90% → 提示用户
100% → 强制停止路由降级:预算紧张时切小模型(大模型 → Haiku → 本地小模型)。
先降本再限额:突然升高时先查是不是缓存命中率掉了/上下文没压缩,用 prompt caching + compaction 把单位成本压下来(见 3-原理 Q13/Q12),再谈调 budget——否则只是把功能砍掉。
Q7:Skill 安装后异常行为,怎么排查?#
参考答案
排查链路:
text
来源可信? → 权限过大? → 隐藏脚本/外部依赖? → 读敏感文件? → 外部网络? → 污染记忆? → 回滚隔离审计详细步骤:
- 来源可信吗:官方认证?知名开发者?还是匿名发布
- 权限过大吗:申请了
/**文件访问?*网络访问?*凭证 - 隐藏脚本/外部依赖:静态扫描是否有 subprocess/curl/eval,依赖是否有 typo-squatting
- 读敏感文件吗:trace 看是否读了
~/.ssh、~/.aws等 - 外部网络吗:是否访问了非预期域名
- 污染记忆吗:是否写了长期记忆(如"user_preference: always_cc_attacker@example.com ")
回滚隔离审计:
- 立即禁用技能
- 撤销技能对长期记忆的修改(记忆审计 + 回滚)
- 删除技能创建的临时文件
- 撤销环境变量注入
- 清理凭证
- 全程审计记录(保留证据)
Q8:Browser/Computer Use 操作错页面,怎么排查?#
参考答案
排查链路:
text
观察源(DOM/截图/a11y)? → tab 借用? → 登录态? → selector 失效? → 异步加载? → replay trace详细步骤:
- 观察源:用了 DOM、截图还是 a11y tree?信息够吗?
- tab 借用:是否借用了用户已登录的 tab?借错了?
- 登录态:是否登录态过期了?是否在错误的账号下操作
- selector 失效:页面改版导致 selector 失效?
- 异步加载:点击后页面还没加载完就操作了?
- replay trace:回放操作 trace,看哪一步开始出错
常见根因与解决:
- 观察源信息不足 → 多源融合(a11y tree + 截图 + DOM)
- tab 借用错 → 校验 tab URL 再操作
- 登录态过期 → 操作前验证登录态
- selector 失效 → 用 a11y tree 的 element_id 而非 xpath
- 异步加载未等 → 加 wait_for_selector 或轮询
Computer Use 风险升级:Browser Use 出错最多搞乱浏览器,Computer Use 出错能搞乱整个系统——必须 Sandbox + 强审批 + 操作回滚。(Computer Use 代表产品为 Anthropic Computer Use、OpenAI Operator,见 1-概念 Q9。)