Skip to content

技术架构

几维输入法是基于 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 纠错(联网)< 1s300-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

依赖库

版本用途
librimelatest输入法引擎
Boost1.83+C++ 工具库
yaml-cpp0.8+YAML 解析
glog0.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

开发资源

源代码

API 文档