feat(sense): T-X5 云端评判晋升表×conformal 双闸门——本地档自动接管(采纳 cortiq promotion)
- gateway/sense/promotion.py:PromotionTable 状态机(candidate/promoted/demoted)
* 晋升门:n_total>=n_min 且 通过率>=promote_lb 且 soak 浸泡期满足
* 退化:promoted 期间通过率<demote_lb 自动降级;降级后可凭数据恢复
* 一票否决:tier=T3 观察不进通过率统计,已晋升者立即降级
* 持久化 sense_promotion 表(CREATE IF NOT EXISTS 幂等)
- grader:live 模式对已晋升标签的 T2 决策(无 T3 信号/非 fallback)升级 T1,
hard_gates.promotion_applied 如实标注;T1/T3/fallback 路径不受影响
- 回填链路:T1 审计抽样带 promo:<label> 标签 -> 人工 verdict approve=ok
经 /review/{id} 提交时回填晋升表(失败不影响审核主流程)
- 双闸门语义:conformal 阈值保证单条决策风险率,晋升表保证标签级接管节奏;
collect 数据不足(n_min 未满)不晋升,全部迁移可经 T-X4 留痕审计
pytest 474 passed(T-X4 后 466 + 8)
This commit is contained in:
@@ -451,6 +451,22 @@ try:
|
||||
raise HTTPException(status_code=400, detail=str(e))
|
||||
if not ok:
|
||||
raise HTTPException(status_code=404, detail=f"审核记录不存在或已审核: {review_id}")
|
||||
# 晋升表回填(T-X5):带 promo 标签的 sense 审计样本,人工 verdict
|
||||
# approve=ok -> 晋升表累计;失败不影响审核主流程
|
||||
try:
|
||||
row = get_review().get(review_id)
|
||||
promo = next((t[len("promo:"):] for t in (row.get("tags") or [])
|
||||
if isinstance(t, str) and t.startswith("promo:")), None)
|
||||
if promo:
|
||||
from gateway.sense.config import build_sense_config
|
||||
from gateway.sense.promotion import PromotionTable
|
||||
from gateway.sense.store import SenseStore
|
||||
scfg = build_sense_config(settings_store().to_dict())
|
||||
if scfg.enabled:
|
||||
PromotionTable(SenseStore.init_db(scfg.db_path)).observe(
|
||||
promo, ok=(verdict == "approve"))
|
||||
except Exception:
|
||||
pass
|
||||
return {"ok": True, "review_id": review_id, "verdict": verdict}
|
||||
|
||||
# ---------------- 模型池(多价位异构模型) ----------------
|
||||
|
||||
Reference in New Issue
Block a user