Skip to content

tangshuang/vokiki

Repository files navigation

VoKiKi

AI 驱动的桌面端智能语音输入工具 —— 说出来,它替你整理成可直接发送的文字。

VoKiKi 通过系统级语音键盘,让你在任意应用的任意文本框中,按住热键说话即可完成输入。后端会实时把口语化的内容整理为精炼、通顺、可直接发送的书面文本;LLM 整理失败时会自动降级为原始识别文本,保证输入不中断。

特性

  • 🎙️ 全局语音输入 —— 按住热键(默认 Fn)录音,松开即完成识别与整理
  • 🤖 ASR + LLM 双引擎 —— 语音转文字后自动润色,可按场景调整语气
  • 🔌 多服务商可切换 —— ASR / LLM 均抽象为 Provider,可在设置中切换或使用本地模型
  • 🔒 本地优先 —— 音频默认不落盘;历史记录仅保存在本地 SQLite
  • 📋 无侵入插入 —— 通过剪贴板粘贴写入文本,兼容任意输入框
  • 🪟 悬浮字幕 —— 录音时实时显示识别结果,位置可调

技术栈

技术
桌面框架 Tauri v2(Rust + WebView)
前端 React 19 · TypeScript · Vite 5 · Tailwind CSS v4 · Zustand · React Router 7
后端 Rust(cpal 音频采集 · rdev 全局热键 · rusqlite 存储 · reqwest 网络请求)
包管理 yarn(请勿使用 pnpm)

环境要求

本地开发前请先安装以下依赖(macOS 为主要支持平台):

  • Node.js ≥ 18,随附 npm
  • yarnnpm i -g yarn
  • Rust(stable 工具链,建议通过 rustup 安装)
  • Xcode Command Line Toolsxcode-select --install
  • CMake(编译 whisper-rs 依赖所需,brew install cmake

项目依赖 rusqlite(bundled SQLite)、whisper-rs(whisper.cpp)、vosk 等本地 crate,首次 cargo build 会从源码编译它们,耗时较长属正常现象。

快速开始

# 1. 克隆仓库
git clone <repo-url> vokiki && cd vokiki

# 2. 安装前端依赖
yarn

# 3. 启动开发模式(前端热更新 + Rust 后端)
yarn tauri:dev

启动后,应用窗口打开即进入首页。首次使用需在 设置 页填入服务商的 API Key(见下节)。

常用脚本

命令 说明
yarn install 安装前端依赖
yarn dev 仅启动前端(Vite,无 Tauri 后端)
yarn tauri:dev 启动完整应用(前端热更新 + Rust)
yarn build 前端生产构建
yarn tauri:build 打包可发布的桌面应用(macOS 为 .dmg
cd src-tauri && cargo check 仅检查 Rust 编译

tauri:dev / tauri:build 脚本已自动把 $HOME/.cargo/bin 加入 PATH;如果你在终端直接运行 yarn tauri dev,请确保 cargo 已在 PATH 中。

首次运行配置

VoKiKi 不读取任何 .env 配置文件,所有配置通过应用内的 设置 页面管理,持久化到本地 SQLite(vokiki.db)。

要真正用起来语音输入,至少需要配置 ASR(语音识别) 服务商的 API Key。各 Provider 概览:

ASR(语音识别)

Provider 类型 内置接口地址
funasr 本地(FunASR) 无需 Key
whisper 本地(whisper.cpp) 无需 Key
vosk 本地 无需 Key
siliconflow 云端(硅基流动) 内置
custom 自定义 语音识别接口(multipart/form-data 提交 file 字段,返回需含 text

LLM(文本整理)

Provider 类型 内置接口地址
local 本地(candle · 纯 Rust CPU 推理;内置 Qwen3-0.6B / Qwen3-1.7B GGUF) 无需 Key
siliconflow 云端(硅基流动) 内置
zhipuai 云端(智谱) 内置
aliyun 云端(阿里百炼) 内置
custom 自定义 OpenAI 兼容接口 用户填写

零成本尝鲜:ASR 选 funasr / whisper / vosk(本地运行,无需 API Key);LLM 选 local(内置 Qwen3 小参数模型,离线 CPU 推理)或关闭整理。也可使用各云端的免费额度(如智谱 GLM-4-Flash)开箱即用。

macOS 权限

应用需要以下系统权限才能正常工作,首次启动时系统会弹窗引导授权:

权限 用途
辅助功能(Accessibility) 全局热键监听(rdev)、文本插入
麦克风(Microphone) 音频采集
输入监听(Input Monitoring) 热键识别

系统设置 → 隐私与安全性 中确认 VoKiKi 已被勾选。

重置授权

当权限异常(如热键失灵、麦克风无法录制)时,可重置后重新授权:

tccutil reset Accessibility com.vokiki.app && tccutil reset ListenEvent com.vokiki.app && tccutil reset Microphone com.vokiki.app

由于 bundle identifier 为 com.vokiki.app,重置后需在 系统设置 中重新为 VoKiKi 开启对应权限,然后重启应用。

目录结构

vokiki/
├── src/                      # 前端
│   ├── pages/                # 页面:Home / History / Settings
│   ├── components/           # 组件:悬浮字幕、设置项
│   ├── stores/               # Zustand 状态(recording / settings)
│   ├── hooks/                # useRecording / useHistory
│   └── lib/tauri.ts          # Tauri invoke/listen 封装 + Provider 配置
├── src-tauri/                # Rust 后端
│   ├── src/
│   │   ├── audio/            # 音频采集(cpal)+ WAV 编码
│   │   ├── hotkey/           # 全局热键(rdev)
│   │   ├── asr/              # ASR Provider 抽象(FunASR / Whisper / Vosk / 云端 …)
│   │   ├── llm/              # LLM Provider 抽象(本地 candle / 智谱 / 阿里 / OpenAI 兼容)
│   │   ├── pipeline/         # ASR → LLM 编排,带降级
│   │   ├── output/           # 文本插入(剪贴板 + 模拟粘贴)
│   │   ├── storage/          # SQLite 存储(history / settings)
│   │   ├── commands/         # 暴露给前端的 Tauri 命令
│   │   └── lib.rs            # Tauri 入口、命令注册、托盘菜单
│   ├── icons/                # 应用图标
│   ├── Cargo.toml            # Rust 依赖
│   └── tauri.conf.json       # Tauri 配置(窗口 / identifier / bundle)
├── docs/                     # 产品文档
│   ├── PRD/v1.md
│   └── DESIGN/v1.md
└── package.json

架构要点

  • Provider 抽象:ASR 与 LLM 均定义 trait,新增服务商只需实现 trait 并在设置中注册。
  • 管线编排src-tauri/src/pipeline/orchestrator.rs 负责完整的「采集 → 识别 → 整理 → 插入」流程;LLM 失败会自动降级为原始 ASR 文本,不影响输入。
  • 数据与隐私:音频默认不写入磁盘;仅在设置中开启「保存音频」时,按 audio_save_path(默认 ~/Music/VoKiKi)保存。历史记录与设置全部存在本地 vokiki.db
  • 文本插入:通过写入剪贴板再模拟粘贴实现,不依赖逐字符模拟,兼容性更好。

关键文件索引:

常见问题

启动 yarn tauri:dev 报 Rust / cargo 相关错误

确认 Rust 已安装(rustc --version),且 ~/.cargo/bin 在 PATH 中。脚本 tauri:dev 已自动补 PATH,若仍失败可手动 source "$HOME/.cargo/env" 后重试。

首次编译 cargo check 很慢或报错

依赖 whisper-rs 需通过 CMake 编译 whisper.cpp,请确认已安装:brew install cmake,并已装好 Xcode Command Line Tools(xcode-select --install)。

热键无反应 / 无法在其它 App 中输入

通常是 macOS 权限问题。确认 VoKiKi 已获「辅助功能」「输入监听」权限;必要时执行上文的「重置授权」命令后重新授权并重启应用。

切换 bundle identifier 后历史记录 / 设置丢失

数据按 app_data_dir 隔离,identifier 变更会导致数据目录变化,属预期行为。开发期可通过设置页重新配置。

MacOS上提示已损坏无法打开怎么办?

sudo xattr -rd com.apple.quarantine /Applications/VoKiKi.app

开源协议(双授权 / Dual License)

VoKiKi 采用 AGPL-3.0-or-later + 商用授权 的双授权模型,详见 LICENSELICENSE-COMMERCIAL.md

  • 开源使用(AGPL-3.0):个人 / 团队自身使用、学习、二次开发均免费。但 AGPL-3.0 有强传染性——一旦你把 VoKiKi 或其衍生作品分发给第三方,或通过网络对外提供服务,必须按 AGPL-3.0 公开你整个产品的源代码。
  • 商用授权:如果你需要把 VoKiKi 集成进闭源商业产品、二次开发后对外销售、或在企业内部部署修改版却不愿公开源码,请购买商用授权以免除 AGPL 义务。洽谈方式见 LICENSE-COMMERCIAL.md

简单判断:个人自用或开源项目 → 免费用;要把 VoKiKi 拿去做成闭源商业产品 → 需购买商用授权。 ⚠️ 本项目不使用 MIT,不可在闭源商业产品中免费使用。

「VoKiKi」名称与标识相关权益由作者保留。

相关文档

About

完全免费的智能语音输入工具,typeless开源替代品

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages