ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

开源中文输入法技术调研与自建方案

开源中文输入法技术调研与自建方案 背景商业输入法普遍存在数据上传/隐私争议目标是在纯开源基础上开发一个数据完全本地、无遥测的中文输入法。还有是不是怀疑自己输入的数据被备份上传呢特别讨厌每天广告推送呢。1. 总体结论结论完全可行且不必从零写引擎。中文输入法的核心拼音引擎 词库已有成熟开源方案RIME/librimeBSD-3-Clause4.6k stars2026-06 刚发 1.17.0维护活跃自研输入法的工作量集中在前端UI/系统集成和隐私架构上引擎层直接复用。推荐架构librime 引擎 自研前端。Windows 端基于Win32 低级键盘钩子 自研候选窗Tauri 或原生 C/RustmacOS 端基于InputMethodKit 自研候选窗Linux 端可先借用 fcitx5 框架验证引擎再决定是否自研。为什么不直接 fork 小狼毫weaselweasel 是 GPL-3.0自用没问题但要发布产品就必须开源你的全部修改且衍生作品同样 GPL如果想保留闭源/自由分发的权利前端必须自研引擎 librime 是 BSD-3无此限制。自用派 → fork weasel 最省事要分发派 → 自研前端 librime。许可证风险表见 §2全部组件已多源核查2026-09-20 GitHub API 实测。2. 开源组件许可证核查2026-09-20GitHub API 实测组件角色许可证版本/状态实测风险librime核心引擎C17BSD-3-Clause1.17.02026-06-06master 2026-09-18 仍在提交无。可闭源分发、可商用weasel 小狼毫Windows 前端参考实现GPL-3.08.0k stars活跃仅参考不 fork无风险fork 发布则全量 GPL 传染squirrel 鼠须管macOS 前端参考实现GPL-3.06.4k stars活跃同上fcitx5Linux 输入法框架参考/备选宿主LGPL-3.0COPYING.LGPL404 路径已换主仓库2.6k stars2026-09-20 当天有提交低。LGPL 允许动态链接闭源使用OpenCC简繁转换Apache-2.0BYVoid/OpenCC9.99k stars2026-09-19 活跃无rime-ice 中州韵主流拼音方案schema 词库GPL-3.0iDvel/rime-ice19.4k stars活跃中。schema 数据 GPL分发时须随附或声明来源纯自用无影响rime-luna-pinyin 朙月拼音另一套主流拼音方案LGPL-3.0活跃低rime-essay公共词库/语言模型LGPL-3.0活跃低librime-lua / librime-octagram / librime-predict脚本扩展 / ngram 语言模型 / 预测下一词BSD-3-Clause随 librime 系活跃无marisa-trie / leveldb / yaml-cpplibrime 底层依赖BSDL / BSD / MIT—无关键判断引擎链路librime OpenCC 依赖全部宽松许可证商用/闭源分发无障碍。GPL 只出现在方案数据rime-ice 词库和前端参考实现weasel/squirrel。两条合规路径自用随便用GPL 不约束你分发a) 自研前端GPL 不传染 词库随包附源码声明 GPL 来源或换 LGPL 的朙月方案b) 整个产品直接走 GPL-3.0 开源分发最干净且符合隐私开源输入法的定位社区接受度最高。建议选 2b这类产品参考开源输入法生态惯例开源本身就是卖点和无遥测形成互证。3. 候选引擎横向对比引擎语言成熟度中文能力结论librime (RIME)C1710 年iOS/Android/桌面/Vim/Emacs 全平台前端生态拼音/五笔/双拼/自定义 DSL词库热更新用户词库自动学习选定。中文输入领域唯一全功能开源引擎fcitx5 自带引擎C活跃有拼音引擎但词库/学习机制弱于 RIME不做引擎Linux 端可当宿主参考Rust 系karukan 等Rust早期百星级日文/越南语为主中文拼音词库与方案体系不成熟观望不用于生产自研引擎——需从零做拼音 trie 用户词库 语言模型工作量 ≥6 个月且效果难追 RIME否决4. 技术实现方案4.1 架构总览┌─────────────────────────────────────────────────────────┐ │ 前端层自研每平台一套 │ │ Windows: Rust/Tauri 或 C(Win32) │ │ · 全局低级键盘钩子 (WH_KEYBOARD_LL) │ │ · 候选窗无边框置顶窗, DWM 阴影, 深色模式 │ │ · 托盘图标 / 热键 (Shift切中英文, CtrlSpace启停) │ │ macOS: Swift InputMethodKit (IMKServer/IMKCandidates) │ │ Linux: 第一阶段直接出 fcitx5 配置验证二期评估自研 portal 前端 │ ├─────────────────────────────────────────────────────────┤ │ 引擎层复用进程内动态库 or 独立进程 IPC │ │ librime 1.17 (BSD-3) │ │ · 拼音方案 (rime-ice 或自维护 schema) │ │ · OpenCC 简繁 (Apache-2.0) │ │ · 用户词库 (leveldb, 本地学习) │ │ · librime-lua 扩展点 (可选: 本地LLM增强, 见§4.4) │ ├─────────────────────────────────────────────────────────┤ │ 数据层100% 本地零网络 │ │ ~/.{name}/ │ │ userdb/ 用户词库 (leveldb) │ │ schema/ 方案与词库 (yaml bin) │ │ logs/ 仅本地日志, 无上传 │ └─────────────────────────────────────────────────────────┘ 网络面: 无。唯一的网络行为 用户手动点检查更新(可选, 可编译期禁用)4.2 核心模块设计① 键盘钩子与输入态机Windows 前端最难的部分WH_KEYBOARD_LL低级钩子拦截按键 → 状态机IDLE → COMPOSING → SELECTING组合中按键送给 librimeProcessKey(keycode, control_code, commit)中文上屏走SendInput模拟字符输入兼容几乎所有应用IME 框架级注入则需注册真 IME复杂度高一档见 §4.3 选型必须处理的经典坑钩子回调超 300ms 会被系统强制移除回调内只做状态切换重活丢引擎线程、游戏/管理员窗口 UAC 提权差异钩子要按 integrity level 注入、Ctrl/CtrlAltDel 必须透传。② 候选窗 UI无边框置顶、跟随光标定位Windows:NtGdiQueryDisplayConfig或简单取光标屏幕防越界、数字键 1-9/0 选择、鼠标点击、翻页[ ]候选条内容来自 librimeGetContextcandidate list menu highligh indexUI 技术二选一TauriRust WebView2UI 开发快HTML/CSS可直接复用 Vue/TS 技能栈首帧渲染 ~100ms 需做预热窗口解决原生Win32 Direct2D 或 Rust winit延迟最低10ms、无 WebView 内存开销但 UI 开发量大 3-5 倍。建议v1 用 Tauri 快速出可用品用户输入延迟敏感反馈多再换原生渲染。③ 引擎集成与线程模型librime 单实例非线程安全独立引擎线程 消息队列钩子线程只做入队词库/用户词库写入走 librime 内置 sync 机制避免与 UI 读竞争首次部署需离线跑一次rime_deployer等价流程把 yaml schema 编译为 bin可用rime-plugin的 deploy 逻辑或自己调Schema::Deploy。④ 隐私架构产品的灵魂也是和所有商业输入法的差异点零网络代码编译产物里不存在任何 HTTP 客户端依赖用 CI 的静态扫描cargo-audit/ 依赖清单审计 运行时strace/ltrace验证无 socket 调用作为发布前的标准检查并公开报告用户词库本地 leveldb可一键导出/删除可选端到端加密云备份差异化功能默认关词库同步走用户自备的 S3/自建服务器加密密钥只在本地AGE/SOPS 标准服务器只存密文可审计性全开源 签名发布Windows Authenticode / macOS notarization附无遥测声明页列出全部第三方依赖及其许可证§2 表格直接放官网。4.3 两种系统集成路线对比Windows路线 A低级钩子 SendInput伪输入法路线 B注册真 IMETSF 文本服务框架开发量中1-2 个月出 v1大TSF COM 组件 注册表 语言栏2-4 个月兼容性绝大多数应用 OK部分游戏/反作弊/全屏独占、UAC 提权窗口可能不识别系统级100% 应用识别语言栏/任务栏状态正常候选窗控制完全自主完全自主自绘窗参考实现weasel 实际走的近似路线weasel 用的是 IM 框架注入介于两者间微软 TSF 文档 各开源 IME 实现建议v1 走 A快速验证桌面用户反馈某些软件不出候选后升级 B4.4 可选增强第二期差异化方向本地 LLM 词库增强librime-lua 扩展点挂本地小模型内网已有 2080Ti 跑 Qwen 的基建做长句/领域词预测——模型只读本句输入 本地词库无网络隐私卖点再加固用户自定义词库导入Excel/CSV 批量导入公司场景内部系统名、项目代号自动出词云词库订阅严格可选默认关闭用户显式开启且只拉取匿名词频表不含任何输入内容。4.5 里程碑与工作量估算按 1 名全栈开发 AI 辅助阶段内容周期验收标准M0环境Windows 装 weasel 用 librime 1.17把 rime-ice 调到自己满意的出词效果1 周日常打字 1 周无不适这步决定引擎选型成败必须先做M1引擎进程化librime 打包为独立服务进程 gRPC/CapnProto IPC复用 librime-proto 插件Python/TS 客户端调通2 周命令行里完整走通输入→候选→选择→上屏M2Windows v1钩子 Tauri 候选窗 SendInput 上屏 托盘4-6 周日常主力使用 1 个月崩溃率 1 次/周打字延迟主观无感M3隐私验证 发布CI 网络审计、签名打包WiX/MSIX、更新机制、官网依赖声明2 周公开可复现的零网络验证报告M4macOS 版InputMethodKit Swift 候选窗Linux 出 fcitx5 配置方案4 周双平台自用稳定M5可选TSF 真输入法升级 / 本地 LLM 增强 / 加密云备份视反馈—总预估M0-M3Windows 可发布版约2.5-3 个月加 macOS 约 4 个月。有 AI 辅助编码 本方案文档主要风险集中在 M2 的钩子兼容性和 Tauri 候选窗延迟。5. 风险与缓解风险等级缓解Tauri 候选窗首帧/延迟不达标WebView 冷启动高预热隐藏窗口常驻M2 设硬性指标按键到候选显示 P95 80ms不达标切 winit 原生渲染钩子方案在部分软件失效游戏/UAC中v1 文档明示已知限制M5 升级 TSFrime-ice 词库 GPL 传染担忧分发场景低整包走 GPL 开源推荐或换 LGPL 朙月方案 自维护词库librime C 编译链繁琐boost/marisa/leveldb 依赖低用 vcpkg 或预编译静态库社区已有各平台预编译weasel 安装包内即可提取验证单人维护长尾平台适配中聚焦 Windows 自用macOS/Linux 降级为给官方 rime 前端打配置而非自研前端6. 下一步 checklist需拍板自用还是分发自用 → M0 直接 fork weasel 改配置一天上手分发 → 按本方案走自研前端M0 先装 weasel rime-ice 试用一周确认出词效果不喜欢就换朙月/自定义方案引擎不变前端技术栈Tauri快复用 TS/Vue 技能vs 原生 C/Rust快响应开发量大——建议 Tauri 起步产品名与定位是否主打开源无遥测社区路线
返回列表