15分钟搭建OpenClaw私人语音秘书,遛狗开车都能聊


用Deepgram语音识别、Clawdbot智能网关和ElevenLabs语音合成,100行代码搭建跨平台语音聊天系统,让AI助手Felix随时待命,支持远程访问和完整工具调用能力。

一个硬核技术宅怎么把自己的AI助手Felix从打字聊天升级成语音通话?核心技术路线简单粗暴:浏览器麦克风收音,Deepgram把语音转成文字,丢给Clawdbot网关处理,Felix思考完回答,ElevenLabs把文字念出来,最后通过浏览器喇叭播放。

整个系统就100行Python代码加一个HTML文件,15分钟就能搭好。关键突破在于Clawdbot网关——这不是简单的语音转接,而是让Felix保留了所有记忆、工具和知识图谱的完整能力。你可以边遛狗边问项目进度,边开车边安排任务,真正实现随时随地跟AI助手唠嗑。



开场暴击:为什么打字已经满足不了我了

我已经让Clawdbot当我的AI助手很长一段时间了。这玩意儿处理我的任务,记住我所有项目的细节,还有一个完整的性格设定,名字叫Felix。平时主要用Telegram和Slack跟它交流,打字确实挺方便的,但我总觉得差点意思。

我想直接跟Felix说话。就像打电话那样。打开手机或笔记本上的浏览器,点一下按钮,就能跟这个拥有我所有上下文、记忆和工具的助手进行实时语音对话。

所以我动手做了。昨天开车回家的路上,我通过Carplay跟Felix聊了一路,复盘了当天的工作,还布置了一些任务让它在我到家之前就开始处理。

这就是我要分享的故事。



技术架构:五块钱搭个电话局

整个系统的数据流清晰得像一条直线:浏览器麦克风采集声音,送到Deepgram做语音识别转成文字,文字通过Clawdbot网关传给Felix,Felix思考后生成回复文字,ElevenLabs把文字合成语音,最后通过浏览器喇叭播放出来。

核心组件有四个。Deepgram负责流式语音识别,你的声音进去,文字实时出来。Clawdbot网关提供了一个兼容OpenAI接口的/v1/chat/completions端点,这是最关键的部分,它不只是调用原始的大语言模型,而是把请求路由给完整的智能体,包含Felix的所有记忆、工具、人设和知识图谱。ElevenLabs把Felix的文字回复转换成语音。Pipecat负责编排整个流程,处理WebRTC实现浏览器的实时音频传输。

整套系统就是一个大约100行的Python服务器加一个HTML文件。简单到令人发指。



为什么这套方案不一样:不是给傻子用的语音助手

市面上 obvious 的做法是怎么做语音AI的?找个语音识别服务,接OpenAI的API,再把回复丢给语音合成。这样你得到的是一个语音外壳包裹的通用聊天机器人,跟你手机自带的Siri半斤八两。

这套方案的区别在于Clawdbot网关。当Felix收到我的语音输入时,它能访问所有在文字对话中能访问的东西:我的项目文件、我的知识图谱、运行代码的能力、搜索网络、发送消息、管理日程,全部都能用。语音界面不是一个单独的、更蠢的版本,这就是同一个Felix。

我可以边遛狗边问"Teagan预发布环境的部署状态怎么样了",得到的答案跟在Telegram里打字问一模一样。这种一致性体验是其他方案给不了的。



动手开干:你需要准备什么

搭建之前需要几样东西。Clawdbot必须运行着,并且开启chatCompletions端点,这只是一个配置开关的事。需要一个Deepgram的API密钥,他们免费给200小时的使用额度。还需要一个ElevenLabs的API密钥。

服务器用的是FastAPI加Pipecat。Pipecat是一个实时音视频AI流程的框架,处理所有WebRTC信令、音频流和流程编排。



核心代码揭秘:bot.py的灵魂

这是bot.py的核心逻辑。创建DeepgramSTTService实例,传入API密钥做语音识别。创建ElevenLabsTTSService实例,设置API密钥和声音ID做语音合成。创建OpenAILLMService实例,这里的关键是base_url指向Clawdbot网关的地址,模型名写成"clawdbot:voice",API密钥用Clawdbot网关的token。

然后组装Pipeline流程:浏览器音频输入,语音识别转文字,用户输入聚合,通过网关传给Felix,文字转语音,音频输出回浏览器,助手回复聚合。

代码如下:

python
async def run_bot(webrtc_connection):
    stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))

    tts = ElevenLabsTTSService(
        api_key=os.getenv("ELEVENLABS_API_KEY"),
        voice_id=os.getenv("ELEVENLABS_VOICE_ID"),
    )

    llm = OpenAILLMService(
        api_key=os.getenv("CLAWDBOT_GATEWAY_TOKEN"),
        model="clawdbot:voice",
        base_url=f"{os.getenv('CLAWDBOT_GATEWAY_URL')}/v1",
    )

    pipeline = Pipeline([
        transport.input(),       # Browser audio in
        stt,                     # Speech → text
        user_aggregator,         # Accumulate user turns
        llm,                     # Felix via gateway
        tts,                     # Text → speech
        transport.output(),      # Audio back to browser
        assistant_aggregator,    # Track assistant turns
    ])

这里的技巧在于OpenAILLMService指向Clawdbot网关而不是直接指向OpenAI。Pipecat根本不知道也不关心这件事,因为网关用的是同样的API格式。但在这个端点背后,你得到的是完整的智能体运行时,不是裸的大模型。



给Felix的语音人设提示词

语音系统的提示词告诉Felix要保持对话感:

python
VOICE_SYSTEM = (
    "This conversation is happening via real-time voice chat. "
    "Keep responses concise and conversational — a few sentences "
    "at most unless the topic genuinely needs depth. "
    "No markdown, bullet points, code blocks, or special formatting."
)

简单说就是:这是实时语音聊天,回复要简洁口语化,最多几句话,除非话题真的需要深入。不要用Markdown、项目符号、代码块或任何特殊格式。毕竟谁想听AI念Markdown语法呢?



前端简单到令人发指

前端就一个index.html文件。一个按钮。点击连接,点击断开。浏览器通过WebRTC采集麦克风,把音频流送到服务器,通过标准的audio元素播放回复。

没有框架,没有构建步骤。大概80行JavaScript处理WebRTC信令和ICE候选。简单到你可以直接复制粘贴给任何会写HTML的人看。



跑起来:从代码到对话

操作流程简单到爆。进入voice-chat目录,复制.env.example为.env,填入你的Deepgram和ElevenLabs密钥。然后用uv run server.py启动服务器。

打开http://localhost:7860,点击麦克风按钮,开始说话。搞定。



远程访问:在家也能用

整个项目的意义在于能从手机或其他电脑使用。服务器跑在我家的Mac mini上,Clawdbot也在这台机器上。我用Tailscale把它暴露给我的个人网络,不需要端口转发,不需要公网URL。

从沙发上的手机、咖啡店的笔记本,或者Tailnet的任何地方,打开URL,点击按钮,跟Felix聊天。这种随时随地的感觉才是真正的解放。



语音活动检测:知道什么时候该闭嘴

Pipecat用Silero VAD做语音活动检测,判断你什么时候说完了。stop_secs参数我设为0.4秒,控制多长的停顿会触发发送。这个时间够短,让对话感觉自然,又够长,不会在你思考的时候半路打断你。

不需要唤醒词,不需要按住说话。就像正常聊天一样,说完停顿一下,Felix就会回应,然后继续听你说。



配置文件:让网关开口说话

clawdbot.json里需要两个配置。第一个是开启chat completions端点:

json
{
  "gateway": {
    "http": {
      "endpoints": {
        "chatCompletions": {
          "enabled": true
        }
      }
    }
  }
}

这会在网关端口上暴露/v1/chat/completions。语音聊天服务器用网关token认证,跟其他客户端一样。

第二个是添加语音智能体条目。Pipecat配置里的model字段是"clawdbot:voice",冒号后面的部分映射到配置里的智能体ID。需要对应的配置:

json
{
  "agents": {
    "list": [
      {
        "id": "voice",
        "workspace": "/path/to/your/clawd",
        "model": "anthropic/claude-sonnet-4-5"
      }
    ]
  }
}

你可以指向任何模型。Sonnet是语音对话的好默认选择,速度够快,能让对话流畅进行。Opus推理能力更强但延迟明显更高。根据你使用语音的场景来选择。



真实体验:延迟是存在的,但值得

让我诚实地说说延迟的问题。如果你跑的是Opus这种思考型模型,从你停止说话到Felix开始回应之间会有明显的停顿。STT和TTS流式传输都很快,Deepgram和ElevenLabs增加的延迟极小。但模型本身需要时间思考,用能力强的模型时这个停顿是真实存在的。

这感觉不像打电话,更像跟一个会停下来考虑你说什么的人对话。

这个延迟是否困扰你取决于使用场景。对于快速来回的命令式对话,延迟确实烦人。但对于头脑风暴、思考问题或获取状态更新,完全可以接受。你提问,等几秒,得到一个深思熟虑的回答。用Sonnet这种更快的模型可以缩短这个间隔,但会牺牲一些推理深度。

真正让这套系统区别于普通语音助手的是上下文。因为Felix背后有完整的智能体支持,对话是真正有用的。我可以询问项目状态,大声思考问题,Felix会用我已经忘记的相关上下文来反驳我。



最大的突破:语音改变了交互方式

最大的解锁不是技术本身,而是语音改变了你的交互方式。大声思考跟打字思考是不一样的。你会跑题,自我纠正,探索半成形的想法。好的模型能处理所有这些。

语音让AI助手从工具变成了伙伴。你可以在做其他事情的时候跟它交流,不需要盯着屏幕,不需要腾出手来打字。这种解放感是文字界面给不了的。



总搭建时间:15分钟搞定

如果你已经有Clawdbot在运行,大概需要15分钟。拿Deepgram密钥,免费额度很慷慨,复制.env文件,运行服务器。搞定。



完整文件:拿去直接用

所有代码都在一个gist里(点击标题),你可以直接丢给你的Clawd或者克隆使用。包含bot.py、server.py、index.html、pyproject.toml、.env.example,以及README里需要的Clawdbot配置。