Agent 可观测 & Trace + Eval(追踪 + 评测)
面试核心:Trace 是记录运行时全链路日志,用来排错;Eval 是量化评估 Agent 效果,衡量好不好。二者配合:trace 用于调试定位问题,eval 做指标量化,二者不能互相替代。 结合前面的三层路由(正则‑向量‑LLM)Agent来讲,会更贴合你的业务场景。
一、Trace(链路追踪,可观测)
核心目标
把 Agent 每一步执行完整记录下来,复现问题、定位故障。 Agent 执行链路:用户query →正则层→向量检索层→LLM路由→工具调用→思考‑行动‑观测→输出结果,每一步都要打 trace。
1. Trace 需要采集哪些字段(面试必背)
- 基础元信息:会话 id、trace_id、用户 query、时间戳、模型版本、embedding 模型版本
- 各层中间结果(三层路由场景)
- 正则层:是否命中、匹配到的正则 pattern、命中意图
- 向量层:query embedding、检索 top‑k 结果、每条相似度分数、是否命中阈值
- LLM 路由层:输入 prompt、LLM 返回原始输出、解析后的 intent、置信度
- Agent 内部流转(ReAct/LangGraph)
- Thought(思考)、Action(调用哪个工具、入参)、Observation(工具返回结果)
- 迭代轮次、是否触发最大轮数、是否死循环、异常报错
- 输出结果:最终意图、返回回答、耗时、token 消耗(input/output token)
- 异常信息:工具调用失败、json 解析错误、超时、格式错乱
关键:trace 要保存原始输入输出,不要只存最终结果,否则无法复现问题。
2. 存储与展示
- 存储:trace 数据存入数据库 / 向量库 / 日志系统,trace_id 作为唯一主键,可以根据会话 id 查询完整链路。
- 可视化:LangSmith、LangGraph Checkpoint、OpenTelemetry,把每一步节点展开,看到:哪一层失败、向量相似度多少、LLM 返回了什么、工具返回什么。
3. 典型排查场景(面试追问)
- 用户 query 识别错误:通过 trace 看:正则有没有命中?向量检索 top1 相似度多少?LLM 路由原始输出是什么?
- Agent 死循环:看 trace 迭代轮次,看每一轮 Thought‑Action,定位为什么一直重试。
- 工具调用格式错误:看 LLM 原始输出,是 schema 约束失效还是 prompt 问题。
注意:Trace 是事后调试,不能直接衡量 Agent 好坏,只能看发生了什么。
二、Eval(评测,量化效果)
Eval 分两类:离线评测(数据集跑批量测试)、在线评测(生产环境采样评估)。
结合三层路由意图识别场景,评测目标:意图识别准确率、各层分流正确率、误判、unknown 占比。
1. 评测数据集构建
需要构造测试集,每条样本: {query: "xxx", golden_intent: "正确意图", expected: "预期结果"} 覆盖场景:
- 正则可以命中的样本
- 向量可以命中的同义改写样本
- 模糊复杂 query,需要 LLM 兜底的样本
- 应该识别为 unknown 的样本(不在意图集合)
2. 核心评测指标(面试高频)
① 意图识别任务(三层路由)
- 整体准确率:预测意图 == golden 意图
- 各层分流指标
- 正则层命中率:多少 query 被正则处理;正则层准确率
- 向量层分流占比:多少 query 流入向量层;向量层准确率
- LLM 兜底占比:多少 query 落到 LLM 层;LLM 意图准确率
业务意义:如果大量 query 都落到 LLM 层,说明正则、向量样本库建设不足,成本会上涨。
- 误判率:把 A 意图识别成 B 意图
- unknown 召回率:真实未知 query,模型正确输出 unknown 的比例
- 性能指标:平均耗时、token 消耗
② Agent 通用指标(ReAct/LangGraph)
- 任务完成率:是否达成目标
- 工具调用正确率:是否调用正确工具,参数是否正确
- 幻觉率:输出事实与工具返回不一致
- 迭代轮数:平均循环次数,是否频繁触发 max_iter
3. Eval 的两种实现方式
方式 1:自动化 LLM‑as‑judge(大模型做裁判)
把 query、Agent 输出、ground truth 交给评测大模型,输出打分。 适合复杂 Agent 任务,没有简单的标准答案。
缺点:评测模型本身会有幻觉,需要做校验。
方式 2:传统指标(规则 / 脚本)
针对意图识别这种分类任务,直接对比预测标签和 golden 标签,计算准确率、召回。
4. 离线评测 vs 线上采样评测
- 离线评测:用测试数据集批量跑完整 Agent 链路,输出指标,用于迭代版本,上线前验证。
- 线上采样评测:生产环境抽样真实用户 query,把 trace 数据捞出来人工标注,持续监控效果。
线上不要全部人工标,采样即可。
三、Trace + Eval 如何结合工作流(面试重点)
- 开发阶段 :本地跑测试用例,Trace 看每一步中间结果,定位问题;同时跑 Eval 得到指标,验证改动是否带来效果提升。
- 版本迭代:修改正则、向量样本、prompt 之后,跑离线评测,对比新旧版本指标;同时看 trace 链路,确认分流比例变化。
- 线上运行:全量采集 trace 日志;定期采样线上 trace 做人工 Eval;监控指标:LLM 兜底占比、意图准确率、错误率。
- 问题闭环:线上发现 bad case,从 trace 拿到完整的 query 和中间链路,把 bad case 加入评测数据集,迭代模型 / 规则。
举个三层路由的 bad case 例子: 用户输入 "我想看看账户里面还有多少钱",向量检索 top1 相似度 0.82(低于阈值 0.85),流入 LLM 层。 通过 trace 看到:向量样本缺少这个口语变体,需要扩充向量库样本,减少 LLM 调用。
四、主流工具(面试会问)
- Trace 工具:LangSmith、LangGraph Checkpoint、OpenTelemetry、自定义日志埋点
- Eval 工具:Ragas、AgentBench、PromptEval
- Ragas:支持 Agent 评测,支持 LLM‑as‑judge,支持 trace 数据导入做评测
- AgentBench:专门针对 Agent 多步任务评测
五、高频面试追问点
- Trace 和 Eval 区别?
Trace 记录发生了什么,用于调试定位;Eval 评价效果好不好,量化指标。Trace 是观测,Eval 是度量。
- 三层路由 Agent,怎么做可观测?
每一层(正则、向量、LLM)全部埋点记录输入输出、匹配结果、相似度分数、耗时。保存完整 trace_id 链路;离线评测统计各层分流占比、各层准确率;线上采样 bad case,把 bad case 补充到数据集。
- 怎么避免评测过拟合?
测试集不要和训练 / 向量样本库重合;线上采样真实用户 query 做评测,不要只用人工构造数据集。
- 大模型做裁判的缺点?
评测模型本身存在幻觉,会打分不准,需要结合人工校验,不能完全依赖 LLM‑as‑judge。
30 秒口述总结
Trace 就是全链路追踪,记录 Agent 每一步的中间输入输出,包含正则、向量、LLM 各层的结果,保存 trace_id 用于复现问题、定位故障。Eval 是评测,通过数据集做离线批量测试,或者线上采样人工标注,计算准确率、分流占比、任务完成率等指标。Trace 用来排错,Eval 用来衡量效果,二者配合。Ragas 这类工具可以把 trace 日志导入做自动化评测,线上也要持续采集 bad case 迭代数据集。