光标上下文(Cursor Context)——读取光标附近文字,帮助润色模型做语义消歧
光标上下文解决什么问题
ASR 做的是声学识别——根据声音判断是什么词。但中文里有大量同音词:
- 「接口」jiē kǒu vs 「借口」jiè kǒu
- 「权利」quán lì vs 「权力」quán lì
- 「账号」zhàng hào vs 「帐号」zhàng hào
ASR 听出来的声音一模一样,没法区分。这时候看上下文就能判断——前面是「API」,那这里的 jiē kǒu 大概率是「接口」。
光标上下文就是让 OpenLess 在录音时顺便读一下光标周围的文本,和转写文本一起发给润色 LLM。模型结合上下文做判断,同音字就能正确消歧。
它怎么工作的
触发时机
录音开始的那一刻,OpenLess 读取光标前后各几百字符的文本。只读一次,不重试。
平台实现
| 平台 | 实现方式 |
|---|---|
| macOS | 通过辅助功能(AX API)读取当前焦点输入框的文本 |
| Windows | 通过 UI Automation 从焦点 Text Pattern 控件读取光标 range |
| Android | OpenLess IME 直接从 InputConnection 读取光标前后文本 |
发送给润色 LLM
光标上下文作为额外的 context 块注入润色请求的 messages 里——模型能同时看到转写文本和光标上下文,然后根据上下文理解转写文本里的同音字应该是什么。
关闭时的行为
光标上下文是默认关闭的。需要手动在「设置 → 隐私 → 数据存储 → 光标上下文」里开启。
关闭后:
- 不读取光标附近文本
- 同音字消歧主要靠 ASR 热词 + 润色模型自己的猜测
- 效果明显不如带上下文
隐私设计
OpenLess 对光标上下文的隐私设计比较保守:
| 保护措施 | 说明 |
|---|---|
| 必须主动开启 | 默认关闭,不偷偷读取 |
| 只读不存 | 读到的上下文只在本次润色请求里用,不会存到本地历史或云端 |
| 自动排除密码场 | 密码框、macOS Secure Input、Windows UIA password controls 等自动跳过 |
| 可以随时关掉 | 一键关闭后完全停止读取 |
和词典热词的关系
光标上下文和词典热词是互补关系:
| 机制 | 生效阶段 | 覆盖范围 |
|---|---|---|
| 词典热词 | ASR 识别阶段 | 明确的专有名词(正确拼写已知) |
| 光标上下文 | 润色阶段 | 基于上下文的语义消歧(正确拼写取决于语境) |
两个一起开效果最好。
更详细的同音字示例和效果对比看 同音字消歧。