Skip to content
🔗 分享本题
查看我的学习进度 →

Prompt 模板、变量契约和模型配置经测试注册、粘性实验、灰度发布与自动回滚图

🧠 记忆锚点:Prompt 是“模板 + 变量契约 + 模型配置”的可测试制品;请求必须记录版本,实验要粘性分流,异常可自动回滚。

💡 答案要点

为什么 Prompt 需要专门管理?

Prompt 是 LLM 应用的"代码"——改一行可能导致:
- 输出格式全部变化 → 下游解析挂掉
- 幻觉率上升 → 用户投诉激增
- Token 消耗增加 → 成本暴涨

所以 Prompt 必须像代码一样:版本化、可回滚、可灰度。

完整 Prompt 管理方案:

1. 版本化存储

yaml
# prompts/rag_answer/v2.1.0.yaml
name: rag_answer
version: v2.1.0
description: "RAG 问答核心 Prompt,增加无答案时明确拒绝"
author: xiaogaiguo
created_at: 2026-07-02

content: |
  你是一个专业的企业知识库助手。请严格基于以下检索内容回答问题。

  规则:
  1. 只能使用检索内容中有明确依据的信息
  2. 如果检索内容无法回答问题,直接说"根据现有资料无法回答",不要编造
  3. 关键数据(数字、日期、名称)必须与原文完全一致
  4. 回答末尾标注引用来源

  检索内容:
  {{context}}

  问题:{{question}}

metrics:
  faithfulness: 0.93     # RAGAS 评估值
  hallucin_rate: 0.02    # 幻觉率
  avg_tokens: 450        # 平均 token 消耗

2. A/B 测试框架

go
type PromptABConfig struct {
    ExperimentID string
    ControlID    string  // 对照组:v2.0.0
    TreatmentID  string  // 实验组:v2.1.0
    TrafficRatio float64 // 实验组流量比例:0.1 = 10%
}

func selectPrompt(userID string, cfg PromptABConfig) string {
    // 稳定哈希分流(同一用户始终进同一组)
    h := fnv.New32a()
    h.Write([]byte(userID + cfg.ExperimentID))
    bucket := h.Sum32() % 100

    if float64(bucket) < cfg.TrafficRatio*100 {
        // 记录实验组分配
        trackExperiment(userID, cfg.ExperimentID, "treatment")
        return getPrompt(cfg.TreatmentID)
    }
    trackExperiment(userID, cfg.ExperimentID, "control")
    return getPrompt(cfg.ControlID)
}

3. 灰度发布流程

新 Prompt 上线流程:
1. 开发 → 本地用 RAGAS 跑评估集(>100 个问题)
2. 对比指标:Faithfulness / 幻觉率 / Token 消耗
3. 指标全部优于当前版本 → 上灰度 (5% 流量)
4. 灰度 24 小时无异常 → 扩到 50%
5. 全量后保留旧版本 7 天(方便回滚)

4. 快速回滚

go
// 一键回滚:数据库更新 + 内存缓存失效
func rollbackPrompt(name string, targetVersion string) error {
    if err := db.UpdateActiveVersion(name, targetVersion); err != nil {
        return err
    }
    cache.Delete("prompt:" + name + ":active") // 清缓存,下次请求自动加载旧版
    log.Infof("Prompt %s rolled back to %s", name, targetVersion)
    return nil
}

工具选型:

工具适用场景
Langfuse开源自托管,Prompt 版本 + Trace 调试一体
PromptLayerSaaS,快速接入,适合小团队
Git + YAML最轻量,代码化管理,CI 集成评估
自研企业级合规要求,数据不出内网

面试话术:

示例表达(仅在能用本人经历或可复现实验佐证时使用): "Prompt 在生产环境必须像代码一样管理。我们用 Langfuse 做 Prompt 版本管理:每个版本有 YAML 描述 + RAGAS 评估指标,上线前必须跑评估集,Faithfulness 低于 0.90 的版本不允许上线。灰度策略是稳定哈希分流,保证同一用户始终在同一组,避免体验跳变。最关键的是回滚机制——数据库更新 + 清缓存两步,30 秒内完成回滚,遇到线上幻觉率异常可以立即止损。"

📚 参考:LangSmith:Prompt Hub(版本管理与发布)