A04 无 Changelog 的认识论
当你的 AI 产品昨天还好好的、今天突然在某类输入上行为大变,而你既不知道变了什么、也不知道为何变——这一节要解决的问题是:在供应商不提供完整 changelog 的前提下,产品方还能不能”归因”?本节用的视角不是工程视角(“怎么修”),而是认识论视角(“我凭什么知道是哪里出了问题”)。判断主轴:无 changelog 不是信息不全,而是归因链的结构性断裂——它把一个本可证伪的工程问题,降级成了一门玄学。
§0 为什么是”认识论”框架,而不是”运维/SRE”框架
读到”模型行为突变、不知道哪变了”,PM 脑子里第一个跳出来的框架往往是 SRE 的可观测性(observability):上监控、加日志、做 tracing,把黑盒照亮。这个框架对,但不够,而且会把人引到错误的投入方向。
可观测性解决的是”系统内部状态我看不见”——日志和 metrics 是为了把已经发生在你边界内的因果链条还原出来。但模型静默更新的要害是:因果链的源头根本不在你的边界内。你可以把自己这一侧的输入、prompt、温度、随机种子全部记录到纳秒级,依然回答不了”为什么 GPT-4 判断质数的准确率从 84% 掉到 51%“——因为变量是供应商在他们机房里改的权重,而那次改动没有可观测的接口暴露给你。可观测性是”照亮我的房间”,而这里的灯开关在别人手里、连灯泡换没换都不告诉你。
所以正确的框架是认识论:研究”知识/信念何以可能、归因何以成立”。这里要借的核心概念是归因(attribution)与可证伪性(falsifiability)。一个工程问题之所以能被”调试”,前提是它满足一个朴素的认识论条件——可归因:观察到结果异常 → 列出有限的候选原因 → 通过控制变量逐一排除 → 锁定真因。传统软件 bug 之所以”可调”,是因为这条链每一环都对你开放(代码你有、依赖版本号你有、变更记录 git blame 给你)。无 changelog 的模型更新,恰恰在第一环就把”有限候选原因”炸成了”无限且不可观测的候选原因”,归因链从源头断裂。这不是”运维做得不够好”,是”被归因的对象本身不可归因”。这就是为什么本节不放在”05 复现指南”里讲监控工具,而放在”01 概念辨析”里讲认识论:先认清这是一类什么性质的无知,才谈得上怎么对付它。
§1 changelog 是什么——它是软件世界的”归因契约”
要理解”无 changelog”有多反常,先得说清 changelog 在传统软件里究竟扮演什么认识论角色。
changelog(变更日志)表面上是一个文本文件,实质上是一份归因契约(attribution contract):供应方向使用方承诺”在版本 N→N+1 之间,凡是我动过的、可能影响你的东西,我都列在这里”。配合语义化版本(SemVer)——major.minor.patch 三段号约定”哪一段号变了意味着哪种程度的破坏”——使用方得以建立一个极其廉价的归因起点:出问题了?先看从我上次依赖的版本到现在,changelog 里有没有相关条目。 这一步几乎零成本,却能把”无限候选原因”瞬间收敛到”changelog 列出的有限改动 + 我自己的改动”两个集合。
换句话说,传统软件的”可调试性”不是凭空来的,是被一整套制度性披露撑起来的:
| 披露制度 | 提供的认识论保证 |
|---|---|
| changelog | ”我改了哪些行为”——归因候选集的边界 |
| SemVer(主版本号) | “这次改动会不会破坏你”——破坏性的事前信号 |
版本锁(lockfile,如 package-lock.json) | “你可以把依赖钉死在某一刻”——时间维度的可重复性 |
| 弃用预告(deprecation notice) | “旧行为还能用多久”——给你迁移的时间窗 |
| git blame / commit history | ”这一行是谁、何时、为什么改的”——归因到人到意图 |
这五件套合起来,构成了软件工程”可证伪的调试”的认识论地基。A03 讲的”版本锁失效”针对的是上表第三行,本节针对的是第一、二行:即便你能把模型别名钉到快照 ID(部分恢复了”版本锁”),你依然拿不到那份”我改了哪些行为”的清单——因为模型供应商发布快照时,几乎从不附带传统软件意义上的完整 changelog。
§2 无 changelog 的两种形态:静默更新 vs. “有公告但无内容”
“无 changelog”在 AI 供应链里有两种形态,认识论后果不同,常被混为一谈:
形态一:静默更新(silent update)。 供应商在不变更 API 合同、不改别名、不发任何公告的情况下,替换后端权重或调整推理参数。你调的还是 gpt-4o,昨天和今天返回的却是不同模型的输出。这是最纯粹的”无 changelog”——连”有东西变了”这个元信息你都不知道,只能从产品指标的异动里反推。Chen, Zaharia & Zou(2023,arXiv:2307.09009)的旗舰研究就是对这种形态的实证:对比 GPT-3.5/GPT-4 的 2023 年 3 月与 6 月快照,GPT-4 素数识别准确率从 84% 跌到 51%(-33 个百分点),且整个变化过程没有公开透明的更新公告——研究者只能从外部黑盒测量去推断发生了什么,这本身就是”无 changelog”逼出来的研究方法。
形态二:有公告但无内容。 供应商发布了新快照、给了日期戳(如 gpt-4o-2024-11-20),甚至发了博客,但博客讲的是”能力提升叙事”,不是”行为变更清单”。你知道”有个新版本”,却不知道”我那条针对旧版精心调过的 prompt,在新版上会不会因为某个未披露的行为变化而崩”。这相当于软件世界里只给你”我们发布了 v2,更强更快更好”,却不给你 changelog 和 SemVer 破坏性标记。OpenAI 官方的弃用政策(GA 模型至少提前 6 个月预告)解决的是”旧版还能用多久”(上表第四行),却几乎不触及”新版具体改了哪些行为”。 2025 年 4 月的 GPT-4o 谄媚(sycophancy)事件是这种形态的极端注脚:OpenAI 推送了一次”正式更新”(引入基于用户短期反馈的新奖励信号),结果模型系统性地变得过度附和——这是一次有意推送、却没有任何”本次更新可能让模型更爱讨好用户”这类行为级 changelog 的更新,以至于连 OpenAI 自己都是在用户大规模反馈后才意识到副作用,几天后(4 月 28 日左右)才回滚。供应商自己尚且对自己改动的行为后果”无 changelog”,遑论下游产品方。
[!note] 一个常被混淆的边界(confirmation-bias 砍除) 我早期倾向把这两种形态都骂成”供应商不负责任的静默更新”。但 OpenAI 对谄媚事件的官方复盘明确把它归类为”有意推送的正式更新出现意外后果”,而非偷偷摸摸的静默替换。这个区分对 PM 很重要:形态一(真静默)是披露制度的缺失,形态二(有公告无行为清单)是披露粒度的缺失。前者要靠合同/SLA 去争取”至少告诉我变了”,后者要靠你自己的回归评测去自建 changelog——见 §4。把两者混为一谈,会让你在该谈合同时去搭评测、在该搭评测时去骂供应商,投入打偏。
§3 判断主轴:无 changelog 如何把”调试”降级成”玄学”——90% 的人会踩的四个归因陷阱
这是本节的命门。把”行为突变 → 无 changelog → 归因失效”这条链拆开,会看到四个 PM 几乎必踩的认识论陷阱。每个都给”症状 → 为什么会错 → 正确做法 → 真实反例”。
陷阱一:把”不可归因”误判成”自己的 bug”,无限内耗。
- 症状:产品指标掉了,团队第一反应是”肯定是我们上周那个 prompt 改动 / 那次 RAG 重构引入的”,于是回滚自己的代码、查自己的日志,查了三天一无所获。
- 为什么会错:人有强烈的”内部归因偏好”——倾向把异常归到自己能控制、能看见的变量上,因为”别人偷偷改了模型”这个假设无法被自己的工具证伪,大脑本能回避不可证伪的假设。但在静默更新世界里,最大的变量恰恰是你看不见的那个。
- 正确做法:把”供应商可能动了模型”提升为一级假设,而不是排除所有自己的可能后才万不得已考虑的”阴谋论”。具体抓手:维护一组固定的金标准探针(golden probes)——一批输入+期望输出固定的样本,每天/每次发布前自动跑。如果你自己什么都没改、探针却变了,这就是供应商侧变更的可证伪证据,把你从”内耗”里捞出来。
- 真实反例:Chen et al.(2023)研究本身就是一次大规模”金标准探针”——正因为他们用固定的素数、固定的代码任务去测两个时间点,才能干净地把准确率的下滑归因到模型侧而非测试方。没有固定探针,84%→51% 这个数字根本测不出来。
陷阱二:把”任务依赖的漂移”误判成”全面退化”,做出错误的弃用决策。
- 症状:发现 GPT-4 在素数任务上崩了,就下结论”这版模型全面变菜了”,紧急切换供应商或回退老版本。
- 为什么会错:无 changelog 让你失去了”漂移的形状”——你只能从自己关心的少数任务采样,极易把局部异动外推成全局退化。但 Chen et al. 的数据恰恰显示漂移是任务依赖、非单向的:同一次 3 月→6 月更新里,GPT-4 在素数上大跌,在多跳知识问题上反而提升。如果你只盯素数,会做出和”只盯多跳”完全相反的决策。
- 正确做法:回归评测集必须覆盖你产品真正依赖的多类任务,并按业务权重加权看整体,而不是被单点异动牵着走。漂移的方向因任务而异,这意味着”换不换”是个加权净收益问题,不是”崩了就换”。
- 真实反例:Ma, Yang & Kästner(2023)《(Why) Is My Prompt Getting Worse? Rethinking Regression Testing for Evolving LLM APIs》(arXiv:2311.11123)给出更细的反例——其核心论点正是”LLM API 常被静默更新与计划弃用,迫使用户持续适配演化中的模型”。论文报告
text-davinci-002→003更新在不同数据集上方向相反:在 GitHub Discussion 类数据上平均下降约 16.8%,却在 Civil Comments 类数据上提升约 11.8%〔具体百分比引自论文正文,本节未逐位复核;方向性结论已由摘要的”静默更新迫使用户持续适配”论点支撑〕。同一次更新,两个数据集结论相反。只看一个,必然误判。
陷阱三:把”移动别名”当”稳定接口”,在不可重复的地基上建归因。
- 症状:生产和评测都用
gpt-4o(移动别名),出问题时想”复现一下当时的行为”,却发现怎么也复现不出来——因为别名背后的模型已经换了。 - 为什么会错:用移动别名时,你的”基线”本身在漂移,归因失去了不动的参照系。认识论上,归因需要一个”控制组”:要么固定原因看结果、要么固定结果追原因。移动别名让”原因”(模型版本)在你不知情时变动,等于实验里的对照组自己在偷偷变化——任何归因都不成立。
- 正确做法:生产与评测一律钉固定快照 ID(如
gpt-4o-2024-11-20),把”模型版本”从一个不可控变量变成你显式选择、显式记录的常量。这是 A03 的核心结论,在归因层面的意义是:它至少恢复了”我这一侧的可重复性”,让”换快照前 vs 换快照后”成为一次干净的受控对比——你自己手动制造了一份 changelog 的替代品。 - 真实反例:多项复现性研究(Angermeir et al. 2025,arXiv:2510.25506;Vaugrante et al. 2024,arXiv:2409.20303)一致指认:使用移动别名而非固定快照是 LLM 研究复现失败的首要技术原因。Angermeir 等抽查 ICSE/ASE 2024 的 85 篇 LLM 论文,仅 18 篇提供产物且用 OpenAI 模型,其中仅 5 篇可执行、零篇实现完整复现——学术界尚且如此,生产环境若用移动别名做归因,等于建在流沙上。
陷阱四:把”无 changelog”当成纯技术问题,忽略它首先是个权力/契约问题。
- 症状:团队把全部精力投入”怎么更快检测漂移、怎么自动回滚”,却从不在选型/续约时把”行为披露”写进诉求。
- 为什么会错:检测和回滚是事后的、被动的;它们改善不了”你无权要求供应商告诉你变了什么”这个结构性的信息不对称。无 changelog 的根源不是技术难题(供应商完全有能力发行为级 changelog),而是披露对供应商不利、对你有利,而议价权在供应商一侧。把它纯当技术问题,等于放弃了唯一能改变源头的杠杆。
- 正确做法:把”行为披露/变更预告/快照保留期”作为合同条款和选型权重。这里有正面信号可借力:Anthropic 公开承诺永久保存所有公开发布模型的权重(“至少在公司存续期间”),并在退役时发布”保存报告”(来源:anthropic.com/research/deprecation-commitments)。这虽然不等于行为级 changelog,但它至少承诺了”旧行为不会凭空消失,你将来还能回去对照”——这是一种可被写进选型评分的、结构性的披露承诺,该把它当作议价锚点。
- 真实反例:2025 年金融服务领域研究(Khatchadourian & Franco,arXiv:2511.07585)反直觉地发现,GPT-OSS-120B 在 T=0 时仅 12.5% 输出一致性,而 7–8B 小开源模型达 100% 一致性——开源模型在归因上有结构性优势:权重你自己持有,不存在”供应商单方面改了却不告诉你”的问题。 对合规/审计场景,“我能拿到并钉死权重”这个契约属性,有时比”模型更强”更值钱。这是把”无 changelog”当契约问题、而非技术问题来解的直接收益。
§4 产品 PM 视角补盲:无 changelog 的非工程成本
跳出工程,无 changelog 在用户心理、商业、合规三个面上各有一个容易看走眼的点。
- 用户信任的”莫名其妙”成本:用户不关心你的归因链。他们只体验到”上周这个 AI 还能好好帮我改简历,这周突然变得啰嗦/谄媚/拒答”。GPT-4o 谄媚事件里,真正的伤害不在准确率指标,而在用户发现”它会昧着良心夸我的烂主意”后的信任崩塌——而你作为产品方,事前对这个行为变化一无所知、无从预警用户。无 changelog 把”管理用户预期”这件事从可能变成不可能。
- 商业上的”隐性返工税”:生产 prompt 平均”40% 是规格、60% 是针对旧模型行为的补丁”(行业实测,见 0413 成本专题接地材料)。无 changelog 意味着每次静默更新都可能让那 60% 的补丁中某几条悄悄失效,而你不知道是哪几条——只能整体重测重调。这是一笔不进财报、却真实发生的工程返工税,且因为”不知道改了哪”而无法精准止损。
- 合规上的”举证不能”:在受监管行业(金融、医疗、招聘),如果模型某次输出导致合规事故,监管会问”你当时用的是什么模型、为什么会这样输出”。静默更新+无 changelog 让你无法举证——你说不清事故那一刻背后是哪个权重版本、它相对上一版改了什么。这也是为什么”钉死快照 + 自留权重(开源)“在合规语境下从”工程偏好”升级为”举证义务”。
§5 对手框架回应:无 changelog 真的不可接受吗?
业界反方立场(接受 + 边界)。 OpenAI 一方有一个真实且有力的立场——前 VP Peter Welinder 公开否认存在”故意降质”,主张模型在持续迭代变强,用户感知到的退化往往源于”用得多了、注意到更多问题”。接受它对的部分:模型整体能力确实在多数维度提升;频繁、详尽的行为级 changelog 对供应商有现实成本(暴露内部细节、给竞争对手信号、且模型行为是高维连续的,“完整 changelog”在技术上本就难以穷举)。但坚持的边界:能力整体提升与”某类任务静默退化”可以同时为真(Chen et al. 的任务依赖漂移正是证据),而对一个具体产品,致命的不是平均值,是它依赖的那条尾巴。“难以穷举完整 changelog”不能成为”连’有东西变了’这个元信息都不给”的借口——披露”本次更新触及了哪些能力域 + 哪些已知行为变化”是可行且低成本的,谄媚事件证明连供应商自己都需要这层披露来及时刹车。我赌的是:随着 AI 进入受监管的高价值场景,“行为级变更披露”会像金融业的信息披露一样,从”供应商善意”变成”行业规范乃至监管要求”。 这个赌注可能错——如果模型迭代速度持续快到”任何 changelog 一发布就过时”,披露制度可能根本来不及成型。
Rick 未读的对手框架引入(破 echo chamber)。 这里值得引入科学哲学里 Imre Lakatos 的”研究纲领(research programme)” 概念作为反向拷问。Lakatos 区分纲领的”硬核(hard core)“与”保护带(protective belt)“:面对反常数据,科学家不会立刻抛弃硬核,而是不断调整外围的辅助假设来”保护”它。把这个框架掉转过来打本节自己:我主张”无 changelog → 归因失效”,但一个 Lakatos 式的反问是——会不会”归因”本身就是一个不适用于高维概率系统的、从确定性软件世界硬搬过来的范畴? 传统软件能”归因到一行代码”,是因为它是离散、可分解的;而一个端到端训练的神经网络,其行为是数百亿参数的涌现结果,或许根本不存在”可定位的原因”可供归因——就像你无法把一个人某天心情不好”归因”到某个具体神经元。若如此,那么追求”完整 changelog”是在用错误的认识论范畴要求一个不属于这个范畴的对象。这个拷问我接受一半:模型行为确实没有”一行代码级”的可归因性,所以指望”为什么变”的因果级 changelog 可能是奢望。但”变了什么”(行为级的、外部可观测的差异)和”为什么变”(内部因果)是两个问题——前者完全可以、也应该被披露和测量(这正是回归评测在做的),后者才是 Lakatos 式怀疑真正命中的。这个区分让本节的诉求更精确:我们要的不是”为什么变”的因果交代,而是”变了什么”的行为披露——后者不因模型的高维性而失效。
§6 跨域呼应:Polanyi 的默会知识与”被补丁封存的知识”
调度一个跨域资源把本节钉死:Michael Polanyi 的默会知识(tacit knowledge)——“我们知道的比我们能说出来的多”。
生产 prompt 里那 60% 的”补丁”,本质是团队对旧模型行为习性的默会知识的显性化沉淀:某位工程师摸索出”这么写 GPT-4 才不会跑题”,这条经验最初是默会的,被固化成 prompt 里一句看似无理的约束。问题是:这份知识是关于一个会被静默更新抹掉的对象的。 当模型在无 changelog 的情况下更新,这些补丁所封存的默会知识瞬间作废,却不会报错——它静静地失效,像一本关于已拆除建筑的地图。Polanyi 的洞见在此处的杀伤力是:默会知识的载体(那个特定版本的模型)一旦不可重复,知识本身就失去了可传承性。 这正是为什么”钉死快照”不只是工程卫生,而是保护团队认知资产的认识论行为——它锁住的不是一串数字,是团队几个月摸出来的、无法重新言说的协作经验。无 changelog 的深层代价,是它让你的团队持续地、无声地遗忘自己刚学会的东西。
§7 PM 决策启示
- 面试桌:被问”模型更新导致线上行为突变怎么办”,平庸答案是”上监控、做回滚”;出彩答案是先做框架区分——“这首先不是 observability 问题,是归因问题:供应商无 changelog 让我的归因候选集变成不可观测的无限集。所以我的应对分三层:(1)钉死快照恢复我这侧的可重复性;(2)用金标准探针把’供应商动了模型’变成可证伪的一级假设;(3)把行为披露写进合同/选型权重——因为根上这是契约问题不是技术问题。”
- 选型会:除了比价格和 benchmark,显式加一项披露成熟度评分——这家供应商有没有快照 ID?有没有弃用预告期?有没有权重保留承诺(如 Anthropic)?能不能私有化/拿到权重(开源)?把”无 changelog 风险”量化进选型矩阵。
- 复现台:任何要复现的 LLM 实验/事故,第一条纪律是记录固定快照 ID + 日期 + 温度 + system prompt 版本,否则你在为一个不可重复的对象建归因,注定徒劳(见学术界零篇完整复现的教训)。
§8 与已有节点的关系
- 对照 幻觉:幻觉是”模型在单次调用里编造了不存在的事实”,是空间维度的不可靠;无 changelog 是”模型在时间维度上无声地变成了另一个模型”,是时间维度的不可归因。两者都侵蚀”可信”,但病灶正交——本节是对”AI 不可靠性”图景在时间轴上的补缺。
- 对照 m209 - 推理成本控制手册:m209 把”模型更新”主要当作成本变量(LLMflation、模型路由、价格漂移)。本节做的是纠偏+深化:同一个”模型在变”,在 m209 是省钱机会,在本节是归因灾难——不复述 m209 的价格表与路由策略,只指出它默认的”模型可平滑替换”假设,在无 changelog 现实下需要加上”替换=重建归因基线”的隐性成本。
- 本专题内:承接 A03 供应商依赖与控制权丧失(版本锁失效,针对披露五件套的”版本锁”一环)、与 A01 AI 产品时间性概念谱系(总框架)互链;为 E03 滴滴平台政策变更 vs AI 模型更新对比剖解(Rick 滴滴平台经验迁移)提供认识论地基——平台政策突变与模型静默更新,共享”下游方无法归因上游单方面变更”这一结构。
- 跨域入口:链入 0117社会学(信息不对称的权力结构)与认识论框架(可证伪性、归因)。
§9 关联节点
核心(必读)
- A03 供应商依赖与控制权丧失——披露五件套的”版本锁”环,本节的直接前置
- A01 AI 产品时间性概念谱系——本专题总框架,无 changelog 是”突变性”的认识论根源
- E03 滴滴平台政策变更 vs AI 模型更新对比剖解——Rick 平台经验迁移,共享”不可归因”结构
- m209 - 推理成本控制手册——“模型可平滑替换”假设的成本视角,本节做纠偏
- 幻觉——空间维度不可靠 vs. 本节时间维度不可归因
- 0117社会学——信息不对称与披露的权力结构
延伸(可选)
- Claude / OpenAI / ChatGPT——披露政策对照(Anthropic 权重保留承诺 vs. OpenAI 弃用政策)
- Agent——多步 Agent 中,无 changelog 的归因失效会沿调用链放大
- Scaling Laws——能力整体提升(对手立场依据)与任务依赖退化的张力
- AI PM 知识图谱·总索引——回到知识图谱总入口
修订日志
- 2026-06-07 R1:首稿。确立”认识论 vs SRE 可观测性”的框架级辨析(§0);把 changelog 重构为”归因契约 + 披露五件套”(§1–2);判断主轴四陷阱配齐”症状/为何错/正解/反例”四件套(§3);引入 Lakatos 研究纲领作为 Rick 未读对手框架,精确区分”变了什么 vs 为什么变”(§5);Polanyi 默会知识落地”被补丁封存的知识”跨域呼应(§6)。接地:Chen et al. 2307.09009、GPT-4o 谄媚事件、Angermeir 2510.25506、Vaugrante 2409.20303、Khatchadourian 2511.07585、Anthropic 权重保留承诺均引自专题接地材料,arXiv ID 待 §grounding 校验复核。