Prompt 也是代码:如何构建符合审计要求的提示词版本控制与 CI/CD 体系

Kenneth Jian
2025-12-09
← 返回列表
# Prompt 也是代码:如何构建符合审计要求的提示词版本控制与 CI/CD 体系 **发布日期:** 2025年12月 | **作者:** 明见万川 AI 工程团队 | **分类:** AI 工程化, DevOps > **摘要**: > 很多团队的 Prompt 管理现状依然停留在“石器时代”:散落在飞书文档、Notion 甚至聊天记录中。当线上模型突然出现“降智”或幻觉时,甚至没人知道是谁在什么时候改了哪句话。本文将“基础设施即代码 (IaC)”的理念引入 AI 领域,提出 **Prompt as Code** 的工程化实践指南。 --- ## 一、 为什么 Prompt 不能存数据库? 在早期的 AI Demo 开发中,开发者喜欢把 Prompt 作为一个字符串硬编码在 Python 代码里,或者存在 MySQL 数据库的一个字段中。但在企业级应用(如 MJMatrix 的 GEO 系统)中,这种做法是灾难性的: 1. **无法做 Diff**:数据库里的长文本很难直观对比出“版本 A 和版本 B 到底改了哪个形容词”。 2. **丧失上下文**:为什么要把 *temperature* 从 0.7 改成 0.2?如果没有 Git Commit Message,这个决策逻辑就丢失了。 3. **缺乏回归测试**:改了 Prompt 确实修复了 Bug A,但会不会导致之前的 Bug B 复发?没有 CI 流水线,这就是一场赌博。 **结论**:Prompt 必须被视为 **源代码**,存储在 Git 仓库中,而不是数据库里。 --- ## 二、 架构设计:Prompt as Code (PaC) 我们推荐采用 **"Prompt 仓库 + 注册中心"** 的架构模式。 ### 2.1 目录结构规范 将 Prompt 从业务代码中剥离,存放在独立的 `prompts/` 目录下,采用 YAML 或 JSON 格式以便于机器解析。 ```yaml # prompts/customer-service/refund-policy.v1.yaml metadata: name: "refund-handler" version: "1.2.0" author: "jian.dev" description: "处理退款请求,增加了对 VIP 用户的安抚策略" parameters: - user_level - order_id model: name: "gpt-4-turbo" temperature: 0.3 template: | 你是一个专业的电商客服。 用户等级:{{user_level}} 当前订单:{{order_id}} 请根据以下退款政策回复用户... ``` ### 2.2 版本策略 (Semantic Versioning) 严禁使用 `latest` 标签。生产环境的每一次调用,都必须指向一个确定的版本号(Immutable Artifacts)。 * **v1.0.0**: 初始上线 * **v1.0.1**: 修复错别字(Patch) * **v1.1.0**: 调整 Prompt 逻辑,导致输出风格变化(Minor) * **v2.0.0**: 更换底层大模型(Major,如从 GPT-3.5 升到 GPT-4) --- ## 三、 核心实战:构建 Prompt CI/CD 流水线 当开发者提交一个新的 Prompt 版本到 GitHub 时,不应直接上线,而应触发一条自动化流水线。 ### 阶段 1:静态检查 (Linting) 检查变量是否匹配、格式是否合法。 * *工具推荐*:自定义 ESLint 规则或 Python 脚本。 * *检查点*:模板里的 `{{username}}` 是否在参数列表中定义了? ### 阶段 2:自动化评估 (Evaluation / Testing) 这是最关键的一步。我们需要定义一个**“黄金数据集” (Golden Dataset)**,包含 50-100 个典型的用户输入及其期望输出。 **使用 Promptfoo 进行测试配置示例:** ```yaml # promptfooconfig.yaml prompts: [file://prompts/refund-policy.v1.yaml] providers: [openai:gpt-4] tests: - description: "测试 VIP 用户退款" vars: user_level: "VIP" order_id: "ORD-999" assert: - type: icontains value: "尊贵的 VIP 会员" - type: cost threshold: 0.05 # 单次调用成本不超过 0.05 美元 - type: llm-rubric value: "回复语气是否足够礼貌且通过了退款流程?" ``` ### 阶段 3:金丝雀发布 (Canary Deployment) 测试通过后,新版 Prompt 不会立即全量替换旧版。 1. **部署**:系统将 1% 的流量路由到 v1.2.0 版本。 2. **观测**:通过 OpenTelemetry 监控这 1% 流量的用户点赞率和回复延迟。 3. **扩量**:如果指标平稳,逐步扩量至 100%。 --- ## 四、 审计与合规 (Audit Trails) 在《生成式 AI 暂行办法》下,**可追溯性**是硬指标。 ### 4.1 提交记录即凭证 由于我们使用了 Git,每一次 Prompt 的变更都有据可查: * **Who**: 谁修改了?(Git Author) * **When**: 什么时候?(Commit Timestamp) * **Why**: 为什么改?(Commit Message + Pull Request 讨论记录) * **Approval**: 谁审批的?(GitHub PR Reviewer,通常需要 Legal 或 Tech Lead 批准) ### 4.2 数据库快照 在运行时,我们会在数据库的 `ChatLog` 表中记录当时使用的 **Prompt Version Hash**。 ```sql -- 即使 Prompt 文件改了,我们也能知道上个月的那条违规回复是用哪个版本的 Prompt 生成的 SELECT * FROM chat_logs WHERE prompt_version_hash = 'a1b2c3d4'; ``` --- ## 五、 MJMatrix 的展望 Prompt Engineering 正在消亡,**AI Engineering** 正在崛起。 手写 Prompt 是一种艺术,但管理 Prompt 必须是一门工程。通过构建基于 Git 的版本控制和 CI/CD 体系,我们将偶然的“灵光一现”变成了可重复、可预测、可审计的工业级能力。这是 MJMatrix 能够为客户提供稳定 GEO 服务的底气所在。
Kenneth Jian

Kenneth Jian

创始人 / 首席架构师

10年全栈开发经验,专注于 AI Agent 架构设计与 GEO 优化。

查看作者专栏 →