1. 背景
Chatwise 是我 25 年入手的一款 AI Chatbox 软件,Chatwise 支持使用主流的不同的 Provider 模型配置,同时支持 MCP、Search、思考开关特性,产品整体体验起来也很符合技术习惯,软件作者更新的也非常勤,整体下来使用起来比较 Nice。
因为比较高频的使用 Chatwise,之前有写过一篇 Mac 下快捷键文章: Hammerspoon - Mac 下非常好用的快捷键配置工具

2. 跨设备同步问题
因为我有多台 Mac 电脑(公司/家庭),通常情况我会主要使用工作的电脑进行工作和学习,但偶尔也会使用家庭里面的 Mac 电脑进行一些资料查阅;
2.1. 如果需要跨设备使用,云同步通常会成为选购的依据之一
在 Mac 软件的选择上,我一般会倾向于使用支持多台机器可以无缝同步的(云同步),这里也 share 下我购买的一些软件:

2.2. Chatwise 的同步问题
Chatwise 是一款客户端软件,目前暂不支持云同步,仅支持手动导出+导入功能。
比如我在 Work 的 Mac 机器上 Chatwise 新增了一些配置或者 Prompt 角色,我需要按这套流程进行数据同步:Work Chatwise <-> iCloud <-> Home Chatwise,我之前不得不选择使用 Chatwise 的手动同步脚本;
3. 解决办法
在动手之前,相关几个同步方式都有利弊:
- 方案 1: 使用 iCloud 当成中心存储,有点类似 NFS 或分布式 FS -> 问题会有锁冲突的问题,比如多个 Chatise 不同使用都写了 WAL 文件,这时候就可能出现写冲突问题
- 方案 2: 使用脚本执行导出+导入的流程,仍然借助 iCloud 作为数据同步的介质;
3.1. SQlite 简介
我尝试简单 CR 了下 Chatwise 的 Library 文件内容,发现 Chatwise 使用的 SQlite 数据库存储的
因为自己之前也在写一些客户端软件,对 SQlite 嵌入式的数据库有一些了解,简言之 SQlite 是一款适合嵌入式的支持 RDBMS 的关系型数据库,非常适合客户端这种小中型数据库存储。
SQlite 会有 3 个主要的文件:
app.db: 数据库核心存储文件,存储了核心数据、表结构、索引等app.db.wal: Write-Ahead-Log 增量日志文件,SQLite 为了高性能读写以及崩溃恢复,SQLite 会写会先写日志,当 WAL 文件容量满足特点条件就会 Sync 到 app.db 中app.db-shm: Share-Memory,协调多线程/进程在访问数据库的一些共享内存部分(比如索引)
3.2. 使用 DataGrip 查看 Sqlite 数据库内容
因为 SQlite 是嵌入式数据库,默认无需多用户鉴权,所以无需密码鉴权认证就可以访问:

3.3. 测试了手动备份 SQLite DB
- 尝试手动修改数据,备份了 DB
- 恢复 DB,打开 Chatwise 查看数据,发现整体都符合预期
所以到这里就变成了 DB 离线备份+恢复的问题了。
所以想到了一个解决办法,即编写一个简单的同步脚本,实现快速实现 Work Chatwise <-> iCloud <-> Home Chatwise 这个流程:
| |
4. 使用 Claude Code 编写下 Python 同步脚本
下载地址
备份 python 文件下载: 备份 Chatwise 的 SQlite 脚本
前提条件:你的两台 Mac 电脑都开启了 iCloud 同步,注意修改下
DEFAULT_BACKUP_DIRiCloud 存储位置
| |
4.1. 备份&恢复的 Python 脚本工具
| |
4.2. 简要测试
| |
4.3. 剩余的数据导出导入的时许问题
默认情况,如果按 Work Chatwise backup-> iCloud ->restore Home Chatwise 或 Work Chatwise restore <- iCloud <-backup Home Chatwise 进行数据同步一般不会有问题。
不过细心的用户可能发现,实际仍然会可能出现两台机器数据可能同时有数据更新,比如 Work 和 Home Mac 都有写 iCloud 的问题:
- Work Mac 写 iCloud -> app.db
- Home Mac 写 iCloud -> app.db'
这个时候,我一般是根据备份的日期时间、数据情况来决策是否使用备份数据覆盖掉本地的 Chatwise 数据。
5. 小结
总之,这套同步方式一定程度缓解了我在多台 Mac 机器上使用 Chatwise 数据同步的问题,如果你有类似问题,希望对你也有帮助!
