Skip to content

LLM 评测与发布门禁实战

这是一页面向面试的“从改动到生产”手册。它不重复介绍单个 RAG 或 Agent 指标,而是回答更难的问题:换了模型、Prompt、知识库、工具或工作流以后,凭什么允许它上线;线上发现问题,又如何在不扩大损失的前提下停掉并恢复。

相关基础请配合阅读:模型评估与幻觉治理Agent 评估与可靠性工程RAG 评估Agent 评测与安全合规高频问答大模型应用线上排障手册

一、30 秒总答法

面试官:你们的 LLM 应用改了 Prompt 或模型,怎样决定能否上线?

可以这样回答:

我把评测看成发布系统的一部分,而不是一次离线打分。每次变更先被完整版本化,包括模型、Prompt、知识库、检索参数、工具 Schema、策略和工作流。然后按风险运行分层评测:核心 golden set 保底,历史 bad case 防回归,对抗集测安全,沙箱集验证真实副作用,性能成本集检查 SLA。质量、延迟、成本可以设预算阈值;越权执行、未确认的高危写操作、敏感信息泄露、关键审计字段缺失属于硬红线,一票否决。离线通过后先影子流量,再小流量灰度,线上持续比较新旧版本的质量、投诉、成本和错误率,触发中止条件就自动回滚。最后把线上 bad case 去重、脱敏、标注后回灌到回归集,形成闭环。

这段回答覆盖了面试官最常追问的六件事:版本、数据、指标、门禁、灰度、回流。只说“跑 RAGAS”或“看成功率”通常不够,因为那无法解释谁对上线负责、如何控制副作用、怎样发现长尾退化。

二、先建立正确的发布对象

传统服务发布常把镜像版本当作唯一发布单元;LLM 应用的行为却由多个可变资产共同决定。只记录 service_version 会让回归无法复现。

资产需要记录的版本典型变更风险
模型与路由provider、model_id、模型快照、fallback 链格式、拒答边界、工具能力、单价漂移
Promptsystem prompt、模板、few-shot、结构化输出约束局部修复造成全局退化
RAG文档集、解析器、chunk、embedding、index、rerank、Top-K召回漏失、旧知识、越权、上下文噪声
Agentgraph/workflow、状态定义、停止条件、工具清单循环、走错分支、检查点不兼容
工具schema、服务端实现、权限策略、幂等约束参数合法但业务动作错误
安全策略ACL、数据分级、DLP、审批规则、注入检测绕过权限、外发敏感数据
运行配置temperature、timeout、重试、并发、预算成本暴涨、延迟退化、重试风暴

建议把一次可发布版本抽象成不可变的 release_manifest

json
{
  "release_id": "support-agent-2026-07-14.3",
  "model": { "primary": "model-x", "fallback": "model-y" },
  "prompt_version": "p-20260714-03",
  "rag": { "index_version": "kb-20260714-11", "top_k": 12, "reranker": "r-4" },
  "tools": { "refund": "v5", "order_search": "v9" },
  "policy_version": "policy-20260714-02",
  "workflow_version": "graph-8d3c",
  "eval_suite_version": "eval-20260714-01"
}

面试里要点明:release_manifest 不是为了“记录得漂亮”,而是为了让线上一条 trace 能准确关联到当时的行为输入,并支持按资产回滚。例如模型没问题、只是新索引解析错误,就只回滚 index_version,不必退回整个服务。

三、评测资产怎么分层

不要把所有样本混成一个平均分。不同样本承担不同的决策职责,分层后才能避免“平均分提升,但最重要客户场景挂了”。

集合来源目标是否阻塞发布
Golden高频核心任务、专家标注保证主路径稳定
Regression历史投诉、线上事故、修复过的 bug防止旧问题复发
Boundary无答案、歧义、冲突知识、长尾表达评估拒答与澄清能力通常是
Adversarial注入、越权、数据外发、提示冲突评安全边界是,硬红线
Sandbox可回滚数据库、模拟第三方、测试账户验副作用和 Agent 轨迹写操作场景必须
Performance真实长度分布、峰值并发、长上下文验 SLA 和容量重大变更必须
Online holdout从未参与调参的盲测样本防评测集过拟合建议阻塞核心版本

3.1 一条样本不能只有问题和答案

RAG、Agent、工作流任务的“正确性”往往不在文本里,而在环境状态和约束里。建议数据结构最少包含:

yaml
case_id: refund-cross-tenant-017
input: "帮我退掉订单 A-1024"
context:
  tenant_id: tenant_a
  role: customer_service
initial_state:
  order_owner: tenant_b
allowed_tools: [order_search]
forbidden_tools: [refund]
expected:
  outcome: "拒绝并说明权限原因"
  final_state: "订单状态不变"
  citations_required: false
constraints:
  max_steps: 4
  max_cost_cny: 0.05
  requires_approval: false
judge:
  type: rule_and_state_check
tags: [agent, permission, critical, regression]

这段结构会让面试官看到你知道:文本答案正确、工具轨迹合理、业务最终状态正确,是三个不同层面的断言。

3.2 评测集如何避免“被刷分”

  1. 将调参集和最终 holdout 集隔离,调 Prompt 时只能看前者。
  2. 保留 case 的来源、标注人、适用版本、最近复核时间和脱敏状态。
  3. 按场景、语言、租户、文档类型、风险等级分桶报分,不只报总平均。
  4. 每次线上事故先进入候选池,去重、脱敏、复核后再进入 regression。
  5. 对模型可见的公开题、few-shot 样例和评测数据做泄漏检查;不要把 benchmark 分数当业务质量。

项目表达可以这样说:

我们会保留一批不参与日常 Prompt 调整的 holdout 样本。否则团队每次都围着同一批 bad case 优化,分数越来越好,却不知道泛化是否真的变好。

四、指标不是越多越好,而是要能触发决定

一个指标如果没有 owner、阈值、采样口径和触发动作,就只是仪表盘装饰。面试时可以按五层质量模型组织。

层次关键问题常用指标失败后动作
任务结果最终任务完成了吗task success、状态断言、人工通过率阻断或回滚
证据质量RAG 是否有依据Recall@K、Context Precision、faithfulness、citation support调检索/索引,不能只改 Prompt
过程质量Agent 是否正确执行tool selection、argument accuracy、step count、recovery rate修工作流、工具或策略
运行质量用户是否等得起、用得起TTFT、P95、error rate、cost/request、cache hit限流、路由、容量或预算调整
安全与治理是否越权、可审计policy violation、PII leakage、approval bypass、trace coverage一票否决、止血、复盘

4.1 以“差分”而不是“绝对值”做发布判断

假设新版本的总体正确率从 82% 提升到 84%,但金融产品说明场景从 92% 降到 78%,这个版本不能简单判为成功。发布报告至少应给出:

  • 新旧版本在同一批 case 上的 win / tie / lose。
  • 每个业务桶的样本数、置信区间和关键失败例。
  • 关键指标的绝对阈值与相对退化阈值。
  • 使用的模型、Prompt、索引、工具和策略版本。

常用判断公式不必追求复杂,但必须体现“风险加权”:

text
allow_release = hard_redlines_pass
  AND critical_bucket_regression <= 0
  AND weighted_quality_delta >= 0
  AND p95_latency <= sla
  AND p95_cost <= budget

其中 weighted_quality_delta 要把高风险支付、合规、医疗、金融、删除操作赋予更高权重;绝不能让大量低风险闲聊样本掩盖关键业务退化。

4.2 LLM-as-Judge 怎样用才不自欺欺人

LLM Judge 适合开放文本的相关性、完整性、风格和基于证据的忠实度判断,但不应替代规则和业务系统断言。

问题更可靠的判法
JSON 是否合法、字段是否存在parser + schema 校验
是否引用了正确文档citation id 对齐 + 证据蕴含判定
是否真的退款、金额是否正确沙箱数据库与业务 API 状态断言
是否越权访问服务端 policy decision 与审计事件
回答是否完整、有帮助经过校准的 LLM Judge + 人工抽检

Judge 上线前要做 meta-evaluation:抽样让领域专家标注,再比较 Judge 与人工的一致率;用成对比较降低绝对评分漂移;交换答案位置降低位置偏差;对长度、格式和自家模型偏好做消偏。若 Judge 与人类经常不一致,先修 rubric 或换 Judge,而不是相信自动分数。

五、发布门禁要区分硬红线、软阈值和人工豁免

这是系统设计题最能拉开差距的部分。把所有指标当成同一种阈值,会导致两种极端:要么系统永远发不出去,要么风险被“平均分”掩盖。

5.1 建议门禁矩阵

类别例子默认决策说明
硬红线越权工具执行、PII 外发、高危写操作未确认、审计 trace 缺失Fail任何一例都阻断
关键回归P0/P1 bad case 再现、核心业务桶下降Fail不允许用整体均分抵消
质量预算事实正确率、引用支持率、工具参数正确率Warn / Fail依风险级别设阈值
性能预算P95/P99、超时率、队列时间Warn / Fail需要区分在线和异步任务
成本预算单请求成本、最大 token、fallback 率Warn / Fail必须能按租户和版本归因
体验指标采纳率、满意度、转人工率灰度判定线上才有代表性

5.2 人工豁免不是删掉门禁

有时新能力必须带着已知缺陷试点。正确做法是创建有期限的 exception,而不是把 case 从评测集删掉:

text
exception_id / 风险说明 / 影响租户 / 负责人 / 缓解措施
/ 允许的流量上限 / 到期时间 / 回滚条件 / 审批记录

面试表达:

豁免应当让风险更可见,而不是把失败隐藏起来。它必须限定范围、期限和负责人,灰度结束后仍要回到正常门禁。

六、从离线到生产的发布流水线

text
变更提交
  -> 生成 release manifest
  -> 单元/契约检查(Schema、ACL、工具策略)
  -> 离线 golden + regression + boundary
  -> 安全对抗与 sandbox 副作用测试
  -> 性能、成本与容量压测
  -> 人工审批(高风险变更)
  -> shadow traffic
  -> 1% canary
  -> 分批灰度
  -> 全量发布 + 持续监控
  -> bad case 回灌与版本复盘

6.1 每一段具体验证什么

阶段目的应收集的证据
契约检查防低级集成错误JSON Schema、工具权限表、API 契约、Prompt 变量缺失
离线评测看可重复质量分桶得分、失败 case、与基线差分
Sandbox防真实副作用业务状态前后对比、幂等、补偿、审批事件
Shadow以真实输入验证但不影响用户新旧输出、成本、延迟、路由差异
Canary小范围观察真实体验采纳率、失败率、投诉、人工接管
灰度控制扩大速度每档流量的停止条件与责任人
全量后识别慢性退化漂移、成本、供应商变化、知识过期

6.2 Shadow traffic 的边界

影子流量只适合只读或可完全隔离的执行。对写工具不能偷偷重复调用生产接口,否则会产生双扣款、重复工单或外发邮件。

安全做法:

  • 将写工具替换为 sandbox 或 dry-run 适配器。
  • 只记录“拟执行动作”,不实际提交。
  • 使用匿名化、最小化输入,避免把敏感数据无控制地送到候选模型。
  • 给影子调用单独预算,防止它反过来冲垮生产。

七、灰度时看什么,何时中止

灰度不是“放 10% 看看”。它需要预先写清楚比较对象、观察窗口和 abort 条件。

信号示例中止条件立即动作
安全任意确认的 PII 外发或越权执行立即下线新版本、冻结高危工具
业务错误核心任务失败率超过基线 2 个百分点且样本达最小量停止扩量、回滚并保留 trace
可用性5xx 或超时率超过基线 50%降级、切旧模型、扩容或限流
成本单次 P95 成本超过预算 30%限制 max token、停止高价路由
体验转人工率、点踩率显著变差暂停灰度,抽样人工复核

两个面试细节值得主动说:

  1. 最小样本量与观察时间必须事先约定,否则看到几个好样本就扩量、看到一个坏样本就恐慌都不科学。
  2. 线上指标要按模型、Prompt、场景、租户、输入长度、文档版本和工具类型切片。只看全局平均会让局部故障长期潜伏。

八、回滚不是一个按钮,而是一套可验证能力

LLM 应用至少要能独立回退下面几类资产:

回滚对象适用故障回滚前后要验证
模型/路由新模型格式、拒答、成本异常route 命中、fallback、结构化输出
Prompt指令退化、局部 bad case 过拟合Prompt 哈希、golden set
索引/知识库旧政策、解析错误、权限泄露doc/index version、ACL、引用
工具 Schema/实现参数错误、幂等问题契约、dry-run、业务状态
策略误放行、误拒绝、外发风险policy decision、审批链
工作流循环、状态不兼容、恢复错误checkpoint、最大步数、终止原因

回滚的难点不是“把配置改回去”,而是状态一致性。Agent 对外部系统做了写操作时,要有 operation_ididempotency_key、可查询状态和补偿动作;恢复执行时不能因为不知道上一次是否成功就重复提交。

九、RAG、Agent、Dify、微调的门禁差异

不要用一套平均指标硬套所有类型。下面是可直接背诵的对比。

类型必跑评测特别红线常见误区
企业 RAGRecall@K、citation support、faithfulness、ACL、旧文档回归越权召回/输出、无证据强答只测答案,不测检索和权限
Tool Agent任务完成、工具选择/参数、sandbox 状态、步数、预算未确认写入、跨租户、重复副作用只看最终自然语言回答
Dify/工作流节点分支覆盖、变量映射、知识库版本、失败分支生产 Key 外泄、分支跳过审批预览成功就直接发布
模型/LoRA领域任务、通用能力回归、格式、拒答、安全训练数据泄露、灾难遗忘只测训练集或只比 loss
MaaS 路由兼容性、rate limit、fallback、计费、数据出境高风险请求静默切弱模型只看公开榜单与单价

十、系统设计题:设计一个 AI 发布质量平台

10.1 组件划分

组件职责
Release Registry保存 manifest、审批、环境、发布状态
Dataset Registry维护评测集版本、标签、脱敏、owner、holdout 权限
Eval Orchestrator按变更类型选择 suite,调度并行评测
Judge Service规则、状态、LLM Judge、人评任务的混合判定
Trace & Evidence Store保存输入摘要、检索、工具、策略、输出和版本证据
Policy Engine在运行时做 ACL、数据分级、工具审批和 DLP
Rollout Controller管理 shadow、canary、流量档位、中止和回滚
Metrics & Alerting计算线上质量、成本、延迟、安全和业务信号

10.2 数据流

  1. 开发者提交一个候选 manifest,平台计算与基线的资产 diff。
  2. 编排器据 diff 选择测试。例如只改 Rerank 时重点跑检索与引用集,改工具时强制跑 sandbox。
  3. Judge 汇总规则断言、状态断言、LLM Judge 和人工结论,产出分桶报告。
  4. Gate Engine 先检查硬红线,再检查关键桶与预算,给出 allow、deny 或 need-approval。
  5. 通过后 Rollout Controller 从 shadow 到 canary;运行时 trace 和指标持续回传。
  6. 达到 abort 条件,控制器冻结扩量并切回上一个 manifest;复盘 case 回到 Dataset Registry。

10.3 面试官常见追问

问:模型输出有随机性,怎么避免一次跑分误判?

固定随机种子并不能消除供应商模型波动。对关键 case 可以多次采样,报告均值、方差和最差值;把需要稳定的流程设计为低温度、结构化输出和状态断言;发布依据使用预算内的稳定成功率,而不是挑一次最佳结果。

问:评测集很小,阈值是否可信?

不应伪装成精确统计。先从高风险、高频和历史失败样本开始,报告样本量与分桶覆盖;对小样本关键场景使用人工复核和保守灰度;随着线上反馈逐步扩充,而不是等到有“完美大数据集”才建立门禁。

问:LLM Judge 成本高怎么办?

分层执行。格式、权限、状态用廉价规则判;低风险样本可采样 Judge;回归与高风险变更全量 Judge;缓存相同输入的判定结果。不能为了省 Judge 成本而放弃核心安全和质量断言。

问:线上用户没有明确点赞,如何发现质量退化?

结合隐式信号和抽样审计:追问率、重试率、人工接管、复制后编辑、工单重开、引用点击、任务最终状态;同时保留固定线上探针和 shadow 对比。隐式信号是告警线索,不等于事实正确性,仍需抽 trace 复核。

十一、项目讲法:把“做了评测”说出工程含量

不要只说“用 LangSmith/RAGAS 做了评测”。可以按 STAR 讲:

在企业知识库 Agent 上线前,我们发现团队常按单个 bad case 改 Prompt,导致版本互相覆盖,且无法证明是否引入长尾退化。我把模型、Prompt、索引、工具和策略纳入同一个 release manifest,基于高频问答、历史投诉、越权对抗和沙箱写操作搭了分层评测。上线门禁把越权、未确认写操作和审计缺失设成硬失败,其他质量、延迟和成本按业务桶比较;通过后先影子流量和 1% 灰度,出现阈值异常自动停扩量并回退。这样每个 bad case 都能从 trace 关联到具体版本,复盘后进入 regression 集,后续改动必须证明它不再复发。

如果有真实数据,再替换成自己的数字。没有数据时不要编造“提升 30%”;可以诚实说使用了哪些可观测指标、哪些风险被门禁拦截、哪些设计使定位时间缩短。

十二、面试速记清单

  1. 公开 benchmark 能直接作为上线门禁吗? 不能。它用于初筛,生产要看业务 golden、bad case、安全、成本、延迟和线上信号。
  2. 为什么要 release manifest? LLM 行为由模型、Prompt、索引、工具、策略共同决定,只有完整版本才能复现和精确回滚。
  3. Golden set 和 regression set 的区别? 前者保核心能力,后者锁住历史失败;两者都要阻断关键版本。
  4. Agent 为什么必须 sandbox? 自然语言答案可以模拟,写操作的最终业务状态必须在可回滚环境验证。
  5. RAG 上线看哪些核心指标? 检索召回、上下文精确、忠实度、引用支持、ACL 与旧知识回归。
  6. 硬红线有哪些? 越权、敏感泄露、未确认高危动作、关键审计缺失。它们不能被平均分抵消。
  7. 灰度只看错误率吗? 不够。还看核心任务、成本、延迟、转人工、投诉与安全事件,并按场景切片。
  8. 何时自动回滚? 事先定义安全、关键业务、可用性和成本的 abort 条件,触发即冻结扩量并回到上一个 manifest。
  9. LLM Judge 可以评一切吗? 不可以。权限、Schema、金额、业务状态优先规则和系统断言;Judge 要人工校准。
  10. bad case 怎么闭环? 采集、脱敏、去重、分级、标注、进入 regression,修复后必须在后续发布中持续通过。

继续阅读

基于 MIT 许可发布