LLM可观测性
与传统微服务应用所关注的黄金三指标(请求数,错误,耗时)类比,我们认为 AI 应用的黄金三指标可能是 Token,Error,Duration。
- 耗时主要关注的是模型推理延迟,也就是在推理过程中我们通常需要关注模型的首包延迟,即 TTFT(Time to first token),这个指标反映了相应的速度,还有像 TPOT (Time Per Output Token) 反映生成的效率和流畅度。另外一个比较重要的指标就是吞吐率。吞吐率可以衡量我们这个模型本身,能够同时去支撑多少个推理请求。所以这几个指标是需要进行一些平衡的,三个指标不可能同时满足得特别好。
- Token 可能是 AI 应用最重要的一个指标,所以每次请求会记录 Token 的消耗情况,甚至我们需要精确地区分 Input Token 和 Output Token 的消耗,因为大家知道模型的定价里面 Input Token 和 Output Token 是不一样的,我们在成本核算的时候,会将输入 Token 和输出 Token 分别进行统计。
- 不同卡的负载情况也是不一样的,这个也应该上报,并在扛不住的时候,自动熔断降级(比如用其他的卡)
耗时耗在哪? ==> 全链路追踪
问答质量
我们要解决模型回答得好不好,每次模型的升级和优化,都需要建立一个基线,并且确保模型的迭代满足这个基线,否则回答的质量会导致用户体验受损。为此,我们把模型的 input/output 全部都采集到日志平台中,接下来我们可以筛选出一批记录,通过数据加工,引用外部的裁判员模型,对当前这个模型回答的输入输出结果进行一个评估。
要把Trajectory做好
Trajectory 直译是:轨迹、路径、运行过程。
在 LLM Agent / AI Agent 里,Trajectory 通常指:
Agent 为了完成一个任务,从接收用户问题开始,到最终输出答案为止,中间经历的完整执行过程。
它不只是最终答案,而是包括中间所有步骤。
例如用户问:
“帮我查一下某个法规,并总结适用条件。”
一个 Agent 的 trajectory 可能是:
1. 接收用户问题
2. 判断用户意图:法规查询 + 条件总结
3. 改写检索 query
4. 调用知识库检索工具
5. 读取召回的法规条文
6. 判断哪些条文相关
7. 再次调用工具补充查询
8. 组织答案
9. 输出最终回答
这些步骤合起来,就叫一条 Agent trajectory。
在评估里,trajectory evaluation 就是评估这整条过程是否合理,而不是只看最后答案对不对。比如:
工具选对了吗?
参数填对了吗?
调用顺序对吗?
有没有多余步骤?
有没有漏掉关键检索?
最终答案是否基于前面的工具结果?
所以你可以这样理解:
| 词 | 中文理解 |
|---|---|
| Output | 最终输出 |
| Trace | 运行追踪记录 |
| Trajectory | Agent 完成任务的完整行为路径 |
| Step | 轨迹中的某一步 |
| Tool Call | 轨迹中的一次工具调用 |
在你的文档里,Trajectory 建议翻译成:
执行轨迹 或 任务轨迹
如果偏工程可观测性,写 执行轨迹 更自然;如果偏论文和 Agent 评估,写 任务轨迹 或 Agent 轨迹 更合适。
下面是一篇按你给出的对话材料整理出来的文档版总结。核心结论是:AI Agent 可观测性不能只做传统 APM,而要做“轨迹采集 → 轨迹评估 → 失败归因 → 轨迹优化”的闭环。你上传的材料中,已经把相关资料分成了 Survey、AgentTrace/Pockit/Phoenix/Arize、TRAJECT-Bench/LangSmith/AgentEvals、失败归因、ETO/AgentTrek/T-PRA 等几类,这个划分可以直接作为文档主线。
AI Agent 可观测性应该如何做
1. 先明确:AI 可观测性不是普通日志系统
传统服务监控主要看延迟、错误率、吞吐量、HTTP 状态码。但 LLM Agent 的问题是:一次 HTTP 200 也可能返回错误答案;一次请求内部可能包含多次 LLM 调用、RAG 检索、工具调用、参数提取、结果比较和最终生成;失败也不一定来自程序异常,而可能来自模型推理、工具选择、参数构造、检索上下文或多步依赖错误。你上传材料中的 Pockit 翻译明确指出,传统 APM 对“自信地犯错”“无限工具调用循环”“token 成本失控”等问题不可见。
因此,AI Agent 可观测性的目标应该是:
不只是知道系统有没有报错,而是知道 Agent 在每一步做了什么、为什么这么做、工具是否调对、参数是否填对、检索是否靠谱、输出质量是否下降、成本是否失控,以及失败发生在哪一步。
这与 AgentTrace 的观点一致:AgentTrace 将 Agent 可观测性提升为安全性、可复现性、问责性和实时监控的基础层,并强调应捕获 operational、cognitive、contextual 三类结构化轨迹。(arXiv)
2. 总体架构:建议做四层
你给出的材料中,Pockit 把 LLM Observability 拆成四层:Instrumentation、Tracing、Evaluation、Dashboards。这个分层非常适合作为工程落地架构。
| 层级 | 中文含义 | 核心作用 | 应做到什么程度 |
|---|---|---|---|
| 第 1 层 | 插桩 Instrumentation | 捕获每次 LLM 调用、工具调用、RAG 检索、业务步骤 | 所有关键 Agent 步骤必须有 span |
| 第 2 层 | 追踪 Tracing | 用 trace/span 还原完整调用树 | 能看到一次请求中的完整执行轨迹 |
| 第 3 层 | 评估 Evaluation | 判断这条轨迹和最终答案好不好 | 不能只看 HTTP 成功,要有质量评分 |
| 第 4 层 | 仪表盘 Dashboards | 看成本、质量、延迟、SLA、告警 | 能支持线上监控、回归检测、问题排查 |
这四层可以进一步对应到 Agent 工程闭环:
采集轨迹 → 评估轨迹 → 定位失败 → 优化 Agent → 新版本继续采集。
你上传材料中也明确把这个闭环总结为:记录 reasoning / tool use / retrieval / external I/O / latency / token / errors,然后评估 final answer、tool selection、argument correctness、ordering、dependency,再做失败归因和轨迹优化。
3. 轨迹采集应该怎么做
3.1 用 trace/span 记录完整执行链
每一次用户请求都应该有一个 trace_id,每一个内部步骤都应该有 span_id,并保留父子关系。这样才能把一次 Agent 运行还原成调用树。你上传材料中举过类似结构:root span 是 agent.process_query,下面包括意图分类、RAG 检索、工具调用、响应生成等子 span,并统计 token、cost、latency。
一个比较合理的 trace 结构是:
Trace: agent_run_xxx
├── 用户输入
├── 路由/意图识别
├── RAG 检索
│ ├── query
│ ├── top_k
│ ├── score
│ └── retrieved_docs
├── 工具调用
│ ├── tool_name
│ ├── tool_args
│ ├── tool_result
│ └── tool_latency
├── LLM 生成
│ ├── model
│ ├── prompt_tokens
│ ├── completion_tokens
│ ├── cost
│ └── latency
└── 最终输出
AgentTrace 论文也支持这种结构化记录方式,它提出所有日志应共享 envelope schema,包括 UUID、surface type、trace ID、span ID、UTC timestamp 和结构化事件主体。
3.2 按三类 surface 采集
AgentTrace 的三类 surface 很适合直接转化为工程设计。(arXiv)
| Surface | 中文解释 | 应记录内容 |
|---|---|---|
| Operational Surface | 运行层面 | 方法调用、参数摘要、返回值摘要、状态、耗时、异常 |
| Cognitive Surface | 认知层面 | 模型输入输出摘要、计划、反思、推理片段、置信度、token |
| Contextual Surface | 上下文层面 | HTTP API、数据库、缓存、向量库、文件系统、工具 I/O |
这里需要注意:不是所有 cognitive 内容都要完整记录。你上传的 Pockit 翻译中明确建议,生产环境中可以 100% 采集 token、latency、model 等 metadata,但完整 prompt/completion 应采样保存,例如 10% 到 20%;embedding 向量和原始 API 响应通常不建议全量落库。
3.3 自动插桩 + 手动业务 span
工程上建议两种方式结合:
第一,使用 OpenTelemetry 或类似 SDK 自动捕获 LLM 调用、HTTP 调用、数据库调用、Redis、向量库等外部 I/O。AgentTrace 和 Phoenix 相关材料都强调了 OpenTelemetry 在 LLM tracing 中的作用。
第二,对业务语义强的步骤手动加 span,例如:
agent.route_intent
agent.retrieve_knowledge
agent.rerank_docs
agent.select_tool
agent.execute_tool
agent.generate_answer
agent.run_safety_check
agent.generate_followup_questions
因为自动插桩只能知道“调用发生了”,但不一定知道“这一步在业务上代表什么”。AgentTrace 也指出,系统级追踪如果没有认知语义,就难以建立 Agent 推理与系统执行之间的因果联系。
4. 应该统计哪些指标
4.1 基础运行指标
这些指标相当于传统 APM 的延伸,必须全量统计。
| 指标 | 说明 | 用途 |
|---|---|---|
| 请求量 QPS / RPM | 每分钟或每秒请求数 | 判断流量压力 |
| 平均延迟 / P95 / P99 | 用户请求总耗时 | 判断体验和性能瓶颈 |
| LLM 调用次数 | 单次请求内调用模型几次 | 判断链路复杂度 |
| 工具调用次数 | 单次请求调用工具几次 | 判断是否存在循环或冗余 |
| 错误率 | 系统异常、工具异常、模型异常 | 基础稳定性监控 |
| 重试次数 | LLM、工具、检索的 retry | 判断外部依赖不稳定性 |
| fallback 次数 | 降级、兜底、备用模型触发次数 | 判断主链路可靠性 |
但这些指标只能说明系统是否稳定,不能说明 Agent 是否回答正确。你上传材料中明确指出,LLM 应用即使错误率为 0,也可能准确率很低,所以还必须引入质量评估。
4.2 LLM 成本指标
LLM 可观测性必须把成本作为一等指标。材料中也强调 token 成本是真实云账单,失控 Agent 循环可能快速烧钱。
| 指标 | 说明 | 建议粒度 |
|---|---|---|
| prompt tokens | 输入 token 数 | 每次 LLM 调用 |
| completion tokens | 输出 token 数 | 每次 LLM 调用 |
| total tokens | 总 token 数 | span / trace / user / org |
| 单请求成本 | 一次 Agent 运行消耗金额 | trace 级 |
| 单用户成本 | 某用户一段时间内消耗 | user 级 |
| 单组织成本 | 某租户或组织消耗 | org 级 |
| 模型成本分布 | 不同模型消耗占比 | model 级 |
| 成本异常请求 | 超过预算的 trace | 告警用 |
建议至少设置这些保护线:
单请求最大 token 数
单请求最大成本
单用户每小时成本
单组织每日成本
单次 Agent 最大 LLM 调用次数
单次 Agent 最大工具调用次数
你上传材料中的 deterministic guards 示例也包含 token 预算超限、工具调用循环、延迟预算和空响应检测。
4.3 RAG 检索指标
如果系统使用 RAG,检索链路也必须可观测。否则最终答案错了,很难判断是模型幻觉,还是召回内容本身就错。
| 指标 | 说明 | 用途 |
|---|---|---|
| query rewrite 结果 | 改写后的检索 query | 判断查询意图是否被改坏 |
| top_k | 召回数量 | 判断召回范围 |
| score 分布 | 文档相似度分数 | 判断召回质量 |
| 命中文档 ID | 被召回的文档或 chunk | 问题复盘 |
| 文档排序 order | 最终进入上下文的顺序 | 判断 rerank 效果 |
| context token 占比 | 检索内容占 prompt 的比例 | 判断上下文是否过长 |
| 空召回率 | 没有召回到有效内容的比例 | 判断知识库覆盖 |
| 低分召回率 | 分数低于阈值仍被使用 | 判断污染风险 |
Phoenix 相关材料也强调 LLM tracing 应记录请求在文档检索、embedding 生成、模型调用、响应生成等组件中的传播路径。
4.4 工具调用指标
Agent 的核心风险之一是工具调用错误。TRAJECT-Bench 的核心观点就是:很多评测只看 final answer,却忽略了工具选择、参数填写、调用顺序这些细粒度轨迹。(OpenReview)
| 指标 | 说明 | 用途 |
|---|---|---|
| tool selection accuracy | 工具是否选对 | 判断工具路由能力 |
| argument correctness | 参数是否正确 | 判断参数抽取和构造能力 |
| order satisfaction | 调用顺序是否正确 | 判断依赖链 |
| dependency satisfaction | 后续工具是否正确依赖前序结果 | 判断多步推理 |
| tool error rate | 工具执行失败率 | 判断外部依赖 |
| tool latency | 工具耗时 | 判断性能瓶颈 |
| redundant tool calls | 冗余工具调用次数 | 判断效率 |
| loop detection | 同一工具重复调用次数 | 防止死循环 |
TRAJECT-Bench 明确提出,除了 final accuracy,还应报告 trajectory-level diagnostics,包括 tool selection、argument correctness、dependency/order satisfaction。(arXiv)
4.5 输出质量指标
这是 AI 系统区别于普通后端系统的关键部分。Tracing 告诉你“发生了什么”,Evaluation 告诉你“发生得好不好”。你上传材料中也明确说,Evaluation 是很多团队会跳过但决定生产 AI 成败的一层。
| 指标 | 说明 | 可用方法 |
|---|---|---|
| factual accuracy | 事实准确性 | LLM-as-Judge / 人工标注 / gold answer |
| relevance | 是否回答用户问题 | LLM-as-Judge |
| completeness | 是否完整覆盖问题 | rubric 评分 |
| groundedness | 是否基于检索内容回答 | RAG groundedness eval |
| hallucination rate | 幻觉比例 | LLM judge + 规则 |
| refusal correctness | 拒答是否合理 | 安全评估 |
| format correctness | JSON、表格、字段是否符合要求 | deterministic rule |
| user satisfaction | 用户反馈、点赞、追问率 | 线上反馈 |
| task success rate | 任务是否完成 | 业务定义 |
建议不要一开始就做十几个维度。最小可行版本可以先做:
accuracy
relevance
groundedness
format correctness
task success
然后再逐步扩展。
4.6 轨迹质量指标
对于 Agent,最终答案正确不代表轨迹合理。它可能绕了很多弯、调用了多余工具、用了错误中间信息但碰巧答对。因此还要评估轨迹本身。
| 指标 | 说明 |
|---|---|
| 轨迹长度 | 一次任务用了多少步 |
| 冗余步骤比例 | 不必要步骤占比 |
| 中间决策正确率 | 路由、工具选择、检索选择是否合理 |
| 顺序合理性 | 是否先检索再生成、先查 ID 再查详情 |
| 依赖正确性 | 后一步是否正确使用前一步结果 |
| 轨迹稳定性 | 相同或相似输入下路径是否大幅波动 |
| 目标忠实度 | 每一步是否朝任务目标推进 |
| 行为合规性 | 是否触发不允许的工具或越权路径 |
AgentTrace 论文结论中也提到,结构化 trace 可以为新的 Agent 评估指标奠定基础,例如 reasoning stability、goal fidelity、cross-agent behavioral benchmarking。
5. 应该做到什么程度
5.1 MVP 阶段:先做到“能复盘”
如果系统刚开始建设,不建议一上来就追求完整平台。最小可行目标是:线上出错后,能通过 trace 复盘这次 Agent 到底做了什么。
MVP 至少应做到:
每次请求有 trace_id
每次 LLM 调用记录 model、tokens、latency
每次工具调用记录 tool_name、args、result、latency
每次 RAG 记录 query、top_k、score、doc_id
最终输出和异常可追踪
成本可按请求聚合
你上传材料中的“第 1 天基础插桩、第 1 周添加成本追踪、第 2 周添加确定性 Guards、第 4 周添加 LLM-as-Judge Evals”可以作为落地节奏参考。
5.2 生产可用阶段:做到“能告警”
生产阶段不能只靠事后查 trace,必须有主动告警。
建议全量运行确定性 guard:
token 超预算
工具调用次数超限
同一工具重复调用过多
总延迟超预算
空响应
格式错误
RAG 空召回
工具异常率升高
单用户成本异常
对 LLM-as-Judge 这类成本较高的评估,可以采样运行。你上传材料中建议对 10% traces 做 LLM-as-Judge,同时确定性 guards 对 100% traces 运行,这个策略比较合理。
5.3 成熟阶段:做到“能评估、能归因、能优化”
成熟的 AI Agent 可观测性不只是监控平台,而应该进入研发闭环:
线上 trace → 自动评分 → 低分样本入库 → 失败归因 → 修 prompt / 工具 / RAG / 编排 → 回归评估 → 发布
你上传材料中的 Survey 部分把领域拆成失败分类、失败归因、系统增强与优化、轨迹监控/调试/分析工具、数据集与基准;这说明可观测性最终应服务于评估、归因和优化,而不是停留在日志层。
6. 是否存在 Agent 评估方面的论文?
存在,而且你给出的材料里已经包含了几类。
6.1 TRAJECT-Bench:专门评估工具调用轨迹
TRAJECT-Bench 是非常贴近 Agent 工具调用评估的一篇。它认为现有工具使用评测过于关注最终答案,忽视了工具是否选对、参数是否填对、调用顺序是否正确。因此它提出 trajectory-aware benchmark,用细粒度指标评估 LLM 的 agentic tool use。(OpenReview)
它适合支撑这些内容:
工具选择评估
参数构造评估
工具调用顺序评估
工具依赖关系评估
并行工具调用与链式工具调用评估
如果你论文或文档中要论证“Agent 评估不能只看最终答案”,TRAJECT-Bench 是很合适的引用。(arXiv)
6.2 LangSmith Trajectory Evals / AgentEvals:工程评估方法
LangSmith 和 AgentEvals 更偏工程落地。它们支持两类轨迹评估方式:
trajectory match:把实际轨迹和参考轨迹比较
LLM-as-Judge:让模型根据 rubric 判断轨迹质量
LangSmith 文档明确说,可以用 LLM 评估 Agent 的 execution path;与 trajectory match 不同,LLM-as-Judge 不一定需要参考轨迹。(LangChain 文档)
AgentEvals 的 GitHub 说明也指出,agent trajectory match evaluators 用于判断 Agent 执行轨迹,可以对照 expected trajectory,也可以使用 LLM。(GitHub)
这类材料适合支撑工程实现部分,例如:
严格匹配 strict
无序匹配 unordered
子集匹配 subset
超集匹配 superset
LLM-as-Judge 轨迹评分
6.3 AgentTrace:可观测性也能支撑评估
AgentTrace 不是传统意义上的 benchmark 论文,但它和评估强相关。它提出结构化日志和三层 surface,使 Agent 的推理、执行和外部交互可以被机器读取、分析和复盘。论文还明确提到,这些结构化 trace 可以为 reasoning stability、goal fidelity、cross-agent behavioral benchmarking 等新指标提供基础。
因此它适合支撑:
为什么评估之前必须先采集结构化轨迹
为什么只保存最终输入输出不够
为什么需要 operational / cognitive / contextual 三层 trace
6.4 ETO / AgentTrek / T-PRA:不是单纯评估,而是用轨迹优化 Agent
ETO、AgentTrek、T-PRA 更偏“轨迹优化”,但它们也说明轨迹数据不只是日志,还能反向用于训练和优化。你上传材料中总结了 ETO 的流程:Agent 探索任务,收集失败轨迹,构造成功/失败轨迹对,用 DPO 等方法训练,再进入下一轮优化。
T-PRA 则把主动推荐建模为序列决策/路径规划问题,用 Actor、Advisor、Critic 结构和 DPO 优化长期目标。
这类论文适合支撑:
失败轨迹可以作为优化数据
成功/失败轨迹对可以用于偏好优化
Agent 评估结果可以进入训练闭环
长期任务不能只评估单轮输出
7. 推荐你最终文档中的指标体系
你可以把指标分成 6 组写进文档:
| 指标组 | 具体指标 | 作用 |
|---|---|---|
| 运行指标 | QPS、P95/P99、错误率、重试率、fallback 次数 | 看系统稳定性 |
| 成本指标 | tokens、单请求成本、用户成本、模型成本分布 | 控制 token 和账单 |
| LLM 指标 | model、temperature、prompt/completion tokens、latency | 分析模型行为 |
| RAG 指标 | query、top_k、score、doc_id、空召回率、低分召回率 | 分析知识召回 |
| 工具指标 | tool_name、args、result、tool latency、tool error、调用顺序 | 分析工具使用 |
| 质量指标 | accuracy、relevance、groundedness、task success、trajectory score | 判断回答和轨迹好坏 |
如果只选最关键的一组,我建议是:
trace_id / span_id
LLM tokens / latency / cost
工具名称 / 参数 / 返回值
RAG 召回文档 / score / order
最终答案质量评分
工具选择正确性
参数正确性
调用顺序正确性
任务成功率
失败归因标签
这组指标刚好对应你材料中的核心闭环:采集、评估、归因、优化。
8. 最终结论
AI Agent 可观测性应该做到三个层次:
第一,能看见:每次请求的 LLM 调用、RAG 检索、工具调用、异常、token、成本、延迟都能通过 trace 还原。
第二,能判断:不仅知道请求成功,还要知道答案是否正确、是否基于证据、工具是否选对、参数是否正确、调用顺序是否合理。
第三,能改进:把低质量 trace、失败轨迹、人工反馈、LLM-as-Judge 评分沉淀下来,用于 prompt 回归测试、Agent 轨迹评估、失败归因和后续优化。
一句话概括:
AI Agent 可观测性不是“多打日志”,而是把 Agent 的执行轨迹变成可追踪、可评分、可归因、可优化的数据资产。
下面是我检索后整理出的结论:有类似框架设计,但目前还没有一个“统一标准”能同时完整覆盖 Agent 评估、Prompt 质量评估、Tool 设计评估。更合理的做法是把现有权威材料组合成一个分层评估框架。
1. 先给权威参考文献谱系
一、Agent 整体能力与轨迹评估
| 参考 | 核心价值 | 适合引用在哪 |
|---|---|---|
| AgentBench: Evaluating LLMs as Agents | 提出多环境 Agent Benchmark,用 8 类交互环境评估 LLM-as-Agent 的推理、决策和多轮任务能力。适合说明 Agent 评估不应只看单轮 QA,而要放到交互环境中评估。(arXiv) | Agent 总体评估、交互任务评估 |
| WebArena | 构建真实、可复现的网页环境,评估 Agent 在电商、论坛、协作开发、内容管理等真实网页任务中的端到端任务完成能力。(arXiv) | Web Agent、真实环境任务评估 |
| GAIA | 面向通用 AI Assistant 的 benchmark,任务需要推理、多模态、网页浏览和工具使用能力。(arXiv) | 通用助手能力评估 |
| SWE-bench | 用真实 GitHub issue 和 PR 构造软件工程任务,评估模型是否能修改代码并通过测试。(arXiv) | 编程 Agent、工程任务评估 |
| TRAJECT-Bench | 明确提出 trajectory-aware evaluation,关注工具选择、参数正确性、调用顺序、依赖满足等轨迹级指标,而不是只看 final answer。(OpenReview) | Agent 轨迹评估、工具调用路径评估 |
| LangSmith Trajectory Evals / AgentEvals | 工程框架层面支持 trajectory match 与 LLM-as-Judge,用于评估 Agent 的消息序列、工具调用和执行路径。(LangChain 文档) | 工程落地、CI 回归评估 |
这一组文献说明:Agent 评估的基本单位应该是“任务轨迹”,不是单次回答。你前面材料中已经整理过类似闭环:轨迹采集 → 轨迹评估 → 失败归因 → 轨迹优化,其中 TRAJECT-Bench、LangSmith、AgentEvals 正好对应“轨迹评估”部分。
二、Prompt 质量评估
| 参考 | 核心价值 | 适合引用在哪 |
|---|---|---|
| PromptRobust / PromptBench | 用字符、词、句子、语义层面的扰动构造 adversarial prompts,评估 LLM 对 prompt 变化的鲁棒性。(arXiv) | Prompt 鲁棒性评估 |
| G-Eval | 使用 LLM + CoT + form-filling 范式对生成内容质量进行打分,是 LLM-as-Judge 评估的代表方法。(ACL Anthology) | Prompt 输出质量、回答质量评估 |
| MT-Bench / Chatbot Arena | 系统研究 LLM-as-Judge 的使用与局限,包括位置偏差、冗长偏差、自我增强偏差等。(arXiv) | 说明 LLM judge 不能盲信,需要校准 |
| Prometheus | 训练开源评估模型,支持按照自定义 rubric 做细粒度评分。(arXiv) | 自定义评分标准、细粒度评估 |
| DSPy | 把 prompt pipeline 抽象成可优化的程序结构,用 metric 驱动 prompt / pipeline 优化。(arXiv) | Prompt 优化框架设计 |
| OpenAI Evals | OpenAI 提供的 LLM / LLM 系统评估框架,可构建自定义 evals。(GitHub) | Prompt 回归测试、系统级 eval |
| Promptfoo | 工程工具层面支持 prompt、model、RAG 的自动化测试、红队测试和 CI/CD 集成。(promptfoo.dev) | Prompt 工程化测试 |
这一组文献说明:Prompt 质量评估不应该靠主观感觉,而应该靠测试集、扰动集、评分 rubric、LLM-as-Judge、人工抽检和回归测试共同完成。OpenAI 的 Prompt Engineering 文档也明确建议构建 evals 来衡量 prompt 行为,并在迭代 prompt 或更换模型版本时监控性能。(OpenAI开发者)
三、Tool / API 调用与工具设计评估
| 参考 | 核心价值 | 适合引用在哪 |
|---|---|---|
| API-Bank | 面向 tool-augmented LLM 的 benchmark,包含可运行 API 工具、工具调用对话和 API 调用标注,用于评估 planning、API retrieval、API calling。(ACL Anthology) | API 工具调用能力评估 |
| ToolLLM / ToolBench | 构建大规模工具使用数据与评估框架,关注 LLM 如何掌握大量真实 API 工具。(arXiv) | 多工具选择、多工具组合 |
| Gorilla / BFCL | BFCL 专门评估 function calling 能力,包括串行、并行、多语言函数调用,并使用 AST 方式评估调用正确性。(OpenReview) | 函数调用、参数生成、schema 遵循 |
| ToolAlpaca | 构造多样化工具使用语料,评估模型对未见过工具的泛化使用能力。(arXiv) | 新工具泛化能力 |
| ToolEmu | 用 LLM 模拟工具执行环境,并配合安全评估器发现工具型 Agent 的风险。(OpenReview) | 高风险工具、安全评估 |
| OpenAI Function Calling / Structured Outputs | 官方文档说明 function/tool calling 的基本机制,以及 Structured Outputs 能让模型输出匹配给定 schema。(OpenAI开发者) | 工具 schema 设计、结构化输出约束 |
这一组文献说明:Tool 设计评估至少要拆成两层:工具本身设计得好不好,以及 模型是否能正确选择和调用工具。BFCL、API-Bank、ToolBench 更关注后者;OpenAI Function Calling / Structured Outputs 更适合支撑工具 schema 设计的工程规范。(OpenReview)
2. 可以整理成一个统一框架
我建议你把它命名为:
Agent 应用评估框架:Prompt–Tool–Trajectory–Outcome 四层评估模型
这个框架比单纯说“可观测性”更完整,因为它不仅统计运行数据,还能评价 Prompt、工具、轨迹和最终结果。
第 1 层:Prompt 质量评估
Prompt 质量不是看“写得好不好”,而是看它在任务集上的表现是否稳定、可控、可解释、可回归。
| 评估维度 | 评估问题 | 可参考文献 / 框架 |
|---|---|---|
| 指令遵循 | 模型是否严格按系统提示、角色要求、输出格式执行 | OpenAI Evals、Promptfoo、G-Eval |
| 输出质量 | 回答是否准确、完整、相关、有依据 | G-Eval、Prometheus |
| 鲁棒性 | 用户输入有错别字、歧义、改写时,Prompt 是否还能稳定工作 | PromptRobust / PromptBench |
| 安全性 | Prompt 是否容易被越狱、诱导、绕过约束 | Promptfoo red teaming |
| 可维护性 | Prompt 是否模块化、可版本化、可测试 | DSPy、OpenAI Evals |
| 成本效率 | Prompt 是否过长、是否引入不必要 token | OpenAI Evals、Promptfoo |
这一层的核心指标可以写成:
Prompt Pass Rate
Instruction Following Score
Format Correctness
Robustness Score
Safety Violation Rate
Average Tokens per Prompt
Regression Failure Rate
其中,PromptRobust / PromptBench 可以支撑“鲁棒性测试”,G-Eval 和 Prometheus 可以支撑“LLM-as-Judge 评分”,DSPy 可以支撑“用 metric 驱动 prompt 优化”。(arXiv)
第 2 层:Tool 设计评估
Tool 设计评估不是只看“模型能不能调用工具”,还要看工具本身是否适合被 LLM 调用。很多 Agent 失败并不是模型弱,而是工具 schema 设计太模糊、参数太复杂、工具粒度不合理。
| 评估维度 | 评估问题 | 参考依据 |
|---|---|---|
| 工具命名清晰度 | 工具名是否能让模型准确判断用途 | BFCL、API-Bank |
| 工具描述充分性 | description 是否说明使用场景、边界和限制 | ToolBench、OpenAI Function Calling |
| 参数 schema 合理性 | 参数类型、必填项、枚举、约束是否清晰 | BFCL、Structured Outputs |
| 工具粒度 | 一个工具是否只做一类清晰动作,是否过大或过碎 | API-Bank、ToolBench |
| 返回结构 | 返回值是否结构化,是否方便模型继续推理 | OpenAI Structured Outputs |
| 错误反馈 | 参数错、权限错、无结果时是否返回可理解错误 | ToolEmu、AgentEvals |
| 安全边界 | 写操作、删除操作、支付类操作是否需要确认和权限 | ToolEmu |
这一层的核心指标可以写成:
Tool Selection Accuracy
Argument Correctness
Schema Adherence Rate
Tool Ambiguity Rate
Tool Redundancy Rate
Tool Error Recoverability
Unsafe Tool Call Rate
Tool Description Coverage
BFCL 很适合支撑“参数与函数调用正确性”;API-Bank 很适合支撑“planning、API retrieval、API calling”;ToolEmu 很适合支撑“工具使用风险与安全失败”;OpenAI Function Calling 和 Structured Outputs 适合支撑“工具 schema 和结构化输出设计”。(OpenReview)
第 3 层:Agent 轨迹评估
这是你前面可观测性文档里最重要的一层。Agent 不是一次输出,而是一条执行轨迹。轨迹评估要回答:它是否按正确顺序完成了正确步骤。
| 评估维度 | 评估问题 | 参考依据 |
|---|---|---|
| 工具选择 | 是否调用了正确工具 | TRAJECT-Bench、AgentEvals |
| 参数构造 | 工具参数是否正确 | BFCL、TRAJECT-Bench |
| 顺序依赖 | 是否先查 A 再查 B,是否满足依赖关系 | TRAJECT-Bench |
| 冗余步骤 | 是否调用了不必要工具或重复推理 | LangSmith / AgentEvals |
| 轨迹效率 | 是否用较少步骤完成任务 | WebArena、AgentBench |
| 中间决策合理性 | route、retrieve、tool call、final answer 是否一致 | AgentTrace、AgentEvals |
| 失败归因 | 错误发生在 prompt、retrieval、tool、LLM 还是 orchestration | AgentTrace、TRAJECT-Bench |
这一层核心指标可以写成:
Trajectory Match Score
Tool Order Accuracy
Dependency Satisfaction Rate
Redundant Step Rate
Step-level Success Rate
Trajectory Efficiency
Failure Attribution Label
LangSmith / AgentEvals 已经把工程方法拆成 trajectory match 与 LLM-as-Judge:前者适合有明确参考轨迹的场景,后者适合判断工具调用是否合理、路径是否高效、是否有不必要步骤。(LangChain 文档)
第 4 层:最终结果与业务效果评估
最终结果仍然要评估,但它应该放在最后,而不是唯一指标。
| 评估维度 | 评估问题 | 参考依据 |
|---|---|---|
| 任务成功率 | 用户目标是否完成 | AgentBench、WebArena、GAIA |
| 答案准确性 | 最终回答是否事实正确 | G-Eval、Prometheus |
| 有依据性 | 回答是否基于检索或工具结果 | RAGAS、G-Eval |
| 用户体验 | 是否简洁、清晰、符合场景 | LLM-as-Judge、人工评估 |
| 成本与延迟 | 完成任务是否代价过高 | LangSmith、Promptfoo、OpenAI Evals |
| 回归稳定性 | prompt、模型、工具变更后是否退化 | OpenAI Evals、Promptfoo |
RAG 类系统可以额外引入 RAGAS。RAGAS 提出 reference-free RAG evaluation,用于评估 retrieval 和 generation 两部分,适合评估“答案是否基于知识库、上下文是否有用、回答是否忠实”。(arXiv)
3. 最终建议:你可以这样写成论文/文档框架
可以直接写成下面这套结构:
1. 评估对象层
- Prompt
- Tool Schema
- Agent Trajectory
- Final Output
- Business Outcome
2. 评估方法层
- Deterministic Check
- Reference Match
- LLM-as-Judge
- Human Review
- Online Feedback
- Regression Test
3. 评估指标层
- Prompt 指标
- Tool 指标
- Trajectory 指标
- Output 指标
- Cost / Latency 指标
4. 闭环优化层
- 采集 trace
- 自动评分
- 失败归因
- Prompt / Tool / RAG / Agent 编排修正
- 回归测试
- 发布新版本
这个框架的理论依据可以这样对应:
| 框架部分 | 主要依据 |
|---|---|
| Agent 任务评估 | AgentBench、WebArena、GAIA、SWE-bench |
| Agent 轨迹评估 | TRAJECT-Bench、LangSmith、AgentEvals |
| Prompt 质量评估 | PromptRobust、G-Eval、Prometheus、OpenAI Evals、Promptfoo、DSPy |
| Tool 调用评估 | API-Bank、ToolBench、BFCL、ToolAlpaca |
| Tool 风险评估 | ToolEmu |
| RAG 评估 | RAGAS |
| 工程化测试 | OpenAI Evals、Promptfoo、LangSmith |
4. 我对“是否有现成统一框架”的判断
目前没有一个学术或工业框架能够完全覆盖:
Prompt 质量
Tool 设计质量
Tool 调用正确性
Agent 轨迹合理性
最终答案质量
业务成功率
安全风险
成本延迟
更准确地说,现在是多套框架分别覆盖不同层面:
- Prompt 层:PromptRobust、G-Eval、Prometheus、DSPy、OpenAI Evals、Promptfoo。
- Tool 层:API-Bank、ToolBench、BFCL、ToolAlpaca、ToolEmu。
- Agent 轨迹层:TRAJECT-Bench、LangSmith、AgentEvals。
- 任务环境层:AgentBench、WebArena、GAIA、SWE-bench。
- RAG 层:RAGAS。
所以你的文档里最好不要说“已有一个完整统一标准”,而应写成:
现有研究已经分别在 Agent 任务评估、轨迹评估、Prompt 鲁棒性评估、工具调用评估和 RAG 评估等方向形成了较成熟的 benchmark 与工程框架。本文可在这些工作的基础上,构建面向 Agent 应用开发的分层评估框架,将 Prompt、Tool、Trajectory、Final Output 与业务效果纳入同一评估闭环。
这句话最稳,也最适合放到论文或系统设计文档里。