让Claude Code开口说话:语音控制完全指南

【终极改造】让你的AI编程助手开口说话:Claude Code 语音控制完全指南

引言:你的代码,会“说话”吗?

深夜,你独自面对屏幕,等待着一个复杂的任务完成。时间一分一秒过去,你忍不住拿起手机,在信息的瀑布流中迷失... 突然,一个声音响起:“报告主人,本次任务已完成。”

这不是科幻电影,这是你的AI编程助手——Claude Code。

大多数时候,我们与AI的交互停留在“你问,它答”的模式。但如果,它能更主动一点呢?比如,在需要你决策时,用语音提醒你;在完成任务后,把结果“说”给你听;甚至,能“听”懂你的下一条指令。

今天,我们就来一次终极改造,让你的Claude Code突破次元壁,从一个无声的文本工具,变成一个能听会说的智能伙伴。


第一阶段:唤醒声音 - “叮,您的任务已完成”

千里之行,始于足“听”。第一步,我们要让Claude Code在关键时刻,能发出声音提醒我们。

原理揭秘:万能的“钩子” (Hooks)

想象一下,你在生活中设置的各种“闹钟”:

  • 上班要迟到了 -> 闹钟响
  • 会议要开始了 -> 日程提醒
  • 代码跑完了 -> 接收通知

Claude Code的“钩子”(Hooks)功能,就是为AI的各种行为设置的“闹钟”。我们可以在特定事件发生时,触发一个自定义的动作。

我们要用的两个关键“闹钟”:

  1. Notification:当Claude需要你授权,或等待你输入超过60秒时触发。
  2. Stop:当Claude认为任务完成,停止工作时触发。

操作步骤:三行代码,赋予声音

我们利用Windows系统自带的PowerShell语音功能,无需安装任何软件。

  1. 找到配置文件: 在你的电脑里找到这个文件:C:\\Users\\你的用户名\\.claude\\settings.json

  2. 添加钩子配置: 打开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('报告主人,本次任务已完成')\""
              }
            ]
          }
        ]
      }
    }
  3. 保存并重启Claude Code 现在,你的AI助手已经学会了说话!下次当它完成任务或需要你时,你就会听到亲切的语音提醒。


第二阶段:能说会道 - 让Claude Code为你朗读结果

提醒只是开始,真正的效率提升,是让它把思考的结果直接“说”给你听。

想象一下,你让Claude分析一份文档,完成后,它直接用语音向你汇报摘要,而你则可以一边喝着咖啡,一边听着,完全解放双眼。

原理揭秘:脚本的力量

要实现朗读这么复杂的功能,单靠一行命令就不够了,我们需要一个专门的“剧本”——也就是一个PowerShell脚本。

这个脚本的核心任务是:

  1. 找到Claude的最新回复:从对话记录中,拿到它最后说的话。
  2. 过滤掉代码:我们只想听文字解释,而不是让它把一长串代码念出来。
  3. 大声朗读:把干净的文字交给系统的语音引擎。

操作步骤:创建你的第一个“AI剧本”

  1. 创建脚本文件夹: 在你的项目文件夹中,创建一个名为.claude/scripts的文件夹。

  2. 创建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 {
        # 如果发生错误,不做任何事,静默失败
    }
  3. 更新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同样内置了强大的语音识别功能。我们的新脚本将在朗读完结果后,立即“竖起耳朵”,开始聆听你的下一条指令。

这个新“剧本”会做这些事:

  1. 朗读结果(和第二阶段一样)。
  2. 发出提示音,告诉你“现在可以说了”。
  3. 启动语音识别,捕捉你的话。
  4. 将语音转成文字,并自动复制到你的剪贴板。
  5. 你只需按下Ctrl+V,指令就发送出去了!

操作步骤:升级你的“AI剧本”

  1. 创建新脚本 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 "脚本发生错误: $_"
    }
     
  2. 最后一次更新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"
              }
            ]
          }
        ]
      }
    }

见证奇迹的时刻

现在,整个流程是这样的:

  1. 你向Claude下达指令。
  2. Claude完成任务。
  3. (自动) 你的电脑朗读出它的文字回复。
  4. (自动) 朗读完毕后,提示你下达新指令。
  5. (自动) 你说出指令,例如“继续优化这段代码”。
  6. (自动) 脚本将“继续优化这段代码”这几个字复制到你的剪贴板,并提示你已复制。
  7. (你操作) 你回到Claude界面,按下Ctrl+V粘贴,回车。

一个完美的语音交互闭环,就此诞生!


结语:这只是开始

我们通过Claude Code强大的hooks功能和Windows自带的PowerShell,几乎零成本地将一个文本AI,改造成了能听会说的语音助手。

这不仅仅是“听起来很酷”,它真正改变了我们与AI协作的方式,将我们从屏幕前解放出来,让编程体验变得更流畅、更自然。

这只是一个开始。你可以继续探索:

  • 语音关键词触发:听到特定词语(如“危险操作”)时,发出更强的警报。
  • 连接智能家居:任务完成后,让你的智能音箱播放一首歌。
  • 生成报告摘要:让脚本不仅是朗读,而是先调用另一个AI模型进行总结,再朗读。

技术的魅力,就在于它给了我们无限的创造可能。现在,轮到你了,去打造一个独一无二,只听你号令的AI编程伙伴吧!

如果你喜欢这篇文章,别忘了点赞、在看、分享,让更多人看到AI的无限可能!