Eval集治理与Golden-Set生命周期

Eval 集治理与 Golden Set 生命周期

🏠 返回 07-README | ⬅️ 06-Harness 全栈 | ➡️ 11-AI制品Registry与发布门禁

定位 :Agent 架构师 「怎么保证发布不回归」 的组织答案------不只讲 faithfulness 公式,而是 Golden Set 从哪来、谁改、如何 pin、如何回流 。机制指标见 02-评估;CI 门禁见 06-Harness;四维版本见 11-Registry

不重复 :LLM-Judge 校准、RAGAS 公式 → 02 §4--§8。


L1 · 是什么

1.1 一句话定义

Eval 集治理 = 把 Golden Set / Trajectory Set 当作 受版本控制的软件制品 :有 owner、有变更流程、有发布门禁、有线上回流闭环------让「能上线」变成 可审计的统计结论,而不是某次手工试聊感觉还行。

1.2 三类评测集(不要混用)

类型 内容 更新频率 用途
Golden Set(回归) 输入 + 期望行为(引用片段 / 工具名 / 拒答) 周--月,PR 审批 发布 Gate,阻断劣化
Shadow / 探针集 线上采样脱敏对话 离线--在线 gap 监测
Red Team / 对抗集 注入、越权、诱导承诺 sprint 安全门禁,可与 Golden 分库

#mermaid-svg-Z25oEwdaisH6PbTR{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Z25oEwdaisH6PbTR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Z25oEwdaisH6PbTR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Z25oEwdaisH6PbTR .error-icon{fill:#552222;}#mermaid-svg-Z25oEwdaisH6PbTR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Z25oEwdaisH6PbTR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Z25oEwdaisH6PbTR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Z25oEwdaisH6PbTR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Z25oEwdaisH6PbTR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Z25oEwdaisH6PbTR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Z25oEwdaisH6PbTR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Z25oEwdaisH6PbTR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Z25oEwdaisH6PbTR .marker.cross{stroke:#333333;}#mermaid-svg-Z25oEwdaisH6PbTR svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Z25oEwdaisH6PbTR p{margin:0;}#mermaid-svg-Z25oEwdaisH6PbTR .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Z25oEwdaisH6PbTR .cluster-label text{fill:#333;}#mermaid-svg-Z25oEwdaisH6PbTR .cluster-label span{color:#333;}#mermaid-svg-Z25oEwdaisH6PbTR .cluster-label span p{background-color:transparent;}#mermaid-svg-Z25oEwdaisH6PbTR .label text,#mermaid-svg-Z25oEwdaisH6PbTR span{fill:#333;color:#333;}#mermaid-svg-Z25oEwdaisH6PbTR .node rect,#mermaid-svg-Z25oEwdaisH6PbTR .node circle,#mermaid-svg-Z25oEwdaisH6PbTR .node ellipse,#mermaid-svg-Z25oEwdaisH6PbTR .node polygon,#mermaid-svg-Z25oEwdaisH6PbTR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Z25oEwdaisH6PbTR .rough-node .label text,#mermaid-svg-Z25oEwdaisH6PbTR .node .label text,#mermaid-svg-Z25oEwdaisH6PbTR .image-shape .label,#mermaid-svg-Z25oEwdaisH6PbTR .icon-shape .label{text-anchor:middle;}#mermaid-svg-Z25oEwdaisH6PbTR .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Z25oEwdaisH6PbTR .rough-node .label,#mermaid-svg-Z25oEwdaisH6PbTR .node .label,#mermaid-svg-Z25oEwdaisH6PbTR .image-shape .label,#mermaid-svg-Z25oEwdaisH6PbTR .icon-shape .label{text-align:center;}#mermaid-svg-Z25oEwdaisH6PbTR .node.clickable{cursor:pointer;}#mermaid-svg-Z25oEwdaisH6PbTR .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Z25oEwdaisH6PbTR .arrowheadPath{fill:#333333;}#mermaid-svg-Z25oEwdaisH6PbTR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Z25oEwdaisH6PbTR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Z25oEwdaisH6PbTR .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Z25oEwdaisH6PbTR .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Z25oEwdaisH6PbTR .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Z25oEwdaisH6PbTR .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Z25oEwdaisH6PbTR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Z25oEwdaisH6PbTR .cluster text{fill:#333;}#mermaid-svg-Z25oEwdaisH6PbTR .cluster span{color:#333;}#mermaid-svg-Z25oEwdaisH6PbTR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Z25oEwdaisH6PbTR .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Z25oEwdaisH6PbTR rect.text{fill:none;stroke-width:0;}#mermaid-svg-Z25oEwdaisH6PbTR .icon-shape,#mermaid-svg-Z25oEwdaisH6PbTR .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Z25oEwdaisH6PbTR .icon-shape p,#mermaid-svg-Z25oEwdaisH6PbTR .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Z25oEwdaisH6PbTR .icon-shape .label rect,#mermaid-svg-Z25oEwdaisH6PbTR .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Z25oEwdaisH6PbTR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Z25oEwdaisH6PbTR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Z25oEwdaisH6PbTR :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 在线
离线
人审确认
pass
fail
Golden Set vN
Harness CI
生产流量采样
Badcase 队列
发布
修复 prompt/tool/KB

1.3 与 AgentOps 的关系

AgentOps 支柱 本篇交付物
Eval 数据集版本 eval_set_id@sha
Trace badcase 必须带 trace_id 回放
Alert 在线 faithfulness 跌 → 触发「是否回流 Golden」
Cost 每次 eval run 记账 $ / eval_run

详见 08-可观测 三合一 join。


L2 · 生命周期(七阶段)

2.1 总览

#mermaid-svg-pXDerw0iWjwkRebF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-pXDerw0iWjwkRebF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-pXDerw0iWjwkRebF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-pXDerw0iWjwkRebF .error-icon{fill:#552222;}#mermaid-svg-pXDerw0iWjwkRebF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pXDerw0iWjwkRebF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-pXDerw0iWjwkRebF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pXDerw0iWjwkRebF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pXDerw0iWjwkRebF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-pXDerw0iWjwkRebF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pXDerw0iWjwkRebF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pXDerw0iWjwkRebF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pXDerw0iWjwkRebF .marker.cross{stroke:#333333;}#mermaid-svg-pXDerw0iWjwkRebF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pXDerw0iWjwkRebF p{margin:0;}#mermaid-svg-pXDerw0iWjwkRebF defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-pXDerw0iWjwkRebF g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-pXDerw0iWjwkRebF g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-pXDerw0iWjwkRebF g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-pXDerw0iWjwkRebF g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-pXDerw0iWjwkRebF g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-pXDerw0iWjwkRebF .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-pXDerw0iWjwkRebF .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-pXDerw0iWjwkRebF .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-pXDerw0iWjwkRebF .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-pXDerw0iWjwkRebF .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-pXDerw0iWjwkRebF .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-pXDerw0iWjwkRebF .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-pXDerw0iWjwkRebF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pXDerw0iWjwkRebF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-pXDerw0iWjwkRebF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pXDerw0iWjwkRebF .edgeLabel .label text{fill:#333;}#mermaid-svg-pXDerw0iWjwkRebF .label div .edgeLabel{color:#333;}#mermaid-svg-pXDerw0iWjwkRebF .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-pXDerw0iWjwkRebF .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-pXDerw0iWjwkRebF .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-pXDerw0iWjwkRebF .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-pXDerw0iWjwkRebF .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-pXDerw0iWjwkRebF .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pXDerw0iWjwkRebF .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pXDerw0iWjwkRebF #statediagram-barbEnd{fill:#333333;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pXDerw0iWjwkRebF .cluster-label,#mermaid-svg-pXDerw0iWjwkRebF .nodeLabel{color:#131300;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-pXDerw0iWjwkRebF .note-edge{stroke-dasharray:5;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-note text{fill:black;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram-note .nodeLabel{color:black;}#mermaid-svg-pXDerw0iWjwkRebF .statediagram .edgeLabel{color:red;}#mermaid-svg-pXDerw0iWjwkRebF #dependencyStart,#mermaid-svg-pXDerw0iWjwkRebF #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-pXDerw0iWjwkRebF .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-pXDerw0iWjwkRebF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 产品/运营提需求
双人标注+仲裁
入 Git/Langfuse Dataset
PR 触发 Harness
Canary 5%
全量
线上采样
Badcase 回流
Draft
Review
Versioned
CI
Staged
Prod
Sample

2.2 阶段 0:需求与分层(RACI)

角色 责任 交付
产品/业务 定义场景优先级、合规红线 场景矩阵(意图 × 风险级)
Applied AI 设计用例、写 rubric cases.yaml 草稿
标注团队 双人标注 + IAA 标注平台导出
平台/ML Harness、CI、版本 pin Pipeline + Registry 记录
SRE/On-call 在线告警、回滚 Runbook

Staff 口播 :「Golden Set 不是算法同学私藏 Excel,而是 平台托管、Git 或 Langfuse Dataset 版本化 的制品。」

2.2.1 分层采样(防偏见)

占比建议 说明
Head 意图 40% Top-20 意图各 ≥5 条
长尾 30% 低置信线上采样
高风险 20% 资金/合规/承诺类 100% 覆盖
回归事故 10% 每次 P0 事故 +1 条 永久保留

2.3 阶段 1:用例 Schema(Agent 专用)

最小字段 (YAML/JSONL,与 09-kit eval 对齐):

yaml 复制代码
id: cs_refund_0142
tenant: default
input:
  messages:
    - role: user
      content: "订单 8821 能退吗,已过 7 天"
context:
  user_id: u_1001
  order_id: "8821"
expect:
  must_call_tools: []          # 空 = 禁止写操作
  must_cite_kb: true
  forbidden_substrings: ["保证退款", "一定赔"]
  max_tool_calls: 3
  trajectory_hash: null        # 可选:固定工具序列
metadata:
  risk: high
  source: badcase_2026-03-12
  trace_id: tr_abc123

Trajectory eval (多步 Agent):expect.trajectory 允许 有序工具名 + 参数子集匹配 ,见 06-Harnessbuy-team demo eval/*.yaml

2.4 阶段 2:版本与不可变

实践 说明
内容寻址 eval_set_id = sha256(normalize(cases))
与发布绑定 发布记录写 eval_set_id@commit + prompt@ver + model@ver(见 11
禁止原地改 改一条 = 新版本;旧版本保留 90d 可回放

Langfuse(L1) :Dataset 版本 + Run 对比------Datasets 官方支持版本化实验。

2.5 阶段 3:PR 门禁(Harness)

#mermaid-svg-VT2rhREKCg80ps1u{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VT2rhREKCg80ps1u .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VT2rhREKCg80ps1u .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VT2rhREKCg80ps1u .error-icon{fill:#552222;}#mermaid-svg-VT2rhREKCg80ps1u .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VT2rhREKCg80ps1u .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VT2rhREKCg80ps1u .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VT2rhREKCg80ps1u .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VT2rhREKCg80ps1u .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VT2rhREKCg80ps1u .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VT2rhREKCg80ps1u .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VT2rhREKCg80ps1u .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VT2rhREKCg80ps1u .marker.cross{stroke:#333333;}#mermaid-svg-VT2rhREKCg80ps1u svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VT2rhREKCg80ps1u p{margin:0;}#mermaid-svg-VT2rhREKCg80ps1u .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VT2rhREKCg80ps1u .cluster-label text{fill:#333;}#mermaid-svg-VT2rhREKCg80ps1u .cluster-label span{color:#333;}#mermaid-svg-VT2rhREKCg80ps1u .cluster-label span p{background-color:transparent;}#mermaid-svg-VT2rhREKCg80ps1u .label text,#mermaid-svg-VT2rhREKCg80ps1u span{fill:#333;color:#333;}#mermaid-svg-VT2rhREKCg80ps1u .node rect,#mermaid-svg-VT2rhREKCg80ps1u .node circle,#mermaid-svg-VT2rhREKCg80ps1u .node ellipse,#mermaid-svg-VT2rhREKCg80ps1u .node polygon,#mermaid-svg-VT2rhREKCg80ps1u .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VT2rhREKCg80ps1u .rough-node .label text,#mermaid-svg-VT2rhREKCg80ps1u .node .label text,#mermaid-svg-VT2rhREKCg80ps1u .image-shape .label,#mermaid-svg-VT2rhREKCg80ps1u .icon-shape .label{text-anchor:middle;}#mermaid-svg-VT2rhREKCg80ps1u .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VT2rhREKCg80ps1u .rough-node .label,#mermaid-svg-VT2rhREKCg80ps1u .node .label,#mermaid-svg-VT2rhREKCg80ps1u .image-shape .label,#mermaid-svg-VT2rhREKCg80ps1u .icon-shape .label{text-align:center;}#mermaid-svg-VT2rhREKCg80ps1u .node.clickable{cursor:pointer;}#mermaid-svg-VT2rhREKCg80ps1u .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VT2rhREKCg80ps1u .arrowheadPath{fill:#333333;}#mermaid-svg-VT2rhREKCg80ps1u .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VT2rhREKCg80ps1u .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VT2rhREKCg80ps1u .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VT2rhREKCg80ps1u .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VT2rhREKCg80ps1u .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VT2rhREKCg80ps1u .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VT2rhREKCg80ps1u .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VT2rhREKCg80ps1u .cluster text{fill:#333;}#mermaid-svg-VT2rhREKCg80ps1u .cluster span{color:#333;}#mermaid-svg-VT2rhREKCg80ps1u div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VT2rhREKCg80ps1u .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VT2rhREKCg80ps1u rect.text{fill:none;stroke-width:0;}#mermaid-svg-VT2rhREKCg80ps1u .icon-shape,#mermaid-svg-VT2rhREKCg80ps1u .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VT2rhREKCg80ps1u .icon-shape p,#mermaid-svg-VT2rhREKCg80ps1u .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VT2rhREKCg80ps1u .icon-shape .label rect,#mermaid-svg-VT2rhREKCg80ps1u .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VT2rhREKCg80ps1u .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VT2rhREKCg80ps1u .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VT2rhREKCg80ps1u :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 全过
任一 fail
PR: prompt/tool/KB
单元: schema/护栏
Golden: faithfulness Δ
Trajectory: 非法工具率
成本: token 回归 <5%
合并
阻断

阈值示例(按业务校准):

指标 Gate 说明
faithfulness 劣化 <0.5pp 对上一稳定版
cite_rate 不得降 客服/合规场景
illegal_tool_rate =0 越权调用
avg_cost_per_case +5% 需审批 FinOps

实现锚点:06-Harness19 Harness demo

2.6 阶段 4:Canary 与在线探针

做法
流量 hash(user_id)%100 < 5 走候选四维版本
指标 CSAT/FCR 延迟 24--72h;先看代理指标:转人工率、拒答率
探针 每小时 N 条固定 probe 对话,与 Golden 同 rubric 自动打分

离线--在线 gap(EVAL_OFFLINE_ONLINE_GAP

根因 信号 治理动作
分布漂移 在线新意图占比↑ Shadow 集加权回流
索引延迟 cite 跌、检索空 KB 管道告警
采样偏差 Golden 过「干净」 提高 badcase 采样权重
Judge 漂移 κ 跌 重校准 rubric(02 §4)

2.7 阶段 5:Badcase 回流

Golden Repo Quality Pipeline Agent User Golden Repo Quality Pipeline Agent User #mermaid-svg-7yfFnscv5h7qUbbQ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7yfFnscv5h7qUbbQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7yfFnscv5h7qUbbQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7yfFnscv5h7qUbbQ .error-icon{fill:#552222;}#mermaid-svg-7yfFnscv5h7qUbbQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7yfFnscv5h7qUbbQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7yfFnscv5h7qUbbQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7yfFnscv5h7qUbbQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7yfFnscv5h7qUbbQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7yfFnscv5h7qUbbQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7yfFnscv5h7qUbbQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7yfFnscv5h7qUbbQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7yfFnscv5h7qUbbQ .marker.cross{stroke:#333333;}#mermaid-svg-7yfFnscv5h7qUbbQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7yfFnscv5h7qUbbQ p{margin:0;}#mermaid-svg-7yfFnscv5h7qUbbQ .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-7yfFnscv5h7qUbbQ text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-7yfFnscv5h7qUbbQ .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-7yfFnscv5h7qUbbQ .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-7yfFnscv5h7qUbbQ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-7yfFnscv5h7qUbbQ .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-7yfFnscv5h7qUbbQ #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-7yfFnscv5h7qUbbQ .sequenceNumber{fill:white;}#mermaid-svg-7yfFnscv5h7qUbbQ #sequencenumber{fill:#333;}#mermaid-svg-7yfFnscv5h7qUbbQ #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-7yfFnscv5h7qUbbQ .messageText{fill:#333;stroke:none;}#mermaid-svg-7yfFnscv5h7qUbbQ .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-7yfFnscv5h7qUbbQ .labelText,#mermaid-svg-7yfFnscv5h7qUbbQ .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-7yfFnscv5h7qUbbQ .loopText,#mermaid-svg-7yfFnscv5h7qUbbQ .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-7yfFnscv5h7qUbbQ .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-7yfFnscv5h7qUbbQ .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-7yfFnscv5h7qUbbQ .noteText,#mermaid-svg-7yfFnscv5h7qUbbQ .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-7yfFnscv5h7qUbbQ .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-7yfFnscv5h7qUbbQ .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-7yfFnscv5h7qUbbQ .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-7yfFnscv5h7qUbbQ .actorPopupMenu{position:absolute;}#mermaid-svg-7yfFnscv5h7qUbbQ .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-7yfFnscv5h7qUbbQ .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-7yfFnscv5h7qUbbQ .actor-man circle,#mermaid-svg-7yfFnscv5h7qUbbQ line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-7yfFnscv5h7qUbbQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 对话 错误回答 投诉/低分/转人工 trace 切片+脱敏 LLM 预标+人审 PR 新增 case CI Harness

规则

  1. 每条回流必须附 trace_id + version_pin(prompt/model/KB/tool)。
  2. P0 合规/资金类 24h 内 进入 Golden,且标记 regression: permanent
  3. 重复相似 query 聚类 后合并,避免 Golden 膨胀失控。

2.8 阶段 6:退役与归档

条件 动作
意图下线 用例 deprecated: true,保留 90d
政策变更 批量 valid_to,重跑 embed 不测用例删
模型换代 保留旧集 只读 对比新模型分桶

L3 · 生产落地

3.1 目录与仓库布局

text 复制代码
eval/
  golden/
    customer_service/
      v2026.05.28/
        cases.yaml
        rubric.md
  shadow/
    weekly_2026_w21.jsonl
  redteam/
    injection_v3.yaml
  harness/
    thresholds.yaml

与 monorepo 代码同仓独立 eval-repo (大组织)------关键是有 同一 CI 触发。

3.2 指标看板(最小集)

面板 维度
Golden 规模 场景数、风险桶占比
PR 阻断率 周趋势(过高=集太脆或模型不稳)
回流 TAT badcase → 入 Golden 中位天数
Offline vs Online faithfulness 差值、SRM
Eval 成本 $ / run、GPU judge 占比

3.3 与 13 Playbook 对齐

Playbook 域 本篇钩子
§6 评估 Golden 版本 = 发布必要条件
§9 可靠性 事故用例永久入集
§11 生命周期 四维版本 + eval_set 联合回滚

L4 · Staff 答辩

4.1 STAR-M-P:faithfulness 周降 9pp

要素 内容
S 大促后客服 faithfulness 从 0.88→0.79,投诉「政策答错」
T 7 天内恢复,禁止全量换模型
A 比对 kb_index_version;发现运营 PDF 未入管道;重跑 chunk+embed;Golden 增 40 条政策题;PR Gate 加 cite_rate 硬门槛
M 根因 KB 管道断流,非模型能力问题
P cite 0.78→0.91;转人工 -15%;eval_set 升 v2026.03.20

4.2 大厂追问答(节选)

Q1 · Golden Set 谁拥有?算法还是平台?

平台拥有流程,业务拥有场景优先级 。Applied AI 写 rubric 与用例;平台提供 Harness、版本、CI;标注团队出标注;合并权 在 Tech Lead + 合规代表(高风险桶)。

Q2 · 500 条够吗?

:看 分桶覆盖 而非总数。Staff 口径:Top-20 意图全覆盖 + 每意图 ≥5 条 + 高风险 100% + 每次事故 +1。500 条 head 重复 不如 200 条分层

Q3 · LLM-as-Judge 能否当唯一 Gate?

不能 。Judge 作 一阶筛选 ;资金/合规/承诺类 人评抽检 + 规则断言forbidden_substringsmust_cite_kb)。每月 κ 校准(02)。

Q4 · 线上指标和 Golden 不一致怎么办?

:先查 分布与延迟 :新意图、索引延迟、CSAT 反馈滞后。建 Shadow 集 对齐在线分布;gap>2pp 触发 回流 sprint,而不是调低 Gate 阈值。

Q5 · Agent Trajectory 怎么测?

三层 ------(1) 规则:非法工具、超步数、缺 HITL;(2) 轨迹哈希或有序工具名;(3) 端到端 outcome(订单状态不变)。与 96 §4 HARNESS_TRAJECTORY_DRIFT 对照。


4.3 与 Harness / CI 的契约

工件 生产者 消费者
cases.yaml Applied AI + 标注 pytest / mvn test trajectory
thresholds.yaml 平台 CI Gate
eval_report.json Harness Registry release_id 附件
rubric.md 合规 + 产品 LLM-Judge prompt 版本

GitHub Actions 示意(面试白板,非仓库强制):

yaml 复制代码
name: agent-eval-gate
on: pull_request
jobs:
  golden:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install -e 09-industrial-agent-kit/python
      - run: pytest eval/harness -q --threshold-file eval/thresholds.yaml

09-kit golden-harness 对齐;Java 轨见 buy-team TrajectoryEvalTest

4.4 组织反模式(面试加分)

反模式 后果 治理修复
Golden 只增不减 CI 变慢、维护放弃 季度归档 + 分桶配额
只有 happy path 线上事故重复 事故库 永久用例
Judge 当唯一真相 长答案偏好、合规漏检 规则断言 + 人审
trace_id 回流 无法复现 质检流水线强制字段
改 Gate 阈值「过线」 Goodhart 双指标 + 业务 sign-off

4.5 场景速查(面试 60s)

业务 Golden 必含 特殊 Gate
客服 RAG cite + 拒答 must_cite_kb
退款 Agent 工具序列 + HITL illegal_tool_rate=0
Text2SQL 沙箱 + RLS 负例 越权 SQL 拦截
Browser 域名白名单 无支付点击
多租户 tenant 标签 跨租户检索用例

交叉:nlp/98 C.44--C.53、2223

4.6 Oncall Runbook(faithfulness 告警)

  1. 拉取 release_id 分布------是否单版本劣化。
  2. 比对 kb_index_ref / prompt_ref 变更时间线。
  3. 抽样 20 条 trace → 人工判因(检索空 / 幻觉 / 工具错)。
  4. 若确认回归:先回滚一维 (见 11 §3.3)。
  5. 24h 内 badcase 入 Golden + 扩 Gate 规则。

§7 仓库样例与 Release 绑定

本库提供可解析工件(面试/CI 示意):

文件 说明
eval/golden/agent_platform_sample.yaml 3 条:诱导承诺 / 轨迹 / RAG cite
eval/thresholds.yaml faithfulness / illegal_tool / cost 阈值
eval/README.md 本地验证说明

Release Record 绑定示例

json 复制代码
{
  "release_id": "rel_2026_05_28_demo",
  "eval_set_ref": "golden_agent_platform_v2026.05.28",
  "eval_report_uri": "ci://agent-eval-gate/validate-eval-artifacts"
}

CI:仓库根 .github/workflows/agent-eval-gate.yml 校验 YAML 可解析 + nlp-kit / 09-java / harness。


§8 Langfuse Dataset 字段对照(L1)

Langfuse 概念 本库对应 面试说法
Dataset Golden Set 集合 版本化评测集
Dataset Item cases[] 一行 输入+expect
Dataset Run 一次 Harness 执行 绑定 release_id
Run Score faithfulness 等 PR Gate 输入
Prompt version Registry prompt_ref 与 eval 同发布

官方:Datasets overview


§9 Staff 白板脚本(45min · Eval 治理专章)

分钟 内容
0--5 三类集:Golden / Shadow / Red Team
5--15 七阶段状态图 + badcase 回流序列
15--25 PR Gate 四维阈值 + Harness
25--35 RACI + offline-online gap 表
35--40 STAR faithfulness(KB 管道)
40--45 追问:Judge κ、轨迹 eval、多租户分桶

§10 与 98 口播映射(G01--G05)

口播 ID 本篇章节
G01 Golden 谁负责 §2.2 RACI
G02 三类集区别 §1.2
G03 PR Gate 阈值 §2.5、§7
G04 回流字段 §2.7
G05 offline-online gap §2.6

详见 07/98 · 主题 98 C.131。


5. 面试前 Checklist

  • 能画 七阶段生命周期 与 badcase 回流
  • 能述 RACI 与三类评测集区别
  • 能列 PR Gate 四类阈值(质量/轨迹/成本/安全)
  • 能解释 offline--online gap 四类根因
  • 能口述 STAR faithfulness 下跌(KB 非模型)
  • 知道 Langfuse Dataset 版本 与 Git 二选一或双写

6. 导航

关联 路径
指标定义 02-评估
Harness 06-Harness
发布四维 11-Registry
十二域 13-Playbook
工业级 Catalog 96 §4 EVAL_*
子 97 llm-agent/97

官方文档与源码(一级依据)

See registry · 机制对齐 Langfuse DatasetsOpenTelemetrySpring AI Observation (eval 元数据挂载)。

写作规范:docs/official-sources-registry.md §0

L1 · 官方文档

L2 · 官方源码

相关推荐
执明wa4 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
404_coder5 小时前
源码视角下的 Android 开机流程:从 Zygote、SystemServer 到 Launcher
android
二流小码农5 小时前
鸿蒙开发:以登录案例了解代码架构MVVM
android·ios·harmonyos
用户69371750013846 小时前
从代码生产者到 AI 协作者:软件工程师的角色重构
android·前端·后端
GitLqr6 小时前
别在 Flutter 的 main() 里乱锁屏幕方向,小心 iPad 分屏功能被你搞没了
android·flutter·ios
sg_knight6 小时前
MySQL 存储过程详解:从入门到实战
android·数据库·mysql·database·dba·关系型数据库·db
爱笑鱼6 小时前
Binder(四):ioctl(BINDER_WRITE_READ) 之后,事务怎样到达目标进程?
android
AFinalStone6 小时前
Android 7系统休眠唤醒(二)开机全链路—BootROM到Launcher
android·电源管理·休眠唤醒
Mr YiRan7 小时前
Android NDK开发之统计到未被回收的图片
android