跳转至

第 15 章 质量评估体系

本章学习目标 - 深入理解 Agent 评估方法论(端到端 vs 分层/轨迹评估 vs 结果评估) - 掌握 TTD 的运行时评估(三级评估器)与治理评估(CI 校验 + 资产质量) - 理解 LLM-as-a-Judge 四维评估方法与 DeepEval/Ragas 集成 - 理解反馈闭环如何驱动系统改进 - 认清当前评估体系的工程权衡与改进方向

前置知识第 4 章 Agent 编排第 9 章 Semantic Plane 关联代码backend/app/agents/sub_agents/evaluators/scripts/(CI 校验)


15.1 背景与动机

15.1.1 为什么 Agent 系统需要评估

Agent 系统的输出是非确定性的——同一个问题可能得到不同的 SQL、不同的图表、不同的洞察。没有评估就无法回答"系统到底好不好"、"这次改动是改进还是退步"。评估是 Agent 系统可迭代的基础——没有评估的优化是盲目的。

15.1.2 评估的两个维度

TTD 的评估分两个维度:

维度 时机 对象 方法
运行时评估 在线查询时 单次查询的检索/SQL/答案质量 三级评估器
治理评估 离线 CI/审批时 语义资产质量、系统回归 CI 校验 + LLM-as-a-Judge + 基准

AI Agent 理论关联:Agent 评估方法论

Agent 评估有三种主流方法,理解它们的差异是设计评估体系的基础:

端到端评估(End-to-End Evaluation) - 方法:只看最终结果对不对(如生成的 SQL 执行结果是否匹配期望)。 - 优势:简单直接,贴近用户体验。 - 劣势:无法定位问题环节——结果错了不知道是检索、规划还是生成的错。 - 适用:快速评估整体效果,如 Spider/BIRD 基准的 execution accuracy。

分层评估(Hierarchical / Trajectory Evaluation) - 方法:评估 Agent 执行轨迹的每一步——检索准不准、规划对不对、生成好不好。 - 优势:能精确定位问题环节,指导针对性改进。 - 劣势:成本高(每步都要评估)、需定义每步的评估标准。 - 代表:AgentBenchTrajectory Evaluation

结果评估(Outcome Evaluation) - 方法:用 LLM 或人工判断最终答案质量(不只对错,还有完整性、准确性、安全性)。 - 优势:灵活,能评估开放式任务。 - 劣势:LLM-as-a-Judge 本身有偏差、成本高、非确定。 - 代表:LLM-as-a-JudgeDeepEvalRagas

TTD 的三级评估器(retrieval/sql/answer)是分层评估的工程实现——分别评估检索、SQL、答案三个环节。LLM-as-a-Judge结果评估。两者互补:分层评估定位问题,结果评估判断整体质量。

诚实声明:评估基础设施已就绪但尚未产出系统化评估报告

TTD 的评估基础设施(三级评估器、EvaluationDataset/Task ORM、Admin API、DeepEval/Ragas 集成、反馈闭环)均已实现,但尚未产出系统化的评估报告。本章出现的所有指标阈值与目标值均为设计目标或经验设定,未经真实评估数据校准。我们选择诚实标注而非编造评估分数——这与项目"工程诚实性"的价值观一致。

当前评估覆盖的局限:

  • 三级评估器仅在 deep_analysis_workflow 路由启用,主路径(nl2sql_query)无运行时评估(因延迟敏感,见 15.2.1)。
  • 离线基准仅在 H&M 单一数据集上验证(详见 附录 E),无跨 schema 回归基准。
  • LLM-as-a-Judge 的评估者间信度(inter-rater reliability)尚未度量。

系统化评估的改进路线见 第 16 章("评估归一化"与"公开基准回归")。


15.2 设计原理

15.2.1 三级评估器(运行时分层评估)

评估器 评估对象 评估内容 触发条件
Retrieval Evaluator 检索结果 召回的覆盖度、相关性 deep_analysis_workflow 路由
SQL Evaluator 生成 SQL 正确性、性能、安全性 同上
Answer Evaluator 最终回答 完整性、准确性 同上

评估器设计

评估器为纯规则引擎def 而非 async def),无 LLM/IO 调用,确保低延迟。仅在 deep_analysis_workflow 路由启用。低分可触发重试(Reflexion 范式)。

为什么只在 deep_analysis 启用?因为三级评估器有延迟成本,主路径(nl2sql_query)对延迟敏感。deep_analysis 是"质量优先于速度"的路由,适合做完整评估。

15.2.2 治理评估

评估对象 方法 详见
语义资产 YAML pre-commit hooks + CI 4 脚本 第 13 章
资产质量字段 quality_score + 认证生命周期 第 9 章
系统回归 LLM-as-a-Judge + 离线基准 本章
RAG 质量 DeepEval + Ragas 本章

15.2.3 反馈闭环

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e8f0fe','primaryTextColor':'#202124','primaryBorderColor':'#1a73e8','lineColor':'#5f6368','secondaryColor':'#e0f2f1','tertiaryColor':'#f8f9fa'}}}%%
flowchart LR
    USER["用户反馈<br/>like · dislike · 纠正答案"] --> ADMIN["Admin 审核反馈"]
    ADMIN --> ACTION1["记忆纠正<br/>Correction Memory"]
    ADMIN --> ACTION2["资产修订<br/>YAML 更新"]
    ADMIN --> ACTION3["Few-Shot 审批<br/>Dynamic Cache"]
    ACTION1 & ACTION2 & ACTION3 --> SYSTEM["系统改进<br/>Memory · Semantic Layer<br/>Few-Shot Pool"]
    SYSTEM --> METRICS["评估指标变化<br/>SQL 正确率 ↑<br/>幻觉率 ↓"]
    METRICS -.-> USER

    classDef bpUser     fill:#f8f9fa,stroke:#5f6368,stroke-width:2px,color:#202124
    classDef bpProcess  fill:#e8f0fe,stroke:#1a73e8,stroke-width:2px,color:#202124
    classDef bpData     fill:#e0f2f1,stroke:#0d7377,stroke-width:2px,color:#202124
    classDef bpSuccess  fill:#e6f4ea,stroke:#1e8e3e,stroke-width:2px,color:#202124
    classDef bpInfo     fill:#f3e8fd,stroke:#9334e6,stroke-width:2px,color:#202124

    class USER bpUser
    class ADMIN bpProcess
    class ACTION1,ACTION2,ACTION3 bpInfo
    class SYSTEM bpData
    class METRICS bpSuccess

用户反馈是系统改进的重要信号源——负反馈经 Admin 审核后转化为 correction memory(第 7 章)或资产修订(第 9 章)或 few-shot 审批(第 7 章)。


15.3 实现详解

15.3.1 LLM-as-a-Judge 四维评估

维度 指标 目标 评估方法
Retrieval 召回率、相关性分数 覆盖关键资产 规则评估器(运行时)+ LLM 判断(离线)
SQL 正确性、性能、安全性 语法对、成本低、安全 规则评估器(运行时)+ Ragas faithfulness
Answer 完整性、准确性 回答了用户问题 LLM-as-a-Judge(离线)
Safety 越权、PII 泄露、注入 零安全事件 规则 + LLM 双重检查

15.3.2 DeepEval + Ragas 集成

工具 用途 关键指标
DeepEval LLM 评估框架,支持自定义指标与 pytest 集成 answer_relevancy、faithfulness
Ragas RAG 专项评估 context_precision、context_recall、faithfulness、answer_relevancy

Ragas 的核心指标:

  • faithfulness:生成的答案是否忠于检索到的上下文(不幻觉)
  • answer_relevancy:答案是否切题
  • context_precision:检索的上下文是否相关
  • context_recall:是否检索到了回答问题所需的全部上下文

15.3.3 评估任务系统

组件 说明
EvaluationDataset 评估数据集(问题 + 期望结果)
EvaluationTask 评估任务
EvaluationTaskItem 评估任务项(单条评测)

通过 Admin API(/admin/evaluations/*)管理评估任务,支持回放(/admin/evaluation_replay/*)——对历史 turn 重新评估,量化系统改进效果。

评估数据集示例

以 H&M 数据集为例,一个 EvaluationDataset 条目的结构(问题 + 期望结果 + 路由 + schema 上下文):

{
  "dataset_id": "eval_hm_baseline_v1",
  "name": "H&M 基线评估集 v1",
  "domain": "hm_fashion",
  "items": [
    {
      "question": "上月销量 Top 10 商品",
      "expected": {
        "route": "nl2sql_query",
        "intent": "ranking",
        "expected_tables": ["gold_hm.fact_transaction", "gold_hm.dim_article"],
        "expected_sql_pattern": "COUNT.*GROUP BY.*ORDER BY.*DESC.*LIMIT 10",
        "expected_metric": "transaction_count"
      }
    },
    {
      "question": "线上和线下的交易量分别是多少?",
      "expected": {
        "route": "nl2sql_query",
        "intent": "comparison",
        "expected_tables": ["gold_hm.fact_transaction"],
        "expected_sql_pattern": "GROUP BY sales_channel_id",
        "term_bindings": ["sales_channel_id"]
      }
    },
    {
      "question": "客户分群分析",
      "expected": {
        "route": "analytical_workflow",
        "intent": "clustering",
        "expected_tool": "clustering_tool"
      }
    }
  ]
}

每个 EvaluationTaskItemexpected 字段定义了该问题的期望路由、意图、涉及表、SQL 模式(正则)与术语绑定——评估器据此判断检索覆盖度、SQL 正确性与路由准确性。

15.3.4 评估分数解读指南

各维度指标的"好/需关注/需修复"阈值区间:

指标 好(≥) 需关注 需修复(<) 说明
faithfulness 0.85 0.70-0.85 0.70 答案忠于检索上下文的程度(不幻觉)
answer_relevancy 0.80 0.65-0.80 0.65 答案切题程度
context_precision 0.80 0.60-0.80 0.60 检索上下文的相关比例
context_recall 0.85 0.70-0.85 0.70 是否检索到全部所需上下文
SQL 执行准确率 0.90 0.75-0.90 0.75 SQL 执行结果匹配期望的比例
路由准确率 0.95 0.85-0.95 0.85 路由决策匹配期望路由的比例

阈值均为经验设定

上述阈值区间为经验初始值,尚未用真实评估数据校准。"好/需关注/需修复"的边界应基于实际业务场景与用户期望调整。改进方向:积累足够评估样本后,用统计方法(如分位数)校准阈值(第 16 章)。

15.3.5 评估成本分析

LLM-as-a-Judge 评估的成本考量:

评估方式 单次成本(估算) 延迟 适用场景
规则评估器(三级) ~0 token < 50ms 运行时常态化(deep_analysis 路由)
LLM-as-a-Judge(单维度) ~1-2K token 1-3s 离线评估,每条样本每维度一次 LLM 调用
LLM-as-a-Judge(四维度) ~4-8K token 4-12s 离线完整评估
Ragas 四指标 ~6-10K token 5-15s RAG 专项离线评估

规模化策略:对一个含 100 条样本的评估数据集,完整四维度 LLM-as-a-Judge 评估约消耗 400-800K token。建议:① 日常 CI 只跑规则评估器 + 抽样 LLM 评估(如 10%);② 版本发布前跑完整 LLM 评估;③ 评估者间信度通过同一样本多次评估的方差度量。

成本为设计估算

上述 token 消耗为基于典型 prompt 长度的估算,未经实际测量。实际成本取决于评估 prompt 设计、上下文长度与模型定价。改进方向:接入 Langfuse 追踪实际评估 token 消耗,校准成本模型。

15.3.6 资产认证生命周期

draft → reviewed → certified → deprecated

资产 quality_score + lifecycle_status 字段驱动认证流程,高质资产进入 certified 状态优先检索。这是"用质量信号驱动检索优先级"的设计。

15.3.7 小规模 Pilot 评估数据

虽然系统化评估报告尚未产出,本节提供一份小规模手工 pilot——20 条 H&M 典型查询的人工评估结果,作为基线参考。

Pilot 数据的局限

以下为 20 条查询的手工评估,样本量极小,不可外推为系统整体准确率。其价值在于:(1) 提供一个可比较的基线起点;(2) 暴露典型失败模式;(3) 为系统化评估提供数据点校准。完整系统化评估见改进路线(第 16 章 16.8.1)。

Pilot 数据集

20 条查询覆盖 5 种路由,每条 4 条:

路由 查询数 难度分布
nl2sql_query 8 简单 4 / 中等 3 / 困难 1
deep_analysis_workflow 4 中等 2 / 困难 2
analytical_workflow 4 中等 2 / 困难 2
kpi_lookup 2 简单 2
graph_reasoning 2 简单 1 / 中等 1

Pilot 评估结果

指标 结果(20 条) 说明
路由准确率 19/20 = 95% 1 条 deep_analysis 被误路由为 nl2sql_query
SQL 语法正确率 19/20 = 95% 1 条含 CTE 语法错误(PG 方言不兼容)
SQL 执行成功率 18/20 = 90% 1 条语法错误 + 1 条超时(EXPLAIN 未拦截大扫描)
结果正确率(人工判定) 16/20 = 80% 2 条结果部分正确(聚合粒度偏差)+ 2 条执行失败
修复循环触发率 3/20 = 15% 3 条触发 corrective_retrieval,其中 2 条修复成功
平均端到端延迟 nl2sql ~3.5s / deep ~8.2s 设计目标范围内

典型失败案例

# 查询 失败类型 根因 改进方向
1 "各品类的退货率趋势" 路由错误 误判为 nl2sql(应为 deep_analysis) 路由规则补充趋势+归因组合意图
2 "对比线上线下客户的客单价" SQL 方言 CTE 语法在 pg_mooncake 不兼容 方言适配增强(16.4.1)
3 "过去三年每月销量" 执行超时 全表扫描未走列存 EXPLAIN 阈值调优 + 列存索引

15.3.8 评估数据集设计指南

如何构建一个高质量的 NL2SQL 评估集?以下是 TTD 的设计规范。

问题多样性维度

评估集应覆盖以下维度,避免单一模式过拟合:

维度 取值 示例
路由类型 7 种路由各覆盖 nl2sql / deep_analysis / analytical / kpi / graph / clarification / off_topic
意图 ranking / trend / comparison / forecasting / anomaly / exploration
难度 简单(单表)/ 中等(2 表 join)/ 困难(多表 + 子查询 + 窗口函数)
术语覆盖 含明确术语 / 含口语化表达 / 含未登记术语 "GMV" / "卖得最好的" / "客单价"(未登记)
时间范围 绝对时间 / 相对时间 / 无时间约束 "2020-08" / "上月" / "总量"
聚合复杂度 COUNT/SUM / GROUP BY / 窗口函数 / CTE
边缘情况 空结果 / 歧义 / 越权 / 超时 "查 CEO 的工资"(越权)

期望结果标注规范

每条评估样本的 expected 字段应包含:

question: "上月销量 Top 10 商品"
expected:
  route: nl2sql_query
  intent: ranking
  difficulty: easy
  expected_tables:
    - gold_hm.fact_transaction
    - gold_hm.dim_article
  term_bindings:
    销量: met_hm_transaction_count
    商品: dim_article
  expected_sql_pattern: "COUNT.*GROUP BY.*ORDER BY.*DESC.*LIMIT 10"
  expected_columns: [prod_name, sales_count]
  expected_row_count: 10
  notes: "术语'销量'应绑定 transaction_count,非 SUM(price)"

难度分级标准

难度 标准 占比建议
简单 单表 + 基础聚合(COUNT/SUM) 30%
中等 2 表 join + GROUP BY + 时间过滤 40%
困难 多表 + 窗口函数/CTE + 复杂术语 + 修复循环 20%
边缘 歧义/越权/空结果/超时 10%

评估集维护

评估集应纳入 Git 版本控制(与语义资产同级),每次系统改进后回归。新增失败案例应补充进评估集,形成"失败 → 修复 → 回归"的闭环。目标评估集规模:100+ 条(当前 pilot 20 条)。


15.4 方案选型对比

15.4.1 评估框架对比

框架 类型 优势 TTD 用法
DeepEval LLM 评估 自定义指标、pytest 集成
Ragas RAG 评估 faithfulness/relevancy 指标
AgentBench Agent 基准 多任务端到端 (可引入做回归)
LangSmith LangChain 评估 轨迹追踪 + 评估 (用 Langfuse 替代追踪)

15.4.2 评估策略对比

策略 优势 劣势 TTD 状态
纯规则评估 快、确定性 覆盖面窄 三级评估器
LLM-as-a-Judge 灵活、覆盖广 慢、贵、非确定 治理评估
人工评估 最准 慢、不可扩展 反馈审核
基准回归 可追踪 需维护基准 仅 H&M(附录 E

当前实现可改进之处

  1. 评估器纯规则,覆盖面窄:三级评估器是确定性规则,无法评估语义正确性(如"SQL 语法对但答非所问")。改进:引入 LLM-as-a-Judge 作为运行时评估的补充(在 deep_analysis 路由),或用轻量模型做实时语义校验。
  2. 缺离线基准数据集:只在 H&M 单一数据集上验证(附录 E),无跨 schema 的回归基准。无法回答"改了 Reranker 后整体准确率变了吗"。改进:引入 Spider/BIRD 公开基准 + 自建业务基准,CI 中跑回归。
  3. 反馈未真正驱动优化:用户反馈经 Admin 审核后写入 correction memory 或修订资产,但无自动化机制把高频反馈转化为系统改进(如"某类查询频繁失败"应触发路由/资产调整)。改进:建立反馈分析看板,聚类高频问题,自动生成改进建议。
  4. 评估未常态化:三级评估器只在 deep_analysis 路由启用,主路径(nl2sql_query)无评估。改进:轻量评估常态化(如只跑 SQL 评估器),低分触发 Self-RAG 式自纠错。

改进方向

评估的演进方向是常态化 + 自动化驱动改进。短期:引入公开基准做回归、反馈聚类驱动优化。长期:评估器从纯规则升级为"规则 + 轻量 LLM"混合,在主路径常态化运行低成本的 SQL/结果校验,低分自动触发自纠错(Self-RAG/Corrective-RAG),形成"评估→纠错→改进"的自动闭环。


15.5 小结与延伸阅读

本章要点

  1. 评估两维度:运行时(三级评估器,分层评估)+ 治理(CI 校验 + LLM-as-a-Judge,结果评估)。
  2. 三级评估器是分层评估的工程实现,定位问题环节;LLM-as-a-Judge 是结果评估,判断整体质量。
  3. LLM-as-a-Judge 四维:Retrieval / SQL / Answer / Safety。
  4. DeepEval + Ragas 做 RAG 专项评估(faithfulness/relevancy),评估任务系统支持回放。
  5. 反馈闭环:用户反馈 → Admin 审核 → 闭环动作(记忆/资产/few-shot)。

延伸阅读

下一章第 16 章 演进路线与改进方向——全书收尾,系统性梳理所有可改进点与演进路线,是动手贡献的入口。