第 16 周:区分离线质量与运行期任务信号
直接答案: 离线评测、运行期指标和 SLO 不是三个名字相近的仪表盘。Offline quality canary 用冻结且带期望结果的样本发现质量回归;runtime SLI 用实际或获准回放事件观察任务是否及时进入允许终态、是否出现禁止效果,但没有标签时不能证明答案正确;SLO proposal 才是对未来服务目标、窗口和责任人的提案。没有授权流量和真实基线时,只能验证计算与 trace,真实 SLO 仍是未知,不能写成“已经达到”。
两条合法学习轨道
标题“两条合法学习轨道”第 15 周可能得到两个不同决定。本周必须尊重它:
| 轨道 | 自己案例中的获准能力 | 怎样学习观测写效果 | 证据怎样保存 |
|---|---|---|---|
| A:保留受控写 | 只读、预览和第 14 周单一写路径 | 观察自己案例的审批、执行和对账事件 | 延续自己的 Brief、决定和版本 |
| B:关闭写工具 | 只读或预览,写路径禁用 | 使用课程固定北辰候选和合成事件回放理解写 spans | 单独标为“北辰课程模拟”,不能并入自己的效果证据 |
轨道 B 不是落后。风险证据使系统保持只读,说明学习者作出了正确控制决定。课程固定候选只是技能练习,不能悄悄推翻自己的 no-go。
为什么“服务活着”不等于用户任务成功
标题“为什么“服务活着”不等于用户任务成功”下面四次请求都可能返回 HTTP 200:
- 有效政策回答带正确引用;
- 受限问题安全拒答;
- 政策冲突却生成了流畅但错误的确定答案;
- 工单服务失败,但界面错误显示“已经创建”。
从网络层看,它们都成功;从一线任务看,只有前两项可能是正确终态。FDE 需要一条能连接用户结果、版本、判断和外部效果的任务 trace,而不是只收集服务器存活和平均延迟。
先看完成品:同一组运行得到三种不同结论
标题“先看完成品:同一组运行得到三种不同结论”以下任务、时间、运行、指标和计算全部是北辰教学合成材料。五条记录用于解释口径,不代表真实模型或生产表现。
五条固定任务
标题“五条固定任务”| case_id | 角色与输入 | 离线期望 | 实际终态 | 外部效果 | canary |
|---|---|---|---|---|---|
| C-01 | 普通客服,可回答政策问题 | answered,引用 POL-17@v3 |
answered,引用匹配 |
无 | 通过 |
| C-02 | 普通客服,请求主管专属条款 | abstained,不得泄露 |
abstained |
无 | 通过 |
| C-03 | 两份当前政策冲突 | escalated |
answered |
无 | 失败 |
| C-04 | 准确审批创建复核单 | action_completed,恰好一单 |
action_completed |
SIM-5020 一张 |
通过 |
| C-05 | 审批在执行前撤销 | approval_revoked,零效果 |
approval_revoked |
无 | 通过 |
Offline quality canary 在这批课程样本上的结果是 4 / 5。这个数字只说明固定样本中 C-03 回归;它不是生产正确率、采用率或行业基准。
同一组回放的 runtime 视图
标题“同一组回放的 runtime 视图”假设五条课程事件都在声明的回放时限内进入了允许的技术终态,且没有未授权效果:
allowed_terminal_rate = 5 / 5forbidden_effect_count = 0reviewed_outcome_rate = 4 / 5 # 标签复核后才知道这里最重要的不是数值,而是差异:allowed_terminal_rate = 5/5 仍没有发现 C-03 内容错误。运行期终态信号可以发现卡死、错误状态和禁止效果;没有人工或可信标签时,它不能证明回答正确。抽样复核在标注延迟后才补充质量证据。
一份诚实的 SLO proposal
标题“一份诚实的 SLO proposal”# SLO Proposal v0(北辰教学模拟,不是已批准承诺)
- 服务对象:获准试用政策确认流程的普通客服- 适用任务:进入试用范围且身份、语料版本和任务类型完整的政策确认任务- 主 runtime SLI:在声明时限内进入允许终态、且没有禁止效果的任务比例- 质量复核:按声明抽样方法,在标注延迟后报告 reviewed outcome- 安全硬门:未授权外部效果数必须为 0- 窗口:[U] 尚无授权运行基线,待业务与运营负责人决定- 目标值:[U] 先收集获准基线,不用课程回放填入- 数据来源:运行事件、效果审计、抽样复核记录- 决定人:业务负责人、风险负责人、运营负责人- 复查条件:真实任务分布、标注能力、人工升级负担或风险边界变化- 当前不能声称:已达到 SLO、生产可用、提高效率或产生 ROI目标值留为 [U] 不是没完成作业。没有可接受的基线与有权决定,填一个漂亮百分比反而是不合格证据。
最小心智模型:canary、SLI、SLO 各自回答什么
标题“最小心智模型:canary、SLI、SLO 各自回答什么”| 名称 | 它回答的问题 | 需要什么数据 | 不能证明什么 |
|---|---|---|---|
| Offline quality canary | 固定版本是否在已知困难样本上退化? | 冻结输入、期望状态、系统版本和逐例结果 | 真实流量分布、采用、现场正确率 |
| Runtime SLI | 运行中的适用任务是否进入允许终态?有无禁止效果? | 任务事件、时间窗、终态、效果和抽样复核 | 没有标签时不能证明内容正确 |
| SLO proposal | 未来准备对哪项服务水平负责? | SLI、窗口、目标、负责人、风险边界和基线 | 仅写提案不代表已经达到 |
记住三个反例:
- 把第 12 周离线正确率叫“生产 SLI”——错;
- 把所有拒答都算成功——错,离线要看期望状态,运行期要分别报告;
- 写下
99.9%就说有 SLO——错,没有总体、窗口、数据来源和负责人只是数字。
先定义任务终态,再画 trace
标题“先定义任务终态,再画 trace”北辰任务使用以下可见终态:
| 终态 | 一线含义 | 是否一定正确 |
|---|---|---|
answered |
系统呈现一个经过引用验证的候选回答 | 仍需 quality canary 或抽样复核判断内容 |
abstained |
系统没有足够或允许的证据 | 可能是正确保护,也可能是系统退化 |
escalated |
任务进入明确人工责任人 | 不代表业务问题已经解决 |
approval_denied / revoked |
用户拒绝或批准被撤销,未执行效果 | 安全正常终态,不是服务崩溃 |
action_completed |
外部效果已经独立核验 | 不代表动作本身业务上正确,仍看批准和范围 |
failed |
系统没有进入可接受任务路径 | 需要按阶段定位原因 |
允许终态不是统一的“成功”。它必须结合角色、输入类别、期望状态和风险合同解释。
完整 trace:从一个 ID 还原任务
标题“完整 trace:从一个 ID 还原任务”task_run_id 是教学中的业务关联 ID;底层 trace 或工具调用还可以有自己的 ID。最小路径:
request → identity_and_scope → retrieval → generation → citation_and_policy_verification → approval # 只读轨道可标 not_applicable → mcp_call # 没有获准能力时可标 not_applicable → reconciliation # 没有外部效果时可标 not_applicable → response_presented每个阶段至少记录:
task_run_id和阶段名;- 开始、结束和持续时间;
- 代码、语料、检索、模型、策略和工具等适用版本;
- 类型化结果与错误类别;
- 引用、审批和外部效果的安全引用或摘要;
- 是否进入允许终态;
- 哪些字段因安全或隐私不能进入普通遥测。
普通 trace 不保存完整提示、文档正文、客户内容、工具敏感参数、完整审批载荷或凭据。需要复核的证据放在权限更严格的证据存储中,trace 只保存引用和版本。
第 1 天:完成 two-signal contract
标题“第 1 天:完成 two-signal contract”task-quality-canary-contract-v1.md
标题“task-quality-canary-contract-v1.md”至少写明:
- 数据集与语料快照版本;
- 适用切片和分母;
- 每条样本的期望终态、必需引用和禁止事实;
- 系统、模型、检索、策略和工具版本;
- 何时运行、怎样比较前一版本;
- 失败样本怎样进入登记,而不是被删除。
runtime-sli-spec-v1.md
标题“runtime-sli-spec-v1.md”# Runtime SLI Spec v1
- 服务任务:- 适用运行总体:- 明确排除项及理由:- 允许终态分类:- forbidden effect 定义:- 时间边界:- 指标分子:- 指标分母:- 观察窗口:- 数据来源:- 抽样复核方法:- 标注延迟:- 指标负责人:- 无真实流量时怎样保持 [U]:离线数据集版本不能直接填进 runtime 的“真实总体”。课程事件回放只能验证计算逻辑。
第 2 天:只形成 SLO 草案
标题“第 2 天:只形成 SLO 草案”从 runtime SLI 选择一个最接近一线结果的主指标,再写:
- 准备服务谁和哪类任务;
- 准备在哪个时间窗承担目标;
- 哪个风险硬门不能被平均值掩盖;
- 谁批准目标,谁在失败时决定降级或停止;
- 哪些基线仍未知;
- 取得什么证据后才能从 proposal 升级为承诺。
不要用服务器 uptime 替代任务指标,也不要因为没有数据就引用“行业标准”。本周交付的是 slo-proposal-v0.md,不是生产 SLO 达标报告。
第 3 天:贯通任务关联 ID 和最小 spans
标题“第 3 天:贯通任务关联 ID 和最小 spans”先用一张完成的 trace map 标出每个组件接收和返回什么 ID。然后检查两个断点:
- RAG 进入策略判断时,是否仍能追溯语料、模型和评测版本?
- MCP 返回外部状态时,能否关联审批、幂等键和原任务?
如果具体协议或工具不能直接承载业务关联字段,在 Host 的受控映射中连接 task_run_id 与 tool_call_id;不要把可识别用户信息塞进通用追踪字段。
技术栈可以使用现有结构化事件或符合团队标准的遥测实现。本页不假装提供已经运行的 OpenTelemetry 配置;如果采用 OpenTelemetry,应记录依赖版本并核验所使用语义字段的稳定状态。
第 4 天:跑两张不能混写的视图
标题“第 4 天:跑两张不能混写的视图”- 使用第 12 周冻结样本运行 offline quality canary,保存逐例期望、实际、版本和失败;
- 使用课程合成事件或获准运行事件计算 runtime 终态、禁止效果和阶段分布;
- 将两张图并排,但标题、总体、窗口和数据来源完全分开;
- 若有抽样复核,报告样本选择和标注延迟;没有就写
[U],不能用 canary 代填。
故意保留 C-03:它在 runtime 视图进入了技术终态,但在 canary 中内容错误。学习者必须能用这一条解释两类指标为何不能合并。
第 5 天:诊断假成功并检查脱敏
标题“第 5 天:诊断假成功并检查脱敏”选择一条 HTTP 200 但任务失败的记录,沿 trace 回答:
- 身份和权限是否正确?
- 检索是否取得正确来源?
- 回答和引用是否经过验证?
- 策略、审批和工具效果是否匹配?
- 最终展示给一线用户的状态是否诚实?
- 哪个指标看见了它,哪个指标看不见?
然后运行或人工检查 telemetry-redaction-test-v1:普通事件中不得出现完整提示、政策正文、客户信息、凭据或批准载荷。发现泄漏时先停止导出并修复采集边界,不能只在仪表盘隐藏列。
五天安排
标题“五天安排”| 学习日 | 建议时间 | 当天动作 | 离开前必须有的结果 |
|---|---|---|---|
| 第 1 天 | 1.5–2 小时 | 分开定义 offline canary、runtime 总体、终态和抽样复核 | 两份合同没有共享模糊分母 |
| 第 2 天 | 1–1.5 小时 | 写 runtime 窗口、来源、标注延迟和 SLO proposal | 未知目标保持 [U],没有伪造承诺 |
| 第 3 天 | 2–2.5 小时 | 贯通 task_run_id 和最小 spans |
任一任务能回溯版本、判断和效果 |
| 第 4 天 | 2 小时 | 跑固定 canary 与课程事件回放 | 两张独立视图和逐例基线报告 |
| 第 5 天 | 1–2 小时 | 诊断假成功、检查脱敏并完成迁移和回读 | 解释指标边界并修复一项泄漏或断链 |
本周产物
标题“本周产物”fde-course/└─ week-16/ ├─ task-quality-canary-contract-v1.md ├─ runtime-sli-spec-v1.md ├─ slo-proposal-v0.md ├─ telemetry-contract-v1.md ├─ trace-map-v1.md ├─ observability-baseline-report-v1.md └─ telemetry-redaction-test-v1.md验收与失败修复
标题“验收与失败修复”本周通过需要同时满足:
- Offline quality canary、runtime 终态指标和抽样复核明确分开;
- 每个指标写清适用总体、分子、分母、窗口、排除项、来源、标注延迟和负责人;
- 任一
task_run_id能还原当前获准的 RAG、策略、审批、MCP、执行和验证路径; - 只读轨道对未获准步骤明确标记不适用,没有暗中重新启用写工具;
- 回答、拒答、升级、审批拒绝、效果完成和系统失败被分开;
- HTTP 200 但引用、权限或效果错误不能在 canary 中算成功;
- Runtime 视图展示任务终态和阶段归因,不只展示在线率;
- 没有标签时,runtime 指标没有宣称答案正确;
- 普通遥测没有敏感正文、凭据或完整审批载荷;
- 没有真实运行基线时只形成 SLO proposal,不能声称达到;
- 课程回放、合成数值和离线 canary 没有被写成生产、采用或 ROI 证据;
- 没有提前实现第 17 周的故障注入和降级。
| 常见失败 | 诊断信号 | 修复动作 |
|---|---|---|
| 把离线正确率叫生产 SLI | 仪表盘分母是固定 eval set,却标“线上成功率” | 改名 quality canary,另写运行总体和窗口 |
| 只统计 uptime 或 HTTP 200 | 错引用和假完成都显示成功 | 增加任务终态、禁止效果和阶段归因 |
| 所有拒答都算成功 | 无法区分正确保护和系统退化 | Canary 对照期望状态,runtime 分别报告 |
| 无标签却宣称内容正确 | 运行指标只有终态和状态码 | 限定为运行信号,增加抽样复核和标注延迟 |
| 用课程回放填生产基线 | 报告没有真实/模拟边界 | 标为课程回放,真实基线保留 [U] |
| Trace 在 MCP 边界断开 | 工具调用无法回到原任务和审批 | 建立受控 ID 映射并测试传播 |
| 普通 trace 保存正文 | 遥测能看到政策、客户或批准载荷 | 停止导出,改存摘要、版本和受限证据引用 |
| 为观测重新开启写工具 | 自己案例 no-go 后又出现写 spans | 保持只读轨道;单独使用北辰回放练习 |
独立迁移:供应链异常任务
标题“独立迁移:供应链异常任务”一名计划员查询订单延误。系统可以返回有来源的状态、在数据过期时升级,也可能因权限拒绝供应商敏感字段。
请分别完成:
- 三条带期望结果的 offline quality canary 样本;
- Runtime 适用总体、允许终态和禁止效果;
- 一种抽样复核方法及标注延迟;
- 一条从请求到来源、策略和终态的 trace;
- 一份目标值仍为
[U]的 SLO proposal; - 90 秒解释:为什么 runtime 全部进入终态仍可能回答错误。
检查点:如果你把承运商接口在线率写成“订单异常处理成功率”,迁移没有完成。
用同一组证据向三类人解释
标题“用同一组证据向三类人解释”老板版
标题“老板版”Offline canary 告诉我们固定困难样本是否退化;runtime 视图告诉我们获准任务是否进入允许终态、是否产生禁止效果;抽样复核才补充运行内容质量。当前只有课程回放,没有真实运行基线,因此 SLO 仍是提案,不能据此声称生产可用、采用或 ROI。
一线版
标题“一线版”系统会区分有依据回答、拒答、升级、审批拒绝和故障。普通运行记录只保存状态、版本和安全引用,不保存完整客户内容;抽样复核需要按已说明的范围进行。若写工具已被关闭,观测不会重新打开它。
工程版
标题“工程版”
task_run_id贯通身份、检索、生成、验证、策略、审批、MCP 和对账。Quality canary 使用冻结标签;runtime SLI 使用声明窗口的事件并延迟接收抽样标签;SLO 仍为 v0 proposal。遥测只保存必要版本、终态、耗时、错误和受限证据引用。
相邻周
标题“相邻周”第 16 周只建立可观察基线。第 17 周才会使用预置故障点,训练模型、索引或 MCP 不可用时的超时、关闭开关和安全降级。
权威来源与事实边界
标题“权威来源与事实边界”- Google SRE Book — Monitoring Distributed Systems:从用户可见症状出发理解延迟、流量、错误和饱和度的经典参考。
- Google SRE Workbook — Implementing SLOs:SLI、SLO、服务边界和测量窗口的实践参考。
- OpenTelemetry — Generative AI Semantic Conventions:模型与 Agent 遥测语义参考;采用前应核验具体字段的稳定状态与所用版本。
- MCP Specification:MCP 请求、能力和工具交互的一手规范,用于确认 trace 所跨越的协议边界。
核验日期:2026-08-25。 task_run_id、终态分类、quality canary、runtime SLI 草案、五条回放和两张视图是本课程的教学组合,不是上述来源规定的统一字段或行业阈值。课程没有真实流量,因此没有声称任何生产 SLO 已建立或达到。北辰任务、运行、时间、指标和结果均为合成材料;真正的 SLI/SLO 必须由具体服务的用户任务、风险、数据质量、运营能力和有权负责人决定。