一个完整的 AI 语音输入解决方案,让说话变成优雅的文字
在日常工作中,我们经常需要在各种应用中输入大量文字——邮件回复、文档编写、代码注释等。虽然 macOS 自带听写功能,但它存在诸多问题:识别准确率不高、输出口语化严重、需要联网但延迟较大。我希望打造一个更智能的解决方案:
核心目标:
- 🎯 系统级覆盖:在任何应用中都能使用
- 🤖 AI 智能优化:自动去除口语化、优化表达
- ⚡ 极速响应:2秒内完成识别和注入
- 🔒 隐私优先:音频不落盘、仅内存处理
于是,AITalk 诞生了。
整体设计
AITalk 采用经典的 C/S 架构,分为 macOS 客户端和 Python 后端服务两部分:

技术栈选择
macOS 客户端(Swift)
- 框架:纯 Swift + AppKit
- 音频采集:AVFoundation (16kHz, PCM16)
- 全局热键:Carbon Event Manager
- 文本注入:macOS Accessibility API
- 网络通信:Starscream (WebSocket)
Python 后端
- Web 框架:FastAPI + Uvicorn
- STT:豆包语音识别 API(流式实时识别)
- LLM:豆包大模型(文本润色优化)
- 并发处理:asyncio + websockets
1. 全局热键监听
macOS 中实现全局热键有多种方式,最终选择了 Carbon Event Manager,原因是:
- ✅ 不依赖 NSEvent,无需应用获得焦点
- ✅ 支持复杂组合键(Cmd+Shift+Space)
- ✅ 系统级监听,任何应用都能触发
关键点:
- 使用 模式:按一次开始录音,再按一次停止
- 通过 传递 Swift 对象给 C 回调
- 异步分发到主线程处理,避免阻塞
2. 音频采集与流式传输
采集高质量音频是语音识别的基础。AITalk 使用 AVAudioEngine 构建实时音频处理管道:
技术细节:
- 采样率: 16kHz(语音识别标准)
- 格式: PCM Int16(未压缩,高质量)
- Buffer 大小: 3200 帧 = 200ms(平衡延迟和稳定性)
音频数据通过 WebSocket 实时发送至后端:
3. STT 语音识别(豆包 API)
后端接收音频流后,通过豆包的流式语音识别 API 进行实时转写:
优势:
- ✅ 流式处理,边录边传,降低总延迟
- ✅ 支持中英文混合识别
- ✅ 高准确率(官方宣称 95%+)
4. LLM 文本优化
原始 STT 输出通常包含口语化表达,需要 LLM 进行润色:
示例效果:
5. 文本注入(Accessibility API)
这是整个项目最具挑战性的部分。macOS 提供了 Accessibility API,允许应用访问和操作 UI 元素:
三层注入策略:
- AXValue 直接设置:最快、最可靠,但需要 Accessibility 权限
- 剪贴板 + Cmd+V 模拟:兼容性好,几乎所有应用都支持
- 逐字符输入模拟:最后手段,慢但一定能用
难点 1:Accessibility 权限识别问题
问题: 即使在系统设置中授予了 Accessibility 权限, 仍返回 。
原因:
- 应用重新编译后,bundle ID 或签名可能改变
- macOS 缓存了权限状态,未及时更新
解决方案:
难点 2:HUD 窗口抢占焦点
问题: 显示 HUD 进度窗口时,系统焦点被抢占,导致无法获取原目标文本框。
解决方案:
难点 3:WebSocket 断线重连
问题: 网络波动或服务器重启导致连接断开。
解决方案:
1. 延迟优化
2. 内存管理
3. 成本优化
月度成本分析(1000 次会话):
- 豆包 STT:¥5(¥0.005/次)
- 豆包 LLM:¥2(¥0.002/次)
- 服务器托管:¥30(轻量云服务器)
- 总计:≈ ¥37/月
功能特性
- ✅ 系统级语音输入:支持任意 macOS 应用
- ✅ AI 智能优化:自动去除”嗯、啊、那个”等口语词
- ✅ 多种输出模式:默认、正式、简洁、原文
- ✅ 中英文支持:自动识别语言
- ✅ 极速响应:端到端延迟 ≤2秒
- ✅ 隐私保护:音频不落盘,仅内存处理
- ✅ 可靠性:三层文本注入,99% 成功率
技术指标
短期计划(1-3个月)
- 🎨 设置界面:可视化配置热键、模式、语言
- 🌍 更多语言:日语、韩语、西班牙语…
- 📊 音频可视化:实时音量显示
- 🔄 自动更新:Sparkle 框架集成
中期计划(3-6个月)
- 🧠 本地 STT:集成 Whisper.cpp,无需联网
- 📱 iOS 版本:通过 Shortcuts 实现类似功能
- 🎯 应用 Profile:针对不同应用自动切换模式
- 🔌 插件系统:允许第三方扩展功能
长期愿景
- 🌐 跨平台支持:Windows、Linux 版本
- 🤝 多人协作:团队共享术语库
- 🧩 智能联想:根据上下文预测内容
- 📈 个人模型:基于用户习惯的微调
开发 AITalk 的过程是一次完整的产品工程实践:
- 架构设计:清晰的 C/S 分离,职责明确
- 技术选型:平衡性能、成本、开发效率
- 系统编程:深入 macOS 底层 API
- AI 集成:STT + LLM 协同优化
- 用户体验:从热键到注入的每个细节打磨
- 工程质量:异常处理、重连机制、资源管理
最大的收获是对 macOS 系统编程能力的深入理解,以及如何将 AI 技术落地到实际产品。
- Apple Accessibility Programming Guide
- Carbon Event Manager
- 豆包语音识别 API 文档
- FastAPI WebSocket 官方文档
项目地址: AITalk on GitHub
Built with ❤️ for productivity enthusiasts
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/232509.html