青简的隐私与数据安全设计:无账号、不上传、崩溃不丢学习数据是怎么做到的
【免费下载链接】qingjian青简 Qingjian:用 Rust 写的拼音输入法,候选词旁多一条正在学的语言的译词项目地址: https://gitcode.com/gh_mirrors/qi/qingjian
青简是一款用 Rust 编写的拼音输入法,核心特点是候选词旁附带一条正在学习的语言的译词。它的隐私设计可以概括成三句话:不需要账号、不上传数据、崩溃也不丢你攒下的学习数据。这篇文章带你看看它是怎么做到的。
为什么输入法要先谈数据安全
输入法是所有输入工具里权限最"敏感"的一个——它看着你敲下的每一个键。很多输入法靠收集用户输入习惯来换"更准的预测",代价是你的打字内容离开了你的设备。
青简的选择恰好相反:拼音转换、词库查询、候选排序、输入习惯学习,全部在本机完成,没有账号、没有统计上报,也没有属于自己的服务器。
🔒 三个关键设计目标:
- 无账号:装完即用,不注册、不登录;
- 不上传:默认情况下唯一的联网行为是每天检查一次更新;
- 崩溃不丢:你用了几个月攒下的词频、词转移习惯,不会因为进程崩溃而归零。
本机保存了什么:全是能直接打开的纯文本
青简的学习数据都以纯文本 TSV 文件保存在本机,随时可以打开查看:
- macOS:
~/Library/Application Support/Qingjian/ - Windows:
%APPDATA%\Qingjian
| 文件 | 内容 |
|---|---|
user.tsv | 每个词被选择的次数 |
user-words.tsv | 自动造词与云端选中的用户词 |
user-ngram.tsv | 词与词之间的接续统计 |
user-typos.tsv | 被接受的输入错误纠正 |
user-vocab.tsv | 每条译词被看到 / 上屏的次数 |
usage.tsv | 按天的输入量,仅数字 |
input-log.jsonl | 输入日志(可关闭、可清空) |
文件全部是明文,不加密、不混淆——因为没有任何理由对你藏东西。唯一特殊的是云服务密钥文件.env,落盘时会被设为仅当前账户可读(权限 0600)。
关于"哪些文件里含输入内容"的完整清单,见官方文档 数据与日志。
崩溃不丢学习数据:靠的是"原子写"
输入法进程随时可能被系统杀掉或自己崩溃。如果直接覆盖写文件,中途断电就留下半个文件,你攒的词频整个报废。青简用的是原子写方案,实现在 storage/mod.rs:
- 先把新内容完整写入同目录的临时文件,并强制刷盘(fsync);
- 然后用
rename改名覆盖目标文件——同一文件系统上的改名是原子操作。
效果是:任何时刻磁盘上要么是完整的旧文件,要么是新文件,永远不会出现"写到一半"的状态。官方文档也确认:这些文件每次整体替换,即使输入法中途崩溃也不会留下半截文件(见 architecture.md「崩溃不丢」)。
除了原子写,还有两层保险:
- 损坏容忍:学习数据按行解析,个别坏行跳过并记警告,而不是整个文件报废;真读不了(权限、坏盘)就退回只在内存里学习,输入法照常启动,不会拿空表覆盖你的文件。
- 有界丢失:激活期间每 60 秒把内存中的学习数据落一次盘,被杀掉最多丢一分钟的学习记录。
也就是说,哪怕进程当场崩溃,最坏情况也只损失最近一分钟的选择习惯,历史数据毫发无损。
密码框里:系统级的"别记"开关
另一个容易忽略的场景:你在密码框、银行 App 的私密输入框里打字时,输入法该不该记录?
青简的答案是完全不记。各平台壳检测到焦点进入私密输入框后,调用 engine/privacy.rs 的set_private,引擎会一次性关掉所有写入通道:
- 不学习:不记词频、不记词转移、不自动造词;
- 不记输入日志:输入日志外面套了一层
MutedLogger(input_log/muted.rs),私密期间条目直接丢弃; - 不发云端:联想、翻译、释义兜底请求一律不发;
- 排序不受影响:已有的个人数据照常参与候选排序,你的输入体验不降级。
macOS 的 Secure Input 与 Windows 的密码类输入范围(IS_PRIVATE/ PIN)都会被识别,语义与系统一致。
云联想:唯一可选的联网功能,且默认关闭
青简有一个可选的云联想功能(详见 cloud/index.md),缺省关闭。它的隐私设计值得单独说明:
- 开启后,发送的内容(当前拼音、光标前后几十个字的上下文、本机候选)直接发给你自己在设置里填写的 AI 服务商——数据不经过青简,因为青简根本没有自己的服务器;
- 密码框与应用声明为私密的输入框中绝不发送;
- 关闭开关后不再发送任何请求,密钥只存在本机。
除云联想外,唯一的联网行为是检查更新:每天向官网读取一次带数字签名的静态版本列表,请求不带账号、设备标识或任何输入内容,验证不通过的列表一律忽略,且可在设置里一键关闭。
把主动权交还给你
青简的所有数据能力都可以自主控制:
| 想做什么 | 在哪里操作 |
|---|---|
| 停止学习输入习惯 | 偏好设置 → 高级,取消勾选「学习输入习惯」 |
| 关闭 / 清空输入日志 | 偏好设置 → 高级 |
| 关闭云联想 | 偏好设置 → 云服务 |
| 关闭自动检查更新 | 关于页 |
输入日志只保存在本机,用于离线回归评测与个人模型,不会自动发送给任何人;统计(usage.tsv)只存数字,与日志分开保存,关掉日志不影响统计。
总结:隐私不是功能,是架构约束
回头看,青简的做法可以归纳为四条:
- 结构上:核心引擎不依赖任何网络 crate,翻译查表在本地完成,从架构上保证"候选生成不联网";
- 存储上:全明文文件 + 原子写 + 损坏容忍,数据可见、可删、崩溃不丢;
- 场景上:私密输入框自动静音一切写入通道,且不影响输入体验;
- 可选网络上:唯一联网功能是用户主动开启、直连用户自选服务商的云联想。
如果你正在挑选一款"少管闲事"的拼音输入法,青简的这套隐私与数据安全设计,值得写进你的候选清单。
【免费下载链接】qingjian青简 Qingjian:用 Rust 写的拼音输入法,候选词旁多一条正在学的语言的译词项目地址: https://gitcode.com/gh_mirrors/qi/qingjian
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考