← Về thư mục
📄 / / profiles / r-and-d / raw_evidence / OpenAI4S / docs / upgrading_zh.md

从 0.2.x 升级到 0.3.0

English

首次启动 0.3.0 之前请先读完本页。有两项变化无法靠重装旧版本撤销:0.3.0 会原地升级数据库,并且移除了让本地守护进程不带访问令牌运行的开关。

1. 先备份数据库

0.3.0 中第一个打开数据库的命令会把 <data_dir>/openai4s.db 从 schema 27 迁移到 schema 32。启动守护进程和运行 openai4s run 都会触发迁移。openai4s doctor 不会:它不以写方式打开数据库,只读取 schema 版本,把待进行的升级报告为警告(因此退出码不为 0),数据库保持不变。openai4s diagnostics 也不会:它生成的诊断包在 report.json 里记录待进行的升级,数据库同样保持不变。数据目录默认是 ~/.openai4s,除非用 OPENAI4S_DATA_DIR 指定了别的位置。pip 安装、Linux tarball 和 v0.2.0 macOS 应用都使用这个默认位置。

迁移开始前会先把数据库复制为 openai4s.db.v27.bak。迁移失败时保留这份副本,迁移成功后会删除它。所以一次正常的升级之后,不会留下任何 0.2.x 数据库的副本。

如果迁移失败,数据库会回滚并保持在 schema 27,这份副本会保留,命令以一行 error: 信息停止,并给出副本所在位置。此时 openai4s serve(无论是否带 --detached)和 openai4s run 的退出码为 2。在升级成功之前,openai4s doctor 的 data 检查会失败(退出码 2),并给出保留的副本位置。

如果你之后可能想退回 0.2.x,请先自己备份:

  1. 停止 OpenAI4S:运行 openai4s stop 或退出应用,再用 openai4s status 确认没有守护进程仍在运行。
  2. 复制整个数据目录。里面不只有数据库,还有 Artifact、日志和访问令牌:

bash cp -a ~/.openai4s ~/.openai4s-0.2-backup

如果目录太大无法整体复制,至少要把 openai4s.db 连同旁边的 openai4s.db-wal 或 openai4s.db-journal(如果存在)一起复制,并且在没有任何进程运行时复制。 3. 安装 0.3.0 并启动。

容器镜像把数据目录放在 /data(OPENAI4S_DATA_DIR=/data),也就是 compose.yaml 里名为 openai4s-data 的命名卷,或 deploy/kubernetes.yaml 里名为 openai4s-data 的 PersistentVolumeClaim。0.3.0 镜像会以同样的方式迁移其中的数据库。使用 Docker 或 Kubernetes 时,请先停止容器(或把 Deployment 缩容到 0),备份这个卷或 PVC,再启动 0.3.0 镜像。

迁移 28 到 32 只新增表、列和索引,不删除任何东西:

版本 新增内容
28 执行记录上的 generation id,以及委派子任务的任务状态
29 Auto Mode 预算准入
30 委派请求与尝试
31 模型能力回执
32 用于浏览 Artifact 的索引

2. 不支持退回 0.2.x

0.2.0 不检查它打开的数据库的 schema 版本:只要库里记录的版本不低于它所知道的版本,它就跳过迁移。如果让它打开一个已经被 0.3.0 升级过的数据目录,它会不给任何警告地启动并写入这个数据库,但不会维护迁移 28 到 32 新增的任何内容。这些迁移只新增表、列和索引,但这并不让这种组合变成受支持的:没有任何机制检查两个版本对它们都会写的那些行理解一致。

要退回,请停止 0.3.0,再恢复升级前自己做的那份备份:

mv ~/.openai4s ~/.openai4s-0.3
cp -a ~/.openai4s-0.2-backup ~/.openai4s

在 0.3.0 下创建的内容都不在那份备份里。

从 0.3.0 起才有这道拒绝:0.3.x 版本打开 schema 更新的数据库时,会在写入任何东西之前停下,并报告 future_schema 以及两个版本号。

3. 访问令牌总是必需

0.2.x 在设置 OPENAI4S_REQUIRE_TOKEN=0 时允许 loopback 上的守护进程不带凭据运行,并提示这个开关会在下一个小版本移除。0.3.0 移除了它:该变量会被忽略,每个守护进程都要求访问令牌,包括绑定在 127.0.0.1 上的守护进程。

4. 其他可能会注意到的变化