分阶段引入
分阶段引入
Laya 返回一个类型化的决策,而不是执行它的许可。分阶段引入决策引擎,让应用在证据积累的同时始终 掌控真正的动作。
本指南讲的是 Laya 周围应用侧的推广。Laya 提供决策、概率、置信度和钩子事件;应用拥有现有动作、 推广策略、复核边界和回滚。
1. 影子:只观察,不产生副作用
在代表性的真实流量上跑 Laya,但让现有动作保持权威。一条影子记录应包含足够的上下文,以便日后 复现一次对比:
- 请求类别和 Laya 的问题 schema;
- Laya 的答案、各选项的概率、置信度、checkpoint 和
run_id; - 现有动作,以及最终经复核的或真值的结果;
- 延迟、错误,以及任何回退或复核决定。
用现有的预测钩子来采集 Laya 侧的证据。下面这些日志函数是应用自己的占位实现;它们不是 Laya API:
from laya import Router
class ShadowLog:
def on_predict_end(self, ctx):
result = ctx.results[0] if ctx.results else None
write_shadow_record({
"run_id": ctx.run_id,
"model": ctx.model,
"decision": ctx.decision,
"result": result,
"elapsed_ms": ctx.elapsed_ms,
"error": None if ctx.error is None else repr(ctx.error),
})
router = Router(hooks=[ShadowLog()])
def handle(request):
try:
laya_result = router.predict(request.state, request.questions)
except Exception as exc:
record_laya_failure(request, exc)
return run_incumbent_action(request)
# The shadow result is recorded by the hook; do not execute it here.
return run_incumbent_action(request)
敏感字段按应用自己的策略脱敏。在应用边界处捕获并记录 router.predict(...) 周围的异常。预测钩子
覆盖预测生命周期,但那之前就发生的失败需要应用层来捕获;不要假定 on_predict_end 看到了它们。
影子记录器绝不能把记录变成一个新的面向用户的动作。
事件顺序和 run_id 关联见预测钩子、钩子生命周期和
链路追踪。
2. 对比:不一致是信号,不是判决
在同一个请求和同一问题含义上把 Laya 和现有系统做对比。不一致本身不自动等于错误:现有系统可能
错了,案例可能含义不清,动作也可能需要人的判断。能用的话就用复核过的标签或真值结果,并保留一个
明确的 unknown 或复核桶,而不是把每一处不一致都强行压成二元的对错。
按 checkpoint、语言或路由、问题 schema、动作类型和风险等级来复核对比结果。把覆盖率和一致率与 准确率一起记录。在一个简单子集上的高一致率,并不能为另一种语言、动作或问题形状的推广背书。
3. 从留出证据里选一条策略
置信度阈值是一条应用策略,不是 Laya 提供的属性。在代表性的留出数据上拟合或校准决策分数,然后 根据在你的应用能容忍的覆盖率下测得的准确率和错误代价来选阈值。没有一个普适的数字能跨 checkpoint、问题类型、语言或动作风险通用。
把 checkpoint 和问题 schema 版本、校准方法、阈值、评估集和负责人随策略一起记录。这些输入一变 就重新评估。置信度给决策排序;它并不证明某个决策正确,高置信度本身也从来不是执行许可。
这六项里有四项来自评估 harness:一份 laya-evals run --json 报告记录了作答的 checkpoint 提交
(config.revisions)、数据集的字节和问题 schema(config.dataset_sha256、
config.questions_sha256)以及它据以计分的门控(config.thresholds)。校准方法和负责人是应用
自己要记录的。运行身份,以及基线与候选之间的可比性检查,见评估 harness。
README 的 Automated Confidence Gating、 Calibration 和 Honest limits 各节 给出了现有的校准和置信度背景。不可逆或代价高的动作,即便置信度很高,也要挡在明确的复核边界之后。
4. 推广一个有界的切片
推广应该是一次经过测量、可回滚的改动,而不是一个全局的开关。在启用自动化之前,先定义一个资格 边界,例如:
- checkpoint、语言/路由和问题 schema 都在评估过的集合里;
- 动作可逆,或者有一条明确的人工复核路径;
- 请求不缺必需的上下文,也没有 Laya 错误;
- 切片有大小或流量上限,以及一个具名的回滚条件。
先从小处试水。对不合格、含义不清和失败的案例保留复核或回退。持续对已推广的决策抽样,把它们和 现有系统及复核结果对比,并监控不一致率、覆盖率、回退率、错误和延迟。约定的防护栏一旦被突破就 回滚;推广是一步有界的行动,不是永久宣告模型正确。
应用 / Laya 的边界
Laya 提供决策证据,并通过现有的 API 和钩子把它暴露出来。应用拥有现有结果、动作执行、资格规则、 阈值、复核、回退和回滚。钩子可以记录或标注证据,但它们不会让一个高影响动作变得可以安全执行。
因此一次务实的推广是:
real request
├─ incumbent action (authoritative)
└─ Laya shadow decision ──> log, compare, evaluate
└─ bounded eligible slice
└─ review / fallback / rollback
推广清单
- 影子日志无副作用,并按
run_id关联。 - 对比数据包含现有结果,以及可用时经复核或真值的标签。
- 阈值在代表性的留出数据上拟合并验证过。
- 不可逆或代价高的动作有明确的复核边界。
- 推广是有界、抽样且可回滚的,并有具名的回退和回滚路径。
- 记录了策略负责人和重新评估的触发条件。
另见
- 预测钩子 —— 用于审计、指标和门控的扩展缝。
- 评估 harness —— 基线携带的运行身份,以及基线与候选之间的可比性检查。
- 钩子 API 参考 ——
PredictContext字段和生命周期事件。 - 链路追踪 ——
run_id与 span 关联。 - README:Automated Confidence Gating —— 置信度是 策略输入,不是正确性保证。
- README:Calibration 和 Honest limits。