让Claude Code开口说话:语音控制完全指南
【终极改造】让你的AI编程助手开口说话:Claude Code 语音控制完全指南
引言:你的代码,会“说话”吗?
深夜,你独自面对屏幕,等待着一个复杂的任务完成。时间一分一秒过去,你忍不住拿起手机,在信息的瀑布流中迷失... 突然,一个声音响起:“报告主人,本次任务已完成。”
这不是科幻电影,这是你的AI编程助手——Claude Code。
大多数时候,我们与AI的交互停留在“你问,它答”的模式。但如果,它能更主动一点呢?比如,在需要你决策时,用语音提醒你;在完成任务后,把结果“说”给你听;甚至,能“听”懂你的下一条指令。
今天,我们就来一次终极改造,让你的Claude Code突破次元壁,从一个无声的文本工具,变成一个能听会说的智能伙伴。
第一阶段:唤醒声音 - “叮,您的任务已完成”
千里之行,始于足“听”。第一步,我们要让Claude Code在关键时刻,能发出声音提醒我们。
原理揭秘:万能的“钩子” (Hooks)
想象一下,你在生活中设置的各种“闹钟”:
- 上班要迟到了 -> 闹钟响
- 会议要开始了 -> 日程提醒
- 代码跑完了 -> 接收通知
Claude Code的“钩子”(Hooks)功能,就是为AI的各种行为设置的“闹钟”。我们可以在特定事件发生时,触发一个自定义的动作。
我们要用的两个关键“闹钟”:
Notification:当Claude需要你授权,或等待你输入超过60秒时触发。Stop:当Claude认为任务完成,停止工作时触发。
操作步骤:三行代码,赋予声音
我们利用Windows系统自带的PowerShell语音功能,无需安装任何软件。
-
找到配置文件: 在你的电脑里找到这个文件:
C:\\Users\\你的用户名\\.claude\\settings.json -
添加钩子配置: 打开
settings.json文件,将下面的代码复制进去。如果文件里已有内容,请注意保留原有结构,只添加"hooks"部分。{ "$schema": "https://json.schemastore.org/claude-code-settings.json", "model": "sonnet", "hooks": { "Notification": [ { "hooks": [ { "type": "command", "command": "powershell -Command \"Add-Type -AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('主人,Claude正在等待您的指示')\"" } ] } ], "Stop": [ { "hooks": [ { "type": "command", "command": "powershell -Command \"Add-Type -AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('报告主人,本次任务已完成')\"" } ] } ] } } -
保存并重启Claude Code 现在,你的AI助手已经学会了说话!下次当它完成任务或需要你时,你就会听到亲切的语音提醒。
第二阶段:能说会道 - 让Claude Code为你朗读结果
提醒只是开始,真正的效率提升,是让它把思考的结果直接“说”给你听。
想象一下,你让Claude分析一份文档,完成后,它直接用语音向你汇报摘要,而你则可以一边喝着咖啡,一边听着,完全解放双眼。
原理揭秘:脚本的力量
要实现朗读这么复杂的功能,单靠一行命令就不够了,我们需要一个专门的“剧本”——也就是一个PowerShell脚本。
这个脚本的核心任务是:
- 找到Claude的最新回复:从对话记录中,拿到它最后说的话。
- 过滤掉代码:我们只想听文字解释,而不是让它把一长串代码念出来。
- 大声朗读:把干净的文字交给系统的语音引擎。
操作步骤:创建你的第一个“AI剧本”
-
创建脚本文件夹: 在你的项目文件夹中,创建一个名为
.claude/scripts的文件夹。 -
创建PowerShell脚本: 在
scripts文件夹中,新建一个名为read-aloud.ps1的文件,把下面的代码复制进去。# # 描述:读取Claude Code对话的最新消息,并用语音朗读出来(忽略代码块)。 # # 从输入参数中获取对话记录文件的路径 param ( [string]$transcriptPath ) # 检查文件是否存在 if (-not (Test-Path $transcriptPath)) { exit 1 } try { # 加载语音合成模块 Add-Type -AssemblyName System.Speech # 创建语音合成器实例 $synth = New-Object System.Speech.Synthesis.SpeechSynthesizer $synth.Rate = 2 # 稍微加快语速 # 读取所有对话记录 $lines = Get-Content $transcriptPath | ConvertFrom-Json # 找到最后一个来自 "assistant" 的消息 $lastAssistantMessage = $lines | Where-Object { $_.speaker -eq 'assistant' } | Select-Object -Last 1 if ($lastAssistantMessage) { $content = $lastAssistantMessage.message # 使用正则表达式移除代码块 (Markdown格式) $textToSpeak = [regex]::replace($content, '```.*?```', '', 'Singleline') # 移除所有剩余的空行,使文本更连贯 $textToSpeak = $textToSpeak.Trim() -replace '(?m)^\s*$', '' if (-not [string]::IsNullOrWhiteSpace($textToSpeak)) { # 朗读处理后的文本 $synth.Speak($textToSpeak) } } } catch { # 如果发生错误,不做任何事,静默失败 } -
更新
settings.json来调用脚本: 现在,我们需要修改“闹钟”,让它在任务完成后(Stop事件)去执行这个“剧本”。同时,为了避免混淆,我们可以把原来的简单提醒改成一个简短的提示音。{ "$schema": "https://json.schemastore.org/claude-code-settings.json", "model": "sonnet", "hooks": { "Notification": [ { "hooks": [ { "type": "command", "command": "powershell -Command \"Add-Type -AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('主人,请注意')\"" } ] } ], "Stop": [ { "hooks": [ { "type": "command", "command": "powershell -ExecutionPolicy Bypass -File \"$Env:CLAUDE_PROJECT_DIR\\.claude\\scripts\\read-aloud.ps1\" -transcriptPath $Env:CLAUDE_TRANSCRIPT_PATH" } ] } ] } }注意:这里的
command变了!它现在执行的是我们刚刚创建的read-aloud.ps1脚本,并且通过环境变量把对话记录的路径传给了脚本。
现在,你的AI助手不仅会提醒你,还会声情并茂地向你“汇报工作”了!
第三阶段:终极形态 - “听”你说,与AI语音对话
我们已经能“听”了,接下来就是让它能“说”。我们将打造一个完整的语音交互闭环:你用嘴说,它用嘴答。
原理揭秘:语音识别引擎
Windows同样内置了强大的语音识别功能。我们的新脚本将在朗读完结果后,立即“竖起耳朵”,开始聆听你的下一条指令。
这个新“剧本”会做这些事:
- 朗读结果(和第二阶段一样)。
- 发出提示音,告诉你“现在可以说了”。
- 启动语音识别,捕捉你的话。
- 将语音转成文字,并自动复制到你的剪贴板。
- 你只需按下
Ctrl+V,指令就发送出去了!
操作步骤:升级你的“AI剧本”
-
创建新脚本
voice-interactive.ps1: 这次,我们在.claude/scripts/文件夹里创建一个更强大的脚本voice-interactive.ps1。# # 描述:朗读Claude的最新回复,然后启动语音识别,并将识别的文本复制到剪贴板。 # param ( [string]$transcriptPath ) if (-not (Test-Path $transcriptPath)) { exit 1 } try { # --- 朗读部分 --- Add-Type -AssemblyName System.Speech $synth = New-Object System.Speech.Synthesis.SpeechSynthesizer $synth.Rate = 2 $lines = Get-Content $transcriptPath | ConvertFrom-Json $lastAssistantMessage = $lines | Where-Object { $_.speaker -eq 'assistant' } | Select-Object -Last 1 if ($lastAssistantMessage) { $content = $lastAssistantMessage.message $textToSpeak = [regex]::replace($content, '```.*?```', '', 'Singleline').Trim() -replace '(?m)^\s*$', '' if (-not [string]::IsNullOrWhiteSpace($textToSpeak)) { $synth.Speak($textToSpeak) } } # --- 语音识别部分 --- $synth.Speak("现在请说出您的指令") # 加载语音识别模块 $recognizer = New-Object 'System.Speech.Recognition.SpeechRecognitionEngine' # 使用默认的音频输入设备 $recognizer.SetInputToDefaultAudioDevice() # 创建一个简单的语法,用于自由听写 $grammar = New-Object 'System.Speech.Recognition.DictationGrammar' $recognizer.LoadGrammar($grammar) # 开始异步识别 Write-Host "正在聆听..." $result = $recognizer.Recognize() # 同步识别,直到有结果 if ($result) { $recognizedText = $result.Text Write-Host "识别到: $recognizedText" # 将识别的文本复制到剪贴板 Set-Clipboard -Value $recognizedText $synth.Speak("已将指令复制到剪贴板") } else { $synth.Speak("抱歉,未能识别到语音") } } catch { Write-Host "脚本发生错误: $_" } -
最后一次更新
settings.json: 把Stop事件的命令,指向我们这个终极版的voice-interactive.ps1脚本。{ "$schema": "https://json.schemastore.org/claude-code-settings.json", "model": "sonnet", "hooks": { "Notification": [ // ... (这部分不变) ], "Stop": [ { "hooks": [ { "type": "command", "command": "powershell -ExecutionPolicy Bypass -File \"$Env:CLAUDE_PROJECT_DIR\\.claude\\scripts\\voice-interactive.ps1\" -transcriptPath $Env:CLAUDE_TRANSCRIPT_PATH" } ] } ] } }
见证奇迹的时刻
现在,整个流程是这样的:
- 你向Claude下达指令。
- Claude完成任务。
- (自动) 你的电脑朗读出它的文字回复。
- (自动) 朗读完毕后,提示你下达新指令。
- (自动) 你说出指令,例如“继续优化这段代码”。
- (自动) 脚本将“继续优化这段代码”这几个字复制到你的剪贴板,并提示你已复制。
- (你操作) 你回到Claude界面,按下
Ctrl+V粘贴,回车。
一个完美的语音交互闭环,就此诞生!
结语:这只是开始
我们通过Claude Code强大的hooks功能和Windows自带的PowerShell,几乎零成本地将一个文本AI,改造成了能听会说的语音助手。
这不仅仅是“听起来很酷”,它真正改变了我们与AI协作的方式,将我们从屏幕前解放出来,让编程体验变得更流畅、更自然。
这只是一个开始。你可以继续探索:
- 语音关键词触发:听到特定词语(如“危险操作”)时,发出更强的警报。
- 连接智能家居:任务完成后,让你的智能音箱播放一首歌。
- 生成报告摘要:让脚本不仅是朗读,而是先调用另一个AI模型进行总结,再朗读。
技术的魅力,就在于它给了我们无限的创造可能。现在,轮到你了,去打造一个独一无二,只听你号令的AI编程伙伴吧!
如果你喜欢这篇文章,别忘了点赞、在看、分享,让更多人看到AI的无限可能!