技术架构
几维输入法是基于 Rime (中州韻) 引擎开发的现代化中文输入法,在继承 Rime 强大能力的基础上,进行了大量创新和优化。
核心架构
基于 Rime 引擎
几维输入法构建在 librime 之上:
┌─────────────────────────────────────┐
│ 几维输入法 (Outwit IME) │
├─────────────────────────────────────┤
│ OutwitTSF (TSF Framework) │
│ OutwitUI (候选窗口) │
│ OutwitServer (服务进程) │
├─────────────────────────────────────┤
│ Witcraft Plugin (主辅混输) │
│ Witset Plugin (AI 智能纠错) │
│ OutwitThemeDesigner (主题设计器) │
├─────────────────────────────────────┤
│ librime (中州韻引擎) │
│ ├─ Lua 脚本支持 │
│ ├─ Octagram 语言模型 │
│ └─ Predict 预测输入 │
└─────────────────────────────────────┘技术栈
| 组件 | 技术 | 说明 |
|---|---|---|
| 输入法引擎 | C++ / librime | 核心引擎 |
| TSF 框架 | C++ / Windows TSF | 输入法前端 |
| UI 渲染 | C++ / Direct2D | 候选窗口 |
| 主题设计器 | Svelte 5 | 可视化工具 |
| AI 插件 | C++ | 智能纠错 |
| 文档网站 | VitePress | 静态站点 |
性能指标
启动性能
| 指标 | 目标 | 实际 |
|---|---|---|
| 冷启动时间 | < 500ms | ~350ms |
| 热启动时间 | < 200ms | ~150ms |
| 重新部署 | < 30s | ~20s |
运行性能
| 指标 | 目标 | 实际 |
|---|---|---|
| 输入响应 | < 50ms | ~20ms |
| 候选刷新 | < 30ms | ~15ms |
| AI 纠错(本地) | < 100ms | ~50ms |
| AI 纠错(联网) | < 1s | 300-800ms* |
* 取决于网络状况和 API 服务器
资源占用
| 项目 | 基础 | +Witcraft | +Witset(本地) |
|---|---|---|---|
| 内存 | ~50MB | ~55MB | ~250MB |
| CPU(空闲) | < 1% | < 1% | < 1% |
| CPU(输入) | < 5% | < 8% | < 12% |
| 磁盘 | ~150MB | ~160MB | ~400MB |
核心技术
TSF (Text Services Framework)
几维使用 Windows TSF 框架实现输入法功能:
优势:
- ✅ Windows 原生支持
- ✅ 与应用深度集成
- ✅ 支持所有 UWP 应用
- ✅ 完整的输入法生命周期管理
实现:
ITfTextInputProcessor- 文本处理器ITfKeyEventSink- 键盘事件ITfThreadMgrEventSink- 线程管理ITfCompositionSink- 组合管理
Direct2D 渲染
候选窗口使用 Direct2D 进行硬件加速渲染:
特性:
- 🎨 高质量文字渲染
- ⚡ GPU 加速
- 🌈 支持透明和模糊效果
- 📱 高 DPI 支持
异步架构
采用异步处理架构,保证输入流畅:
cpp
// 输入处理流程(简化)
用户按键 → TSF 事件
↓
键盘处理器 (同步, <5ms)
↓
Rime 引擎 (同步, <15ms)
↓
候选词生成
↓ ↘
UI 更新 AI 智能纠错 (异步)
(同步) ↓
纠错结果返回
↓
UI 二次更新插件系统
Witcraft - 主辅混输
技术实现:
- C++
- 基于 Rime Processor 机制
- 实时编码分析和转换
处理流程:
gel → 音码: ge, 辅码: l
↓
查找: 读音为 ge 的所有候选
↓
过滤: 辅码包含 l 的候选
↓
返回: "个" (符合条件)性能优化:
- 使用字典树加速查找
- 缓存常用查询结果
- 延迟计算非必要信息
Witset - AI 智能纠错
技术架构:
┌────────────────────────────────┐
│ Witset C++ 插件 │
│ ├─ HTTP 客户端 (WinHTTP) │
│ ├─ AI 推理引擎(本地) │
│ └─ 异步任务队列 │
└────────────────────────────────┘
↓ ↓
联网 API 本地 AI 模型本地模式:
- 使用本地模型
- 优化内存占用
- 高效推理加速
联网模式:
- LLM API
- 企业客户支持自定义服务端点
- 异步请求不阻塞输入
数据结构
字典格式
Rime 使用紧凑的二进制字典:
.dict.yaml (源文件)
↓ [编译]
.reverse.bin (反查索引)
.prism.bin (音码索引)
.table.bin (主码表)优化:
- 使用 mmap 内存映射
- 懒加载减少启动时间
- 压缩存储节省空间
配置合并
Rime 的配置采用 Patch 机制:
yaml
# default.yaml (默认配置)
key: value1
# default.custom.yaml (用户配置)
patch:
key: value2 # 覆盖默认值构建系统
编译环境
- 编译器: Visual Studio 2022
- C++ 标准: C++17
- 构建工具: CMake 3.20+
- 依赖管理: vcpkg
依赖库
| 库 | 版本 | 用途 |
|---|---|---|
| librime | latest | 输入法引擎 |
| Boost | 1.83+ | C++ 工具库 |
| yaml-cpp | 0.8+ | YAML 解析 |
| glog | 0.6+ | 日志系统 |
构建流程
bash
# 1. 构建 librime
cd librime
build.bat static
# 2. 构建几维
cd outwit-windows
build.bat
# 3. 打包部署
deploy_outwit.bat安全和隐私
本地优先
- ✅ 所有输入数据本地处理
- ✅ 用户词库本地存储
- ✅ 不上传任何输入内容
网络请求
Witset 联网模式的网络请求:
- 仅在用户主动触发时发送
- 使用 HTTPS 加密传输
- 未来支持企业客户自定义 API 端点
调试和日志
日志系统
日志保存位置:
%LocalAppData%\Temp\witty.outwit\日志级别:
INFO- 常规信息WARNING- 警告信息ERROR- 错误信息FATAL- 致命错误
调试模式
启用调试输出:
yaml
# default.custom.yaml
patch:
switcher/option_list_prefix: "debug_"
# 启用详细日志
debug/verbose_logging: true