一句话定义
语义化版本(Semantic Versioning,简称 SemVer)是一套给版本号定规矩的约定:把版本号写成 主版本.次版本.修订号(MAJOR.MINOR.PATCH)三段,每一段的变化分别对应一种兼容性承诺。
三段各管什么
| 位置 | 名称 | 变了意味着 | 你要做什么 |
|---|---|---|---|
| 第一位 | 主版本号 MAJOR | 有破坏性变更(breaking change) | 升级前读迁移指南,动手改代码 |
| 第二位 | 次版本号 MINOR | 加了新功能,向后兼容 | 一般可以直接升 |
| 第三位 | 修订号 PATCH | 只修 bug | 放心升 |
打个比方:你住一栋楼。PATCH 是物业换了楼道灯泡——你回家的路线一点没变;MINOR 是小区多开了一个侧门——你还是能走原来的门;MAJOR 是整条街门牌重新编排——你存在外卖软件里的地址全废了,得挨个改。版本号就是作者留给你的预告:这次更新,你要不要动手。
主版本号跳了,其实在说什么
它说的不是“这次更新很大”,而是“我们的约定被打破了”:函数参数、返回字段、默认行为,至少有一处不再向后兼容。旧版本能跑的代码,新主版本里不保证能跑。
反向也有个坑:还处在 0.x 的库,按规范属于“开发中、公开接口随时可变”,这时候连次版本号都可能带破坏性变更,别拿“只跳了 MINOR”当安全信号。
为什么模型 API 的“小版本”也会翻车
这是 AI 领域要单独小心的地方。传统库的 SemVer 承诺覆盖的是接口:函数签名、字段名、错误码。这些不变,就叫向后兼容。
但模型不是确定性代码。同一个 prompt,模型换了版本,接口一个字没动,输出却变了:原来只吐 JSON,新版爱在开头加一句“好的,以下是结果”;原来宽松接受的日期格式,新版变严了;你调了两周的 prompt,效果悄悄漂移。形式上兼容,行为上不兼容——SemVer 管不到这一层。
实践上:多数厂商会提供带日期的固定快照名让你锁定模型,并把模型下线视为一次破坏性变更(具体命名方式与弃用周期以官方页面为准)。
给两类人的建议
对从业者:SDK 靠 SemVer 锁依赖,模型靠快照锁版本;把“换模型”当成一次正式发布,跑回归测试、给输出加校验和兜底,别让业务逻辑直接跑在“最新版”上。
对普通职场人:看到软件从 1.x 跳到 2.0,别默认“更好用了”,它真正的意思是“不兼容了”;更新说明里出现“破坏性变更”,先找迁移文档,再点升级。
