Sunday 的面试指南

Prompt 为什么也要做版本管理?线上出错怎么回滚?

🧑‍💻 面试官:Prompt 不就是几段文字吗?为什么还要做版本管理?

🙋‍♂️ 我:因为它会影响模型怎么回答,改动以后需要测试,也需要知道出了问题能退回哪一版。

🧑‍💻 面试官:我已经把提示词放到 Git 里了,这还不够?

🙋‍♂️ 我:还要知道线上实际加载的是哪一次提交,以及当时配合使用的模型和工具配置。

🧑‍💻 面试官:一个 Agent 任务已经执行了三轮,你把线上 Prompt 切回旧版。它下一轮继续用哪一版?所有服务器会同时切过去吗?

Prompt 版本管理不只是保存历史文字,更要把“一次任务实际用了什么”记录清楚,否则看得见改动,也未必能重现和回滚行为。

面试速答(60 秒版)

Prompt 会影响模型的任务处理、输出格式和工具选择,因此应该像其他程序配置一样管理版本。

修改时保留旧内容,形成一个可以准确定位的新版本,再用固定样本和历史错误问题比较效果。测试通过以后,才把生产环境切到新版本,而不是直接覆盖线上文字。

每次任务还应记录实际使用的 Prompt 版本,以及模型、工具定义和应用版本等相关配置。对于多轮 Agent 任务,可以在开始时确定一套配置,避免中途悄悄混用新旧规则。

回滚时,把后续请求切回已经验证的版本,同时检查客户端缓存和正在执行的任务。只退提示词,不一定能解决配套解析器已经改变的问题,也不会撤回已经发生的业务操作。

面试速答总览:Prompt 草稿先评测,保留固定版本,再调整生产标签,任务记录实际版本

知识点详解:文字只改了一行,页面为什么就坏了?

Prompt 也在决定程序之间怎样配合

假设咱们的客服助手要求模型返回一个 JSON 对象,其中 answer 字段保存给用户看的内容。前端一直读取这个字段,展示在聊天窗口里。

有人调整提示词,把输出字段改成了 reply。单独在调试页面看,模型仍然回答得挺好;接回旧前端以后,页面却读不到内容了。

这里没改应用代码,程序行为照样变了。提示词一旦参与规定输出格式,就已经和后面的解析逻辑产生了关系。

所以,版本管理要回答的第一个问题不是“文件放在哪里”,而是:改动会影响谁,怎样确认这些配合没有被破坏。

除了格式,还可能改变工具选择、拒答条件、回答详细程度。检查时不能只挑几个看起来顺眼的回答,要覆盖原来容易出错的情况。

固定版本和生产标签,各有什么用?

可以把每次经过保存的内容看成一个固定版本,例如 v7、v8。版本确定后不在原地偷偷修改,有变化就再建新版本。

生产环境则可以通过一个标签,例如 production,决定目前使用哪一版。

这样,v8 表示一份具体内容,production 表示当前选择。标签可以从 v7 移到 v8,但 v7 本身仍然保留,出问题时也有东西可以退回。

Langfuse 的 Prompt 版本管理支持按版本或标签获取内容,也支持通过调整生产标签回滚。LangSmith 的管理文档同样区分了提交版本与指向提交的标签。

这不是要求每个项目都搭建一个专门平台。Prompt 放在 Git 中、跟随应用一起发布,也可以做到版本管理。关键是不要让“文件有历史”和“线上用了哪版”脱节。

一个任务应该记下哪些信息?

只记“使用客服提示词”太模糊;只记“使用 production”也不够,因为这个标签以后会移动。

至少应该保存当时解析到的具体版本。如果一次任务包含多个提示词,就记录实际使用的各个版本。

同时把相关配置关联起来:模型标识与参数、工具 Schema、应用或解析器版本;使用 RAG 时,还可以记录实际取到的文档版本和引用。这些信息帮助我们判断,错误是否真由提示词变化引起。

例如,同一版 Prompt,模型换了,答案也可能变化。如果日志里只记录 Prompt 版本,就很容易把问题找错地方。

这里也要注意数据范围。为了追踪,不代表必须把用户的全部隐私原文永久写进日志。可以记录必要的版本、配置和经过脱敏的样本,访问原始内容则按权限及保留规则处理。

对于长任务,可以由应用在任务开始时解析发布配置,并把具体版本绑定到任务。后面几轮继续使用这套配置。这个“固定任务版本”的做法需要应用实现,不是换一个管理平台就自动具备。

真要回滚,怎么判断退成功了?

还是前面的例子。假设 v8 把字段改成 reply,导致旧前端无法读取,那么退回 v7 以后,新请求应该再次得到符合旧约定的结果。

但如果前端也已经升级为只读 reply,单独退 Prompt 反而又会制造不匹配。因此,应确认哪些配置必须一起回退,或者先提供兼容期,让两种字段都能被正确处理。

另外,多个服务实例可能缓存了 Prompt。生产标签已经改了,不等于各实例立刻使用新指向。需要了解缓存刷新规则,并通过日志检查实际解析到的版本,而不是只看管理页面显示“回滚成功”。

已经执行中的任务则单独处理。若只是措辞变化,可以让旧任务按原版本收尾;如果新版本存在安全问题,就要停止相关任务并检查已经发生的动作,不能等它们自然跑完。

验收时,除了新版本评测,也做一次回滚演练:启动一个任务,切换版本,再启动另一个任务,检查两者分别使用什么配置,以及旧任务恢复时会不会混入新规则。

生产标签从 v8 回到 v7 后,新任务使用 v7,已绑定 v8 的任务需要单独处理,并核对缓存实际版本

面试官继续追问

开发阶段直接读取 latest,可以吗?

开发时方便试验可以,但生产环境不宜把“最新保存的一版”自动当成“已经批准的一版”。

有人刚存了半成品,也可能成为 latest。使用明确发布的版本或生产标签,能把编辑动作和上线动作分开。

固定 Prompt 和模型配置,能完全复现答案吗?

不能保证。采样、模型服务内部变化和执行环境,都可能影响输出。

版本记录的作用,是尽量还原当时的输入条件和系统组合,方便排查,而不是承诺每次生成逐字相同。涉及外部工具时,还应保存必要的返回结果或可追溯记录。

只是改一个错别字,也要跑全部评测吗?

测试范围可以按改动风险分层,不必所有改动都走同样重的流程。

但看似修措辞,也可能改变条件含义。至少检查差异,运行关键回归样本。涉及格式、权限提示和工具选择的改动,再补对应测试,不能只凭“改动很短”判断风险低。

面试速记卡

  • 管理对象:Prompt 会改变行为,不能只当一段展示文字。
  • 固定版本:保存具体内容;生产标签:指向当前批准版本。
  • 任务记录:保存实际版本,不只保存会变化的标签。
  • 回滚范围:同时考虑模型、解析器、工具定义、缓存和在途任务。
  • 验证方式:发布前比较固定样本,发布后核对实际版本并演练回滚。
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历