Agno 在 8 月 30 日 UTC 20:45:21 发布了 v3.0.3,引入了一套知识管理工具。它又在 UTC 22:40:41 发布了 v3.0.4——一小时五十五分钟后——并借助这个补丁版本重写了该工具集的公开接口。

补丁版本里改了什么

有三件事本不该出现在补丁版本中。模块路径发生了移动,且没有留下兼容层。四个构造函数标志被重命名。构造函数对未知关键字参数的处理方式则意味着旧名称不会被拒绝,而是会被静默忽略

为何静默比报错更糟

最后这一点最要命。如果某个标志重命名后直接报错,受影响的每个部署都会在启动时明确失败,几分钟内就会有人修复。可如果旧名称只是悄悄被丢弃,构造函数就会回退到自己的默认值——而某位运维人员原本专门写入一个标志来禁用某项能力,升级后这项能力却会被重新开启,没有错误、没有警告,也没有日志。升级表面上成功了,但它携带的配置却没有被保留下来。

作为安全修复的 bug 条目

同一个版本还修复了一个默认值错误,该错误一直在取消对该工具集中那一项可能销毁已存内容的工具的确认门槛。这是一个与安全相关的修复。但它在说明里只是作为普通的 bug 条目列出,和一些外观性项目并列,没有任何标记表明它是运维人员可能急于升级的原因。

常见表述哪里错了

语义化版本在很大程度上被理解为一种契约:补丁号变更意味着可以放心升级。可在这里,这个补丁位却覆盖了一个没有兼容层的模块迁移、四个重命名的标志,以及一个改变后的有效默认值——这就是破坏性变更的定义。项目本来也知道这一原则:同一天更早的一次发布主张拒绝被静默忽略的关键字参数,而不是把它们吞掉。这个立场先被明确提出,几个小时后却没有应用到它自己的重命名上。

如何进行升级

不要把 3.0.3 升到 3.0.4 当成例行小升级。升级前请搜索旧的标志名称和旧的模块路径,因为安装程序和运行时都不会告诉你它们已经不再有任何意义。