跳到主要内容

16 篇博文 含有标签「model-migration」

查看所有标签

你的评估测试集对现任模型存在过拟合

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个新的前沿模型发布了。它更便宜、更快速,并在各大公开排行榜上霸榜。你使用你花了 18 个月构建的评估套件对其进行测试,结果它的得分比你目前运行的模型还要。于是你保留了现有的模型,将挑战者模型归类为“尚未准备好”,然后继续之后的工作。

令人不安的部分在这里:那个结果几乎没有告诉你哪个模型更好。它告诉你的其实是,你的评估套件是通过观察当前模型的失败、处理一次又一次的生产事故而构建的,然后通过修补来消除那些特定的失败。这个套件并不是对质量的客观衡量,它是某个模型“疤痕组织”的目录。而一个拥有不同弱点的挑战者模型,在面对一个针对现有模型特定弱点而收集的测试集时,表现总是会显得更差——即使它在你实际服务的流量上表现得更好。

这就是“现有模型偏见 (incumbent bias)”,它是没人会在迁移决策中计算的切换成本。它在更好的选择出现很久之后,依然悄悄地将你锁定在旧模型上,而且它还是披着“严谨工程”的外衣做到这一点的。

脚手架审计:每一次模型发布都让你的部分开发框架变成累赘

· 阅读需 11 分钟
Tian Pan
Software Engineer

当依赖项损坏时,你的构建会失败。当临时规避方案变得不再必要时,什么都不会发生。这种不对称性正是为什么每一个运行超过一年的生产级 LLM 系统都带有它不再需要的脚手架——重试编排、输出修复解析器、强制思维链、复杂的任务分解、分块启发式方法——每一个都是为了弥补特定模型的特定弱点而构建的,而且每一个都在无声无息中比它所补偿的弱点活得更久。

令人不安的是,这不仅仅是一个像过期的特性标志(feature flags)那样的卫生问题。过时的脚手架不仅仅是消耗你的延迟和 Token。在最坏的情况下,它会主动将新模型限制在旧模型的上限内:你的分解逻辑将一个任务切分为六个步骤,是因为 2024 年的模型无法处理整个任务,而 2026 年的模型本可以一次性完成,现在却继承了六个在你构建的缝隙中丢失上下文的机会。

你不是选择了一个模型,而是和它结婚了:无人预估的提示词级锁定

· 阅读需 10 分钟
Tian Pan
Software Engineer

询问任何工程主管,他们是否被模型供应商锁定了,他们都会指向抽象层。“我们通过网关路由所有内容。更换供应商只是配置更改。”端点只有一行代码。Base URL 是一个环境变量。在纸面上,迁移只需要一个周二下午。

然后他们尝试了。他们将配置切换到不同的模型系列,集成测试依然通过,但生产环境却悄然崩溃。原本总能解析的 JSON 现在被包裹在 Markdown 代码块中。准确率曾达 94% 的分类器降到了 80% 出头。一个稳定运行了一年的提示词开始因为无人能复现的原因,在每 20 个请求中拒绝 1 个。端点在几秒钟内完成了切换,但行为并没有随之迁移。

这就是没人预料到的锁定。它不在你的合同或 SDK 中,而是在你的提示词(prompts)中——你的团队为了适应单一模型系列的特性,一次又一次地做出的数千个细微调整。你选的不是模型,而是与之“联姻”,而“婚前协议”就是你发布过的每一个提示词。

悄无声息击穿提示缓存的那次模型迁移

· 阅读需 11 分钟
Tian Pan
Software Engineer

迁移看上去很干净。评估已经针对新模型版本重新校准。Judge 提示词重新调校过。两周的影子流量显示行为对齐在容差范围内。p50 和 p99 延迟都在预算之内。周四下午的上线评审签字通过,团队各回各家。

到了周五早上,推理账单是平时的 3 倍。评估分数依旧没问题。延迟依旧没问题。上线评审上没有人想到要对缓存命中率做埋点,因为前缀根本没变 —— 系统提示词逐字节相同,工具定义逐字节相同,对话框架逐字节相同。变的是请求体里的模型版本,而供应商的前缀缓存键是 (前缀字节 + 模型版本)。切换之后的每一个请求都打到了一个冷缓存上。预热曲线靠自然流量花了六周才恢复,在此期间团队为每个请求的每一个 token 都支付了完整的未命中价格。

模型已到生命周期终点,并带走了你的提示词

· 阅读需 12 分钟
Tian Pan
Software Engineer

弃用通知看起来人畜无害。它以更新日志或邮件中一段平静的文字形式出现:该模型快照将在几个月后的某个日期从 API 中移除,这里是推荐的替代方案,感谢你与我们一起构建。其中暗含的工作量似乎只是一行代码的改动 —— 换掉模型字符串,重新部署,搞定。

这种设想是错误的,而且错得很昂贵。模型字符串是你损失的最小的东西。真正随着旧模型一起消失的,是你花了六个月调优的提示词(prompt) —— 每一个针对边缘案例的补丁、每一个重新排序的指令、每一个你因为那个特定模型会有特定烦人行为而添加的“仅以有效的 JSON 响应,不要用 Markdown 包装”。这些都不是可移植的。从统计学意义上讲,它是针对一个模型的行为进行拟合的。替代模型并不是“缺陷对缺陷”兼容的,因此这种拟合不再成立。

模型生命周期的结束是一个迁移项目。如果把它仅仅视为一次配置更改,你就会在生产环境中、在新模型上通过真实流量发现其中的差异。

模型迁移的双重账单:被忽视的评测重锚税

· 阅读需 11 分钟
Tian Pan
Software Engineer

每次模型升级都会被当作一种简单的“替换”推销给团队:一行配置更改、在延迟、成本或质量上可衡量的提升,以及几天用于吸收新模型怪癖的提示词微调。采购方案展示了每 token 的差值,工程工单列出了发布阶段,FP&A 团队预记了季度节省。接着,评估分值出炉,却没人认得出来。质量在理应提升的地方毫无波动。曾经达成一致的两个评分员现在分歧达 10 分之多。快照套件显示为红色,但差异看起来只是措辞调整。站会上有人提出了那个本应从迁移计划第一天就该出现的问题:模型到底是在针对什么评分?

这是第二张账单 —— 评估重锚税 (eval re-anchoring tax) —— 且它往往比第一张更昂贵。人工标注的参考分数锚定在旧模型的输出分布上。作为评委的 LLM 评分器针对旧模型的失败模式进行了校准。快照固定装置捕捉的是旧模型的措辞。团队对“优质输出”的直觉是基于旧模型的风格特征训练出来的。在模型替换中,这些都无法完好无损地保留下来。

按客户定制的提示词分支:为什么你的下一次模型迁移是 47 次迁移

· 阅读需 13 分钟
Tian Pan
Software Engineer

我上个月交流过的一位 AI 初创公司 CTO 打开她的笔记本电脑,给我看了一个数字:47。那是目前在生产环境中运行的独立系统提示词(System Prompt)的数量,每个企业客户或每个逻辑分组各占一个。基础提示词在第四个月为一家需要更温和拒绝态度的医疗客户派生(Fork)了一次。然后为一家需要引用的法律客户又派生了一次。接着是为一家金融服务客户派生的,因为他们的合规团队有一份违禁词清单。当时,这些看起来都不是什么大事。每一个都是独立批准的小需求,让大客户经理团队能够顺利签下订单。

两年后,模型提供商宣布了她那些针对旧版本调优的提示词的切换截止日期。她的工程团队直觉反应是对新模型运行评估套件(Eval Suite)。评估套件仅针对基础提示词。基础提示词仍在为 0 号客户提供服务,该客户没有任何覆盖配置,且约占收入的 9%。

季度模型迁移:将其变成日程安排,而非消防演习

· 阅读需 13 分钟
Tian Pan
Software Engineer

弃用通知邮件在一个周二的下午寄达。你的计费流水线赖以生存了 14 个月的模型现在进入了 60 天的倒计时。提示词是由一名在 3 月离职的工程师调优的。评估套件自发布以来从未重新设定基准。客户成功团队正在询问为什么两个企业账户的“AI 感觉不一样了”。没有人把这件事列入路线图,也没有人能清爽地接手,因为在你组织的心理模型中,这是一个一次性项目 —— 尽管这已经是今年的第四次了。

每个在生产环境中运行 AI 功能的团队在 18 个月内都会得出同样的感悟:基础模型提供商正以团队未曾预料的频率弃用模型,而团队的迁移应对措施始终是由于收到通知邮件而触发的被动仓促应对。解决方法不是为下一次迁移准备一个更好的操作手册 —— 这类手册已经很多了,你的团队可能也写过一个。解决方法是停止将迁移视为一个项目,而是将其视为一个经常性的运营原语。把它排进日历。

Provider 行为指纹:模型切换中的隐性损耗

· 阅读需 9 分钟
Tian Pan
Software Engineer

当成本飙升、模型下线通知或竞争对手的基准测试迫使你更换 Provider 时,工程团队通常会在能力基准测试上评估候选模型,并将其视为迁移计划的全部。这个过程大约能捕获一半的问题。另一半并非能力问题,而是行为问题:那些不可见的格式习惯、拒绝模式、序列化怪癖以及输出约定——你的生产代码在数月迭代中已悄悄将其内化。

能力基准告诉你新模型能否完成任务。行为指纹告诉你你的代码库能否承受这次替换。

为什么弃用 AI 功能比你想象的更难:用户构建了你看不见的信任脚手架

· 阅读需 11 分钟
Tian Pan
Software Engineer

2025 年 8 月,当 OpenAI 试图从 ChatGPT 中移除 GPT-4o 时,遭遇了强烈的抵制——有组织的标签、付费用户威胁取消订阅、几天内的公开反转——最终迫使公司将其恢复为默认选项,并承诺在未来任何移除之前提供“实质性通知”。替换它的模型在团队关注的每一项基准测试中都表现得更好。但这并不重要。用户已经花了几个月的时间来了解该模型的怪癖,根据其失效模式校准自己的判断,并将它的特定措辞整合进团队从未检测过的工作流中。用“更好的版本”替换它,会让这种校准归零。

这种失效模式是标准的弃用策略手册所未涵盖的。下线一个常规的 SaaS 功能——宣布、迁移、灰度发布移除、退役——假设用户契约是 API 接口。而对于 AI 功能,契约是模型的观察行为:措辞、倾向、失效模式,以及它处理歧义的特定方式。用户在这些行为之上构建了“脚手架”,而这些脚手架大多存在于他们的头脑中、笔记本电脑上以及你的团队从未触及的下游系统中。

模型弃用跑步机:在收到停用通知邮件之前必须建立的规范

· 阅读需 15 分钟
Tian Pan
Software Engineer

那些将“我们使用最新模型”视为美德的团队,距离长达一个季度的计划外工作只差一封下线邮件。当弃用通知送达时,决定你是否能消化它的架构决策早在几个月前就已经做好了——而且是由那些根本没考虑过迁移的人做出的。评估套件(eval suite)隐式地针对特定检查点(checkpoint)进行了训练。提示词(prompts)是针对特定的拒绝风格(refusal style)进行调整的。成本预测假设了特定的任务令牌(token-per-task)基准。路由器的硬编码回退(fallback)模型本身也即将消失。在邮件到来之前,这些决策看起来都不像是风险,而一旦邮件到来,它们看起来就全都是同一种风险。

模型弃用现在是 AI 技术栈中最可预测的意外。Anthropic 对公开发布的模型至少提供 60 天的通知期。OpenAI 的通知窗口从针对特定快照(snapshot)的 3 个月到针对基础模型的 18 个月不等,但在实践中,最近一批 ChatGPT 模型的退役对某些团队来说只有短短两周的预警。GitHub 在 2026 年 2 月的一次协调变更日志条目中,集中弃用了一系列 Anthropic 和 OpenAI 模型。现在的模式不再是“如果模型退役”——而是“每个季度,你的技术栈所依赖的至少一个模型会进入退役窗口,而这个时间表与你的路线图并不同步”。

发布并固定版本之陷阱:模型版本的稳定性如何演变为弃用技术债

· 阅读需 11 分钟
Tian Pan
Software Engineer

在生产环境中固定(Pinning)模型版本感觉像是一种工程纪律。你将 claude-opus-4-0gpt-4o-2024-08-06 锁定到配置中,在 README 中写下原因,然后继续交付功能。输出分布不再发生偏移,评估(Evals)保持绿色,你上个季度做的提示词调优也依然有效。但实际上,你已经启动了一个静默计时器。十二到十五个月后,弃用通知邮件随之而来,三个冲刺周期(Sprint)的未记录行为依赖——提示词调优、评估校准、输出形状假设、温度特征(Temperature Quirks)——都会在瞬间到期结算。

这就是“交付即固定”(Ship-and-Pin)陷阱。从短期来看,固定版本是正确的,但从长期来看,它却是灾难性的,因为稳定性的成本会在你忽略的地方不断复利。一年前“足够好”的提示词,现在正以无人记录的方式承载着关键逻辑。你的下游服务所期望的 JSON Schema 是根据某个模型的分词习惯塑造的。你手动调优的少样本示例(Few-shot Examples)是针对特定模型对“有用性”的认知而优化的。当提供商停用该版本字符串时,这些依赖关系都不会自动迁移,而重新验证它们的工作总是在最后期限的压力下到来。