这是什么
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 无音频设备 |
语音模式需要本地麦克风。当检测到远程运行环境(homespace)或设置了
QS_REMOTE 时,录音可用性检查会直接失败,提示改用本地运行。
安装启用
-
确认 Voice Mode 特性已开启
Build 产物默认包含
VOICE_MODE。使用 dev 模式时通过环境变量显式开启:# dev 模式手动开启 VOICE_MODE 特性 FEATURE_VOICE_MODE=1 bun run dev特性关闭时,
/voice命令会被隐藏,调用返回Voice mode is not available. -
(仅豆包后端)安装可选依赖
doubaoime-asr声明为optionalDependencies,安装失败不影响 Anthropic 后端,仅在切换到豆包后端时才会被动态 import。bun add doubaoime-asr -
(仅豆包后端)准备凭证文件
默认读取
~/.claude/tts/doubao/credentials.json。首次连接时若文件缺失, SDK 会尝试自动生成;也可按下节格式手动创建。 -
在会话中启用并授权麦克风
执行
/voice(或/voice doubao)。启用前会依次检查录音环境、 音频工具与麦克风权限;首次授权时同步弹出系统权限请求,避免第一次按住说话才触发。 -
按住空格说话,松开提交
按住 空格键开始录音,界面显示实时转录;松开后停止录音,最终文本自动提交。
配置
语音设置写入用户级 settings.json,跨会话生效,由 /voice 命令维护。
| 设置项 | 类型 | 说明 |
|---|---|---|
voiceEnabled |
boolean | 是否启用按键说话听写 |
voiceProvider |
"anthropic" | "doubao" |
STT 后端;缺省按 Anthropic 处理 |
language |
string | 听写语言,仅影响 Anthropic 后端(归一化为 BCP-47 代码);豆包后端原生处理所有语言 |
豆包凭证文件 —— ~/.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 中覆盖,最后一个生效:
[
{
"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(保持启用) |
未启用时只识别 doubao 与 anthropic 两个参数,其余一律按默认
Anthropic 处理。已启用时传入这两个参数只切换后端,不会关闭语音模式;不带参数才会关闭。
相关环境变量:
| 变量 | 作用 |
|---|---|
FEATURE_VOICE_MODE |
设为 1 开启 Voice Mode 特性(dev 模式) |
VOICE_STREAM_BASE_URL |
覆盖 Anthropic voice_stream 的 WebSocket 基址(默认由 OAuth 配置推导) |
QS_REMOTE |
为真时视为无麦克风的远程环境,禁用语音模式 |
实战示例
用 Anthropic 后端(已登录 Claude.ai):
# 确保已通过 OAuth 登录(voice_stream 不支持 API key)
/login
# 启用语音模式(默认 Anthropic 后端),首次会弹麦克风授权
/voice
# → Voice mode enabled (Anthropic). Hold Space to record.
# 按住空格说话,松开自动提交
切换到豆包 ASR(无需 Anthropic 账号):
# 首次使用:启用并选择豆包后端
/voice doubao
# → Voice mode enabled (Doubao ASR). Hold Space to record.
# 之后只想切换后端,同样一条命令即可(保持启用状态)
/voice doubao
# 切回 Anthropic STT
/voice anthropic
# 关闭语音模式(不带参数)
/voice
改听写语言(仅 Anthropic 后端):
# 把 language 设为受支持的名称或代码(如 "japanese"、"ja")
/config
# 不支持的语言会回退为英语,并在启用提示中说明
常见问题排错
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 没有回退:必须成功加载原生 audio-capture 模块,否则报
Voice recording requires the native audio module。Linux 上若缺少
arecord 与 SoX,会提示安装命令(如 sudo apt-get install sox);
macOS 回退方案是 brew install sox。
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,命令会整体隐藏并返回不可用。