全平台操控

Voice Mode

按键说话(Push-to-Talk)语音输入:按住快捷键录音,松开后转录文本直接作为用户消息提交, 录音过程中实时显示中间结果。内置两条 STT 后端,按账号条件切换。

  • Push-to-Talk
  • 豆包 ASR / Anthropic
  • macOS · Linux · Windows

这是什么

Voice Mode 把语音转文本(STT)接到输入框上。默认在 Chat 上下文里按住 空格键开始录音,松开即停止;转录结果会自动填入并提交,等价于手动敲入一句话。 录音期间界面显示实时中间转录,松手后替换为最终文本。

提供两条互相独立的 STT 后端,差异只在「如何拿到识别服务」:

  • Anthropic voice_stream(默认) —— 通过 WebSocket /api/ws/speech_to_text/voice_stream 流式识别,使用与 CLI 相同的 Anthropic OAuth 凭证,需要 Claude.ai 账号(OAuth),不支持 API key。
  • 豆包 ASR(Doubao) —— 通过可选依赖 doubaoime-asr 的 AsyncGenerator 协议流式识别,读取本地凭证文件, 不需要 Anthropic 账号,可完全离线于 Anthropic 生态使用。

两条后端共享同一套音频录制与按键交互,仅门控条件、连接实现与语言处理不同。 豆包后端在录音期间即返回最终结果,松手后无需等待处理状态。

前置条件

后端 认证要求 额外依赖
anthropic(默认) Claude.ai OAuth 登录(非 API key、非 Bedrock / Vertex / Foundry) 无额外 npm 依赖
doubao 无(使用本地凭证文件) 可选依赖 doubaoime-asr + 凭证文件 ~/.claude/tts/doubao/credentials.json

音频录制后端按平台自动选择,无需手动指定采样参数(固定 16 kHz / 单声道 / 16-bit):

平台 录制后端 说明
macOS 原生 audio-capture(cpal)→ SoX rec 首次录音触发系统麦克风授权(TCC)弹窗
Linux 原生 cpal → arecord(ALSA)→ SoX rec 无 ALSA 声卡时回退到 arecord / SoX;arecord 会做设备探测
Windows 仅原生 audio-capture(cpal) 没有回退通道,原生模块加载失败即不可用
WSL arecord / SoX WSL2 + WSLg(Windows 11)经 PulseAudio 可用;WSL1 / Windows 10 无音频设备
i
远程环境不可用

语音模式需要本地麦克风。当检测到远程运行环境(homespace)或设置了 QS_REMOTE 时,录音可用性检查会直接失败,提示改用本地运行。

安装启用

  1. 确认 Voice Mode 特性已开启

    Build 产物默认包含 VOICE_MODE。使用 dev 模式时通过环境变量显式开启:

    Terminal
    # dev 模式手动开启 VOICE_MODE 特性
    FEATURE_VOICE_MODE=1 bun run dev

    特性关闭时,/voice 命令会被隐藏,调用返回 Voice mode is not available.

  2. (仅豆包后端)安装可选依赖

    doubaoime-asr 声明为 optionalDependencies,安装失败不影响 Anthropic 后端,仅在切换到豆包后端时才会被动态 import。

    Terminal
    bun add doubaoime-asr
  3. (仅豆包后端)准备凭证文件

    默认读取 ~/.claude/tts/doubao/credentials.json。首次连接时若文件缺失, SDK 会尝试自动生成;也可按下节格式手动创建。

  4. 在会话中启用并授权麦克风

    执行 /voice(或 /voice doubao)。启用前会依次检查录音环境、 音频工具与麦克风权限;首次授权时同步弹出系统权限请求,避免第一次按住说话才触发。

  5. 按住空格说话,松开提交

    按住 空格键开始录音,界面显示实时转录;松开后停止录音,最终文本自动提交。

配置

语音设置写入用户级 settings.json,跨会话生效,由 /voice 命令维护。

设置项 类型 说明
voiceEnabled boolean 是否启用按键说话听写
voiceProvider "anthropic" | "doubao" STT 后端;缺省按 Anthropic 处理
language string 听写语言,仅影响 Anthropic 后端(归一化为 BCP-47 代码);豆包后端原生处理所有语言

豆包凭证文件 —— ~/.claude/tts/doubao/credentials.json:

~/.claude/tts/doubao/credentials.json
{
  "deviceId": "...",
  "installId": "...",
  "cdid": "...",
  "openudid": "...",
  "clientudid": "...",
  "token": "..."
}

语言映射(Anthropic 后端) —— language 会被归一化为服务端允许的 BCP-47 代码子集:en、es、fr、ja、 de、pt、it、ko、hi、 id、ru、pl、tr、nl、 uk、el、cs、da、sv、 no。无法识别时回退为 en 并在启用提示中给出说明。

重绑定按键 —— 默认是 Chat 上下文的 space。在用户 keybindings.json 中覆盖,最后一个生效:

keybindings.json
[
  {
    "context": "Chat",
    "bindings": {
      "meta+k": "voice:pushToTalk"
    }
  }
]
*
按键建议

持键检测依赖系统的按键自动重复。裸字母会在预热阶段被打印进输入框,建议使用 space 或形如 meta+k 的修饰键组合。

常用命令与参数

命令 当前状态 行为
/voice 未启用 启用语音模式,后端默认 Anthropic
/voice 已启用 关闭语音模式
/voice doubao 未启用 启用语音模式并选择豆包 ASR
/voice doubao 已启用 仅切换后端到豆包 ASR(保持启用)
/voice anthropic 未启用 启用语音模式并选择 Anthropic STT
/voice anthropic 已启用 仅切换后端到 Anthropic STT(保持启用)
i
参数行为

未启用时只识别 doubao 与 anthropic 两个参数,其余一律按默认 Anthropic 处理。已启用时传入这两个参数只切换后端,不会关闭语音模式;不带参数才会关闭。

相关环境变量:

变量 作用
FEATURE_VOICE_MODE 设为 1 开启 Voice Mode 特性(dev 模式)
VOICE_STREAM_BASE_URL 覆盖 Anthropic voice_stream 的 WebSocket 基址(默认由 OAuth 配置推导)
QS_REMOTE 为真时视为无麦克风的远程环境,禁用语音模式

实战示例

用 Anthropic 后端(已登录 Claude.ai):

qsdashi 会话
# 确保已通过 OAuth 登录(voice_stream 不支持 API key)
/login

# 启用语音模式(默认 Anthropic 后端),首次会弹麦克风授权
/voice
# → Voice mode enabled (Anthropic). Hold Space to record.

# 按住空格说话,松开自动提交

切换到豆包 ASR(无需 Anthropic 账号):

qsdashi 会话
# 首次使用:启用并选择豆包后端
/voice doubao
# → Voice mode enabled (Doubao ASR). Hold Space to record.

# 之后只想切换后端,同样一条命令即可(保持启用状态)
/voice doubao

# 切回 Anthropic STT
/voice anthropic

# 关闭语音模式(不带参数)
/voice

改听写语言(仅 Anthropic 后端):

qsdashi 会话
# 把 language 设为受支持的名称或代码(如 "japanese"、"ja")
/config

# 不支持的语言会回退为英语,并在启用提示中说明

常见问题排错

!
提示需要 Claude.ai 账号

Anthropic 后端使用 claude.ai 的 voice_stream 端点,仅 OAuth(Claude.ai 订阅账号)可用, API key / Bedrock / Vertex / Foundry 都不行。解决方式:执行 /login 用 Claude.ai 账号登录;或改用不依赖 Anthropic 认证的豆包后端 /voice doubao。

!
麦克风权限被拒

启用时 /voice 会主动探测麦克风。被拒后按平台前往授权,然后重新执行 /voice:

  • Windows:Settings → Privacy → Microphone
  • macOS:System Settings → Privacy & Security → Microphone
  • Linux:系统音频设置(your system's audio settings)
!
找不到音频录制工具 / Windows 模块未加载

Windows 没有回退:必须成功加载原生 audio-capture 模块,否则报 Voice recording requires the native audio module。Linux 上若缺少 arecord 与 SoX,会提示安装命令(如 sudo apt-get install sox); macOS 回退方案是 brew install sox。

!
WSL / 远程环境无音频设备

WSL1 与 Windows 10 下的 WSL2 没有可用的音频设备;WSL2 + WSLg(Windows 11)经 PulseAudio 可用。远程运行(设置了 QS_REMOTE 或非本地环境)一律不可用,请在本地原生环境运行 qsdashi。

!
豆包后端启动失败

常见原因是 doubaoime-asr 未安装,或凭证初始化失败。确认已 bun add doubaoime-asr,并检查 ~/.claude/tts/doubao/credentials.json 是否存在且格式正确。该依赖为可选依赖, 安装失败只影响豆包后端,Anthropic 后端不受影响。

*
听写语言不被识别

Anthropic 后端只接受服务端允许的 BCP-47 代码子集(见「配置」节)。传入不支持的语言会回退为 英语并在启用提示里给出 is not a supported dictation language 说明;用 /config 改成受支持的名称或代码即可。豆包后端不需要设置语言。

*
功能被紧急关闭

语音模式带一个 GrowthBook 负向开关 tengu_amber_quartz_disabled,默认为 false 即正常可用。若被置为 true,命令会整体隐藏并返回不可用。