agent的trace 和eval

Agent 可观测 & Trace + Eval(追踪 + 评测)

面试核心:Trace 是记录运行时全链路日志,用来排错;Eval 是量化评估 Agent 效果,衡量好不好。二者配合:trace 用于调试定位问题,eval 做指标量化,二者不能互相替代。 结合前面的三层路由(正则‑向量‑LLM)Agent来讲,会更贴合你的业务场景。

一、Trace(链路追踪,可观测)

核心目标

把 Agent 每一步执行完整记录下来,复现问题、定位故障。 Agent 执行链路:用户query →正则层→向量检索层→LLM路由→工具调用→思考‑行动‑观测→输出结果,每一步都要打 trace。

1. Trace 需要采集哪些字段(面试必背)

  1. 基础元信息:会话 id、trace_id、用户 query、时间戳、模型版本、embedding 模型版本
  2. 各层中间结果(三层路由场景)
  • 正则层:是否命中、匹配到的正则 pattern、命中意图
  • 向量层:query embedding、检索 top‑k 结果、每条相似度分数、是否命中阈值
  • LLM 路由层:输入 prompt、LLM 返回原始输出、解析后的 intent、置信度
  1. Agent 内部流转(ReAct/LangGraph)
  • Thought(思考)、Action(调用哪个工具、入参)、Observation(工具返回结果)
  • 迭代轮次、是否触发最大轮数、是否死循环、异常报错
  1. 输出结果:最终意图、返回回答、耗时、token 消耗(input/output token)
  2. 异常信息:工具调用失败、json 解析错误、超时、格式错乱

关键:trace 要保存原始输入输出,不要只存最终结果,否则无法复现问题

2. 存储与展示

  • 存储:trace 数据存入数据库 / 向量库 / 日志系统,trace_id 作为唯一主键,可以根据会话 id 查询完整链路。
  • 可视化:LangSmith、LangGraph Checkpoint、OpenTelemetry,把每一步节点展开,看到:哪一层失败、向量相似度多少、LLM 返回了什么、工具返回什么。

3. 典型排查场景(面试追问)

  1. 用户 query 识别错误:通过 trace 看:正则有没有命中?向量检索 top1 相似度多少?LLM 路由原始输出是什么?
  2. Agent 死循环:看 trace 迭代轮次,看每一轮 Thought‑Action,定位为什么一直重试。
  3. 工具调用格式错误:看 LLM 原始输出,是 schema 约束失效还是 prompt 问题。

注意:Trace 是事后调试,不能直接衡量 Agent 好坏,只能看发生了什么。

二、Eval(评测,量化效果)

Eval 分两类:离线评测(数据集跑批量测试)、在线评测(生产环境采样评估)

结合三层路由意图识别场景,评测目标:意图识别准确率、各层分流正确率、误判、unknown 占比。

1. 评测数据集构建

需要构造测试集,每条样本: {query: "xxx", golden_intent: "正确意图", expected: "预期结果"} 覆盖场景:

  • 正则可以命中的样本
  • 向量可以命中的同义改写样本
  • 模糊复杂 query,需要 LLM 兜底的样本
  • 应该识别为 unknown 的样本(不在意图集合)

2. 核心评测指标(面试高频)

① 意图识别任务(三层路由)
  1. 整体准确率:预测意图 == golden 意图
  2. 各层分流指标
    • 正则层命中率:多少 query 被正则处理;正则层准确率
    • 向量层分流占比:多少 query 流入向量层;向量层准确率
    • LLM 兜底占比:多少 query 落到 LLM 层;LLM 意图准确率

业务意义:如果大量 query 都落到 LLM 层,说明正则、向量样本库建设不足,成本会上涨。

  1. 误判率:把 A 意图识别成 B 意图
  2. unknown 召回率:真实未知 query,模型正确输出 unknown 的比例
  3. 性能指标:平均耗时、token 消耗
② Agent 通用指标(ReAct/LangGraph)
  • 任务完成率:是否达成目标
  • 工具调用正确率:是否调用正确工具,参数是否正确
  • 幻觉率:输出事实与工具返回不一致
  • 迭代轮数:平均循环次数,是否频繁触发 max_iter

3. Eval 的两种实现方式

方式 1:自动化 LLM‑as‑judge(大模型做裁判)

把 query、Agent 输出、ground truth 交给评测大模型,输出打分。 适合复杂 Agent 任务,没有简单的标准答案。

缺点:评测模型本身会有幻觉,需要做校验。

方式 2:传统指标(规则 / 脚本)

针对意图识别这种分类任务,直接对比预测标签和 golden 标签,计算准确率、召回。

4. 离线评测 vs 线上采样评测

  1. 离线评测:用测试数据集批量跑完整 Agent 链路,输出指标,用于迭代版本,上线前验证。
  2. 线上采样评测:生产环境抽样真实用户 query,把 trace 数据捞出来人工标注,持续监控效果。

线上不要全部人工标,采样即可。

三、Trace + Eval 如何结合工作流(面试重点)

  1. 开发阶段 :本地跑测试用例,Trace 看每一步中间结果,定位问题;同时跑 Eval 得到指标,验证改动是否带来效果提升。
  2. 版本迭代:修改正则、向量样本、prompt 之后,跑离线评测,对比新旧版本指标;同时看 trace 链路,确认分流比例变化。
  3. 线上运行:全量采集 trace 日志;定期采样线上 trace 做人工 Eval;监控指标:LLM 兜底占比、意图准确率、错误率。
  4. 问题闭环:线上发现 bad case,从 trace 拿到完整的 query 和中间链路,把 bad case 加入评测数据集,迭代模型 / 规则。

举个三层路由的 bad case 例子: 用户输入 "我想看看账户里面还有多少钱",向量检索 top1 相似度 0.82(低于阈值 0.85),流入 LLM 层。 通过 trace 看到:向量样本缺少这个口语变体,需要扩充向量库样本,减少 LLM 调用。

四、主流工具(面试会问)

  1. Trace 工具:LangSmith、LangGraph Checkpoint、OpenTelemetry、自定义日志埋点
  2. Eval 工具:Ragas、AgentBench、PromptEval
  • Ragas:支持 Agent 评测,支持 LLM‑as‑judge,支持 trace 数据导入做评测
  • AgentBench:专门针对 Agent 多步任务评测

五、高频面试追问点

  1. Trace 和 Eval 区别?

Trace 记录发生了什么,用于调试定位;Eval 评价效果好不好,量化指标。Trace 是观测,Eval 是度量。

  1. 三层路由 Agent,怎么做可观测?

每一层(正则、向量、LLM)全部埋点记录输入输出、匹配结果、相似度分数、耗时。保存完整 trace_id 链路;离线评测统计各层分流占比、各层准确率;线上采样 bad case,把 bad case 补充到数据集。

  1. 怎么避免评测过拟合?

测试集不要和训练 / 向量样本库重合;线上采样真实用户 query 做评测,不要只用人工构造数据集。

  1. 大模型做裁判的缺点?

评测模型本身存在幻觉,会打分不准,需要结合人工校验,不能完全依赖 LLM‑as‑judge。

30 秒口述总结

Trace 就是全链路追踪,记录 Agent 每一步的中间输入输出,包含正则、向量、LLM 各层的结果,保存 trace_id 用于复现问题、定位故障。Eval 是评测,通过数据集做离线批量测试,或者线上采样人工标注,计算准确率、分流占比、任务完成率等指标。Trace 用来排错,Eval 用来衡量效果,二者配合。Ragas 这类工具可以把 trace 日志导入做自动化评测,线上也要持续采集 bad case 迭代数据集。

相关推荐
IT_陈寒1 小时前
Redis的DEL命令居然没删干净数据?这个坑我爬了半天
前端·人工智能·后端
kyriewen1 小时前
面试官让我现场用 AI 改一个真实 bug——他打断我的 3 个理由
前端·面试·ai编程
Sagittarius_A*1 小时前
Burst Lab | PHP 审计 13|反序列化(三):POP 链构造与 Gadget Chain 分析
开发语言·web安全·php·代码审计·反序列化
职场的momo1 小时前
11个后端与AI岗位同时开放:Java、网关、推理优化怎么匹配
java·开发语言·人工智能
蓝速科技2 小时前
蓝速科技丨新旧楼宇混杂场景下会议室预约门牌屏一体化改造方案
开发语言·科技·php
计算机魔术师2 小时前
斯坦福研究:AI 对入门级岗位冲击最大
前端
梦想的旅途22 小时前
Python实现企业微信文本消息发送
开发语言·python·企业微信
感谢一路走过的人2 小时前
AGGrid刷新数据后执行筛选
javascript·ag-grid
水獭比特2 小时前
工具都批准了,为什么还不能执行?给 Agent 补上第二道校验
javascript·人工智能·node.js