[提案] PRISM:面向 vLLM-SR 模型选择的 153 键合法性层
Issue: #1422
作者: Mossaab Souaissa — MSIA Systems
里程碑: v0.3 — Themis
参考: https://doi.org/10.5281/zenodo.18750029
白皮书: https://github.com/user-attachments/files/25750911/PRISM-Vllm-SR-whitepaper-COMPLET-EN.pdf
1. 背景与动机
vLLM-SR 回答:哪个模型最适合该请求?
PRISM 回答:所选模型是否有资格回答这一具体查询?
二者互补,而非重复。
「撒谎模型」问题
若无结构约束,任意模型都可回答任意查询——即便超出训练领域。这会产生自信幻觉:模型在不擅长的领域仍以高置信度即兴作答。
当前 vLLM-SR 流水线在模型选定后没有合法性校验。PRISM 在不修改既有路由逻辑的前提下增加该层。
设计原则:增量扩展、不破坏兼容
PRISM 作为现有组件的可选扩展集成:
- 若某模型配置中无
prism.enabled→ 行为不变 - 若决策中无
type: "prism-execution"插件块 → 跳过 Key 3 - 若请求时尚未就绪 PRISM 注册表 → 回退到
"general"→ 标准 vLLM-SR 路由
| PRISM 组件 | 集成点 | 类型 |
|---|---|---|
| Key 1 — QUALIFICATION | config.yaml 中的 model_config | prism.enabled: true + 启动时自动发现 |
| Key 2 — CLASSIFICATION | req_filter_classification.go | 新求值块 — 进程内 candle-binding |
| Key 3 — EXECUTION | req_filter_prism_execution.go | 新 ExtProc 过滤器 — 沿用 req_filter_jailbreak.go 模式 |
| 153-Registry | pkg/registry/prism_registry.go | 内存存储,启动时异步填充 Key 1 |
本 PR 范围:仅 hybrid 模式(Key 1 + Key 2 + Key 3)。fine_filter 与 coarse_filter 见第 9 节,为后续变体。
2. 架构概览
(ASCII 流程图与英文版一致,见英文 docs/proposals/Prism-153key.md。)
要点:PHASE 1 增加 runPrismClassification();PHASE 3 增加 filterCandidatesByPrism() 与重路由循环;PHASE 4 增加 runPrismExecution()。启动时 NewPrismRegistry 后台执行 qualifyAllModels(),就绪前 Key 2 将域置为 "general"。
3. Key 1 — QUALIFICATION(启动时异步自动发现)
3.1 原则
运维人员仅在 model_config 中声明 prism.enabled: true。
NewPrismRegistry() 在后台 goroutine 中对每个启用模型发送 Key 1 资格提示词,解析 JSON 自声明并写入 153-Registry。路由器立即启动;goroutine 完成后 PRISM 才对后续请求生效。
初始化期间:IsReady() 为 false → runPrismClassification() 置 ctx.PrismDomain = "general" → 无 PRISM 的标准路由。
3.2 config.yaml — 最小人类声明
(YAML 示例与英文版相同。)
3.3 Key 1 资格提示词
(英文提示词正文与英文版相同,用于与模型交互。)
HTTP 调用: POST http://{VLLMEndpoint.Address}:{VLLMEndpoint.Port}/v1/chat/completions
鉴权: Authorization: Bearer {ModelParams.AccessKey}(若设置 AccessKey)
超时: 每模型 30 秒
失败或 domain 为 "general"/"unknown": 该模型不进入注册表并打警告日志。
3.4 Go 结构体
(PrismModelConfig、PrismThresholds、PrismConfig 等定义与英文版代码块一致。)