Jev 判别式决策引擎运维手册
本文档介绍 Jev(基于 TypeSafe AI 架构的判别式决策引擎)在 RepoSentinel 中的接入流程、安全门禁、运维操作与故障应急机制。
1. 架构定位与安全基线
Jev 在系统中承担三个业务面的轻量判别式决策(YES/NO/CHOICE/SCORE),不生成自由文本:
- 通知降噪面 (
notification):过滤机器人风暴、重复 ping 与琐碎变更,保护高危安全告警穿透。 - PR 审查门控面 (
review):识别纯文档/琐碎依赖变更实行安全跳过,拦截高风险代码执行全量深度审查。 - ChatOps 鉴权决策面 (
chatops):判定斜杠指令的操作语义风险,严格隔离单飞并执行零缓存。
核心安全原则
- 默认关闭:全新安装或升级后,Jev 默认处于禁用状态 (
enabled: false)。 - 影子观察先行:开启后必须首先在
mode: "shadow"模式下运行至少 7 天,仅记录决策比对与指标,不影响实际业务走向。 - 严格上线门禁:从
shadow切换到active生产接管,必须满足离线标注集评估、生产真实 API 冒烟、双数据库回归以及负载故障注入的硬性门禁(系统将在 API 层自动校验jev.evaluation.v1记录)。 - 隐私与合规:发往 Jev 的 State 经严格白名单清洗与脱敏,体积限制在 8KiB 以内;对外发送私有仓元数据前,需管理员确认第三方服务协议与数据留存条款(系统不虚假宣称具备零数据保留 ZDR 或 DPA 资质)。
2. 生产上线生命周期
┌──────────────┐ 配置并启用 ┌──────────────┐ 满 7 天且人工复核 ┌──────────────┐
│ enabled: false│ ─────────────────> │ mode: shadow │ ─────────────────────> │ 离线与真实门禁 │
└──────────────┘ └──────────────┘ └──────┬───────┘
│
┌──────────────┐ 逐能力开启生效 │
│ mode: active │ <─────────────────────────────┘
└──────────────┘步骤一:初始配置(Shadow 模式)
在管理面板 Jev 判别引擎 或配置文件的 jev 段中填入 Base URL、API Key 及模型,模式设为 shadow。Base URL 使用 HTTPS 主机地址(默认 https://api.typesafe.ai),不含路径、查询参数或凭据。完整变量见 配置参考。
enabled: truemode: "shadow"noise_filter_enabled: truecascade_gate_enabled: truechatops_guardrail_enabled: true
系统开始收集 reposentinel_jev_would_suppress_total 和 reposentinel_jev_would_skip_total 观测指标。
步骤二:生产影子观测期(>= 7 天)
- 观察 Grafana / Prometheus 监控中 Jev 决策分布、延迟 (p95 < 500ms) 及断路器状态。
- 管理员在后台定期抽样检查跳过的 PR 与被标记抑制的通知,确认无漏报和误杀。
步骤三:执行上线门禁验证
在将模式切换为 active 之前,必须通过本地测试套件完成基线验证,由维护者审核评估结果并将摘要写入 system_settings 的 jev.evaluation.v1:
- 标注数据集校验:195 条金标样本测试全通过,误抑制率 = 0,敏感 PR 误跳过 = 0,合法高危动作误拒率 <= 5%。
- 真实 API 冒烟:设置
REPOSENTINEL_JEV_LIVE_TEST=1与REPOSENTINEL_JEV_API_KEY,验证真实 API 凭据及协议兼容性。缺少任一条件时测试会跳过,不能视为通过。 - 负载演练:有界测试覆盖并发限制、500 故障熔断与决策面隔离;设置
REPOSENTINEL_JEV_LOAD_TEST=1可追加 30 秒并发循环。该循环复用相同状态并可命中缓存,不能视为持续远程故障注入的证据。
在仓库根目录执行(真实冒烟前先设置 API Key 环境变量):
go test -race ./internal/jev -run 'TestCasesDatasetIntegrity|TestOfflineSimulationEvaluation' -v
REPOSENTINEL_JEV_LIVE_TEST=1 go test ./internal/jev -run TestLiveSystemOne -v
REPOSENTINEL_JEV_LOAD_TEST=1 go test -race ./internal/jev -run TestLoadAndFaultInjection_Bounded -v这些测试不会自动写入 jev.evaluation.v1。当前 API 校验摘要中的字段和门槛,不验证密码学签名;评估证据的审核与入库流程需由维护者确认。离线模拟结果不能替代生产影子期、真实 API 或双数据库回归证据。
步骤四:渐进式激活 (Active)
在管理后台将模式变更为 active。API 拒绝变更时,错误码区分为:activation_evidence_missing(缺少记录)、activation_evidence_invalid(记录无法解析)、activation_evidence_mismatch(模型不匹配)或 activation_gate_failed(门槛未满足)。
3. 密钥管理与轮换
Jev API Key 使用系统主密钥进行 AES-GCM 封装加密存储(绑定 AAD reposentinel:jev_api_key):
- 密钥轮换:执行 CLI 轮换命令:bash按 主密钥轮换流程 先停止服务,并设置当前与上一把主密钥,再执行该命令。它会重新加密数据库中的 Jev API Key 信封,不会更换上游 API Key,也不会更新持久化的
reposentinel secret rotate-keys --config configs/reposentinel.yamlcredential_generation。 - 缓存失效机制:决策缓存为进程内缓存;重启后为空。通过管理后台保存配置时会重建客户端及缓存。CLI 重加密数据库不会清除仍在运行的服务进程中的缓存。
4. 故障隔离与断路器机制
限流与自适应退避 (429 / 529)
当 Jev 上游返回 HTTP 429 或 529 时:
- 客户端解析
Retry-After头(支持秒数或 HTTP-Date)。 - 在退避时间窗口内,后续需要远程判定的请求快速失败。当前请求可在剩余预算允许时退避并重试一次(
retries: 1,默认值);预算不足或禁用重试时返回ErrRateLimited。 Retry-After达到 15 秒时同时触发断路器,冷却期采用该退避时长。通知回退到静态规则,PR 门控回退到深度审查;ChatOps 高危操作在active模式下需明确放行,否则拒绝执行。
断路器熔断与自愈 (5xx & 网络中断)
- 熔断阈值:任一决策面在连续遭遇 5 次上游真正失败(5xx、网络中断、畸形响应)后,断路器进入
Open状态。 - 快速降级:
Open期间请求瞬间短路并计入reposentinel_jev_fallbacks_total。 - 半开探测:30 秒冷却后,断路器进入
Half-Open状态,仅放行 1 个探测请求;探测成功即恢复Closed,探测失败则重置 30 秒冷却。 - 决策面隔离:
notification、review与chatops拥有相互独立的断路器和并发槽位。例如 review 面触发熔断不会影响 notification 通知的准时投递。
5. 应急临时降级 (Emergency Advisory)
当 Jev 出现未预期的上游异常或决策偏差,而运维人员需要快速临时旁路时,可通过管理后台启用应急顾问降级:
- 最大有效期:单次最多 15 分钟(
now < until <= now + 15m)。 - 强制填写原因:提交必须附带非空操作原因(
emergency_advisory_reason),系统全程计入安全审计日志。 - 降级行为:降级窗口仅影响 ChatOps 护栏:Jev 判定改为仅记录、不拦截,原有鉴权与单次令牌检查仍生效。通知降噪与 PR 审查门控不受该窗口影响;如需三个决策面均只观察,请将模式改为
shadow。 - 自动恢复:截止后,ChatOps 按当前配置模式恢复护栏判定;系统重启会继承尚未过期的截止时间。
6. 特殊场景操作指南
ChatOps 操作令牌释放失败
- ChatOps 使用持久化的单次操作令牌;Jev 护栏请求不缓存、不合并。
- 护栏不可用时,系统尝试释放已领取的令牌以允许重试。若释放失败,该令牌仍保持已消费状态,应重新生成操作。令牌在消费时检查到期时间;未指定 TTL 时默认为 15 分钟。当前未提供管理后台强制废弃入口。
强制深度审查 (force_deep_review)
- 对于被 Jev 级联门控判为跳过的 Pull Request,开发或评审人员可在 PR 详情卡片中点击「⚡ 强制深度审查」。
- 强制审查会绕过 Jev 判别结果,直接调度配置的大模型执行逐行深度审查。
总开关彻底关闭与平滑回退
若需彻底停用 Jev:
- 在管理后台关闭 启用 Jev 决策引擎(
enabled: false);mode仅支持shadow/active,不接受off。 - 保存后,新请求不再使用 Jev;已有在途请求仍按原上下文和超时预算结束。
- 数据库保留配置字段,通知使用静态规则,PR 恢复常规深度审查流程,ChatOps 保留原有鉴权与令牌检查。