图像与设计
为 Type4Me(macOS…
在 macOS 上构建、运行和扩展 Type4Me 语音输入工具(本地 SherpaOnnx 或云端 ASR + LLM 文本优化 + 本地凭证/历史存储)时的完整操作流程。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
为 Type4Me(macOS 语音输入特定
解决思路
- 安装前置依赖:xcode-select --install;brew install cmake
- 克隆源码并进入目录:git clone https://github.com/joewongjc/type4me.git && cd type4me
- 一次性编译本地 SherpaOnnx 引擎(约 5 分钟):bash scripts/build-sherpa.sh
- 构建、打包、签名、安装到 /Applications 并启动:bash scripts/deploy.sh
- 或从 releases 下载预编译 Type4Me-v1.2.3.dmg(仅含云端 ASR,不含本地引擎)
- 若 macOS 拦截应用,解除隔离:xattr -d com.apple.quarantine /Applications/Type4Me.app
- 创建模型目录:mkdir -p ~/Library/Application\ Support/Type4Me/Models
- 下载并解压本地 ASR 模型到该目录,三档可选:轻量 ~20MB 的 sherpa-onnx-streaming-zipformer-small-ctc-zh-int8-2025-04-01、均衡推荐 ~236MB 的 sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13、中英双语 ~1GB 的 sherpa-onnx-streaming-paraformer-bilingual-zh-en,均用 tar xjf <包名>.tar.bz2 -C ~/Library/Application\ Support/Type4Me/Models/ 解压
- 校验模型目录结构必须精确匹配:encoder.int8.onnx、decoder.int8.onnx、tokens.txt
- 每个 ASR client 必须实现 SpeechRecognizer 协议:startRecognition() async throws、appendAudio(_ buffer: AVAudioPCMBuffer) async、stopRecognition() async throws -> String、cancelRecognition() async、可选 partialResultHandler: ((String) -> Void)?
- 每个服务商必须实现 ASRProviderConfig 协议:static providerID、static displayName、static credentialFields、static validate(_:)、static createClient(credentials:config:)
- 新增 ASR 服务商第一步:在 Type4Me/ASR/Providers/ 下新建 Provider 配置文件,定义唯一的 providerID、显示名、credentialFields(key/label/placeholder/isSecret)以及 validate 与 createClient 实现
- 新增 ASR 服务商第二步:在 Type4Me/ASR/ 下新建 ASR client 类实现 SpeechRecognizer;云端实现要点为 startRecognition 清空音频缓冲、appendAudio 把 Float32 PCM 转 Int16 并累积到 Data、stopRecognition 用 multipart/form-data 组装请求(Authorization: Bearer \\(apiKey)、Content-Type: multipart/form-data; boundary=...)并解析返回 JSON 的 text 字段、cancelRecognition 清空缓冲
- 新增 ASR 服务商第三步:把该 provider 类型加入 Type4Me/ASR/ASRProviderRegistry.swift 的 all 数组
- 凭证统一经 CredentialStore 读写:CredentialStore.shared.get(providerID:key:)、store.set(providerID:key:value:)、store.isConfigured(providerID:fields:),绝不在代码中硬编码密钥
- 凭证文件位于 ~/Library/Application Support/Type4Me/credentials.json,权限必须为 0600;权限异常时用 chmod 0600 修复
- 自定义处理模式 prompt 中可使用三个上下文变量:{text} 识别文本、{selected} 录音开始时活动应用中的选中文本、{clipboard} 录音开始时的剪贴板内容
- 典型 prompt 模板:翻译所选文本({selected} + 语音指令 {text},只输出结果)、代码审查({clipboard} 代码 + {text} 指令)、邮件回复({selected} 原文 + {text} 口述意图,只输出邮件正文)
- 内置处理模式:fast(直接输出 ASR 结果,零延迟)、performance(流式+离线双通道精修)、englishTranslation(中文语音转英文文本)、promptOptimize(原始 prompt 经 LLM 优化)、command(语音指令 + selected/clipboard 上下文交给 LLM 执行)、custom(prompt:)(用户自定义模板)
- 理解会话状态机:Idle → 按下热键 Recording(音频流式送入 ASR client)→ 松开/再次按下 Processing → ASR 返回文本 → 按模式进行 LLM 后处理 → Injecting 注入当前应用 → Idle
- 源码更新后:git pull 然后 bash scripts/deploy.sh;SherpaOnnx 引擎版本未变时无需重新编译
- 排查「新服务商不出现在设置中」:确认已加入 ASRProviderRegistry.all、providerID 全局唯一,并执行 swift package clean && bash scripts/deploy.sh
- 排查「SherpaOnnx 构建失败」:brew install cmake,再 rm -rf Frameworks/ 后重跑 bash scripts/build-sherpa.sh
- 排查「本地模型在设置中不被识别」:用 ls ~/Library/Application\ Support/Type4Me/Models/sherpa-onnx-streaming-paraformer-bilingual-zh-en/ 核对目录结构是否精确匹配
- 排查「音频未采集 / 无浮动条」:在系统设置 → 隐私与安全性 → 麦克风 中勾选 Type4Me;文本注入还需在 隐私与安全性 → 辅助功能 中勾选 Type4Me
- 排查「凭证无法保存」:ls -la ~/Library/Application\ Support/Type4Me/credentials.json 应显示 -rw-------,否则 chmod 0600
- 导出历史:设置 → History → 选择日期范围 → Export CSV;也可直接查 SQLite:sqlite3 ~/Library/Application\ Support/Type4Me/history.db "SELECT datetime(timestamp,'unixepoch'), text FROM records ORDER BY timestamp DESC LIMIT 20;"
适用边界 · 注意事项
- 仅支持 macOS 14.0 (Sonoma) 及以上,且本地 ASR 推理推荐 Apple Silicon;其他平台或过旧系统不适用
- 从源码构建需要 Xcode Command Line Tools 与 CMake,且本地引擎编译约 5 分钟;只有使用云端 ASR 时才需要联网
- 预编译 dmg 不含本地识别引擎,若必须本地转写则只能走源码构建流程