Prompt Registry 在 LLMOps 中解决什么问题?
简化版
Prompt Registry 把 Prompt 从散落在代码和配置里的字符串,变成可版本化、可评测、可审批、可灰度和可回滚的生产资产。它保存不可变内容版本、变量 Schema、适用模型、所有者、评测结果、发布阶段和血缘。
运行时只引用 prompt_version,渲染前校验变量类型与权限;发布时绑定模型、索引和策略形成 Release Manifest。Registry 不应存放密钥,敏感变量只在请求时从授权上下文注入,并在日志中脱敏。
详细版
没有注册表时,Prompt 修改难追踪,线上日志无法复现,团队会复制出多个“最新版”。Registry 提供草稿、评审、批准、Canary、生产、弃用等状态,并禁止覆盖已发布版本。
author -> lint/schema -> offline eval -> review -> immutable version
-> canary -> production alias -> observe -> rollback/deprecate
| 能力 | 解决的问题 |
|---|---|
| 不可变版本 | 结果可复现、可回滚 |
| 变量 Schema | 防缺参、注入和类型错误 |
| 模型兼容性 | 防模板/Tokenizer 不匹配 |
| 评测关联 | 发布有证据 |
| 权限审批 | 高风险 Prompt 受控变更 |
| 血缘 | 知道版本被哪些发布使用 |
完整版教学
1. Prompt 为什么是生产资产
Prompt 决定角色、输出格式、工具选择和安全边界,改一个词都可能影响质量与风险。它和代码一样需要版本、测试和发布流程。
把 Prompt 当临时文案,会造成不可复现的线上差异和无法审计的热修改。
2. Registry 保存哪些对象
保存模板正文、变量 Schema、模型/Tokenizer 兼容范围、语言、所有者、标签、父版本、状态和内容哈希。
评测结果、审批、发布时间、回滚记录和依赖关系作为元数据关联,不能只存字符串。
模板与元数据分离但共享同一不可变版本;正文变更、变量 Schema 变更或兼容范围变更都要生成新版本。这样调用方才能仅凭版本 ID 得到唯一且完整的执行定义。
3. 为什么版本必须不可变
已发布 prompt-v12 的内容被修改后,历史 Trace 仍写 v12 却无法重现。正确做法是创建 v13,并保留父子关系。
prompt_id: support-answer
versions : v11 -> v12 -> v13
aliases : production -> v12, canary -> v13
别名可变,具体版本不可变。
4. 变量 Schema 如何设计
每个占位符声明类型、是否必填、长度、来源和是否敏感。渲染时拒绝未知变量与缺失值,并对用户内容使用明确的数据边界。
| 变量 | 来源 | 约束 | 日志 |
|---|---|---|---|
| user_query | 用户 | 长度/内容检查 | 脱敏 |
| documents | 检索 | 权限过滤、数量上限 | 仅 ID |
| locale | 服务端 | 枚举 | 可记录 |
| tool_token | 密钥系统 | 禁止模板持久化 | 禁止记录 |
不要用字符串拼接让用户内容改变 System 层级。
5. 模型兼容性为何要记录
不同模型使用不同聊天模板、特殊 Token、工具格式和上下文长度。一个 Prompt 在模型 A 可用,不代表直接迁移到模型 B。
Registry 声明已验证模型和模板版本;未验证组合必须经过兼容测试,不能靠运行时侥幸。
6. 如何做静态检查
检查未闭合变量、未使用变量、Token 预算、禁止词、工具 Schema 引用和潜在指令层级错误。渲染样例确保不同语言与空值路径正常。
静态检查发现结构问题,但不能证明回答质量,仍需运行评测集。
7. 评测怎样绑定 Prompt
每次评测记录 Prompt 内容哈希、模型、数据集快照、解码配置和评测器版本。结果作为发布证据关联该确切版本。
若评测后又修改模板,旧结果不能继承。高风险变更要求安全红队和人工抽检。
8. 审批与权限怎么分层
作者可创建草稿,评审者批准,发布者切换环境别名;关键安全 Prompt 可要求双人审批。生产直接编辑被禁止。
紧急修改有临时通道,但需绑定事故、自动过期、保留审计并补做完整评测。
9. 如何灰度和回滚
发布系统按稳定用户/会话哈希把小流量指向候选版本,指标按 prompt_version 分组。会话内保持一致,避免语气与工具行为漂移。
回滚只需把生产别名切回旧版本,但还要确保模型、索引和策略组合兼容,因此通常由完整 Release Manifest 驱动。
10. 多语言与分支怎么管理
语言版本可以共享 prompt_id 下的 locale 变体,也可独立版本,但要明确继承与覆盖规则。复制后各自修改容易产生政策漂移。
安全规则尽量由中央策略层提供,语言模板引用同一策略版本,并分别做本地化评测。
11. Prompt 与密钥怎样隔离
模板只声明需要某类凭证,不保存实际 Secret。运行时工具执行器根据可信身份从 Vault 获取短期凭证,模型不可见原值。
Registry 的预览、导出和日志也要脱敏,防止开发者误把真实 Token 写进 Few-shot 示例。
12. 血缘和影响分析
记录哪些应用、实验和 Release 使用某 Prompt,及其引用哪些工具/策略。发现问题后可查询影响范围并停止所有相关别名。
弃用版本先停止新引用,再等待长会话排空;删除需遵循审计保留策略,不能破坏历史复现。
13. 如何监控 Registry
监控未评测发布、过期审批、生产漂移、渲染失败、未知版本和直接绕过 Registry 的调用。定期扫描代码中的硬编码 Prompt。
生产 Trace 中记录实际内容哈希,与 Registry 对比可发现配置缓存或发布系统未正确更新。
14. 如何验收
演练创建、评测、审批、Canary、回滚和弃用;验证旧 Trace 能重建,缺失变量被拒绝,敏感变量不入日志。
模拟模型切换和安全规则更新,确认不兼容版本无法发布,影响分析能找到全部消费者。
Prompt Registry 的核心不是保存文本,而是把行为配置纳入和代码同等级的可控发布生命周期。
15. 常见误区与追问
- 误区:把 Prompt 放 Git 就等于 Registry。 还缺运行时解析、评测、审批、别名和血缘。
- 误区:生产版本可以原地热改。 会破坏复现和回滚。
- 误区:Prompt 与模型无关。 Chat Template、工具格式和上下文能力会影响兼容。
- 误区:变量只是普通字符串替换。 需要类型、来源、边界和敏感等级。
- 误区:密钥可以作为模板变量持久化。 Secret 应在执行器侧按身份动态获取。
- 追问:如何快速回滚? 切换生产别名到已验证旧版本,并由 Release 校验依赖。
- 追问:如何发现绕过 Registry? 对比生产内容哈希并扫描代码硬编码。
16. 加强记忆
- 先把 Prompt 当资产:版本、所有者、状态和哈希。
- 再管变量:Schema、来源、类型、权限和脱敏。
- 再管兼容:模型、Tokenizer、工具格式和 Token 预算。
- 再绑评测:版本与数据/评测器一一对应。
- 再走发布:审批、Canary、别名切换和回滚。
- 再做血缘:消费者、策略、工具和 Release 可反查。
- 最后守边界:不可原地改,绝不持久化密钥。