7. AI 语音助手

本课程将把您的 Pironman 5 Pro MAX 打造成一个 以语音为核心的 AI 助手。 通过提供的代码,机器人将能够:等待唤醒词、使用 Vosk 识别语音并转写为文本、将内容发送到 OpenAI LLM,并通过 Piper TTS 语音回复


开始之前

请确保您已完成以下准备:

  • 1. 测试 Piper — Piper 语音功能正常(例如可以播放 “Hello”)。

  • 测试 Vosk — Vosk 语音识别在您的语言环境中可正常使用(例如 en-us)。

  • 5. 连接在线 LLM — 您的 OpenAI API key 已保存在 secret.py 中,变量名为 OPENAI_API_KEY

  • Pironman 5 Pro MAX 已连接并可正常使用 麦克风扬声器

  • 具备稳定的 网络连接 (LLM 为在线服务)。


运行示例

cd ~/sunfounder-voice-assistant/examples/
sudo python3 voice_assistant.py

代码使用的配置:

  • LLM:OpenAIgpt-4o-mini

  • TTS:Piperen_US-ryan-low

  • STT:Vosken-us

  • 唤醒词: "hey buddy"

  • 键盘输入:已启用 (可选的手动输入方式)

  • 图像模式:已启用WITH_IMAGE=True)—— 如果未来需要使用图像功能,需要支持多模态的 LLM

运行流程:

  1. 助手启动后,会显示包含唤醒词的欢迎信息。

  2. 系统持续监听 “hey buddy” 唤醒词。

  3. 被唤醒后,您的语音将被转写为文本(Vosk → text)。

  4. 文本被发送到 OpenAI(gpt-4o-mini) 生成回复。

  5. 回复内容通过 Piperen_US-ryan-low)转换为语音并播放。

示例交互

You: Hey Buddy
Robot: Hi there!

You: What’s the capital of Italy?
Robot: The capital of Italy is Rome.

示例代码

from sunfounder_voice_assistant.voice_assistant import VoiceAssistant
from sunfounder_voice_assistant.llm import OpenAI as LLM
from secret import OPENAI_API_KEY as API_KEY

llm = LLM(
    api_key=API_KEY,
    model="gpt-4o-mini",
)

# Robot name
NAME = "Buddy"

# Enable image, need to set up a multimodal language model
WITH_IMAGE = True

# Set models and languages
LLM_MODEL = "gpt-4o-mini"
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

# Enable keyboard input
KEYBOARD_ENABLE = True

# Enable wake word
WAKE_ENABLE = True
WAKE_WORD = [f"hey {NAME.lower()}"]
# Set wake word answer, set empty to disable
ANSWER_ON_WAKE = "Hi there"

# Welcome message
WELCOME = f"Hi, I'm {NAME}. Wake me up with: " + ", ".join(WAKE_WORD)

# Set instructions
INSTRUCTIONS = f"""
You are a helpful assistant, named {NAME}.
"""

va = VoiceAssistant(
    llm,
    name=NAME,
    with_image=WITH_IMAGE,
    tts_model=TTS_MODEL,
    stt_language=STT_LANGUAGE,
    keyboard_enable=KEYBOARD_ENABLE,
    wake_enable=WAKE_ENABLE,
    wake_word=WAKE_WORD,
    answer_on_wake=ANSWER_ON_WAKE,
    welcome=WELCOME,
    instructions=INSTRUCTIONS,
)

if __name__ == "__main__":
    va.run()

代码说明:

  • OpenAI(..., model="gpt-4o-mini") — 本课程中仅使用 OpenAI 作为 LLM。

  • NAME / WAKE_WORD — 用于自定义助手名称和唤醒词(例如 “Buddy” 和 “hey buddy”)。

  • WITH_IMAGE=True — 为助手启用图像模式(此处未包含图像输入/输出逻辑)。

  • TTS_MODEL="en_US-ryan-low" — 指定回复所使用的 Piper 语音模型。

  • STT_LANGUAGE="en-us" — 指定 Vosk 语音识别所使用的语言。

  • KEYBOARD_ENABLE=True — 允许在调试过程中通过键盘手动输入文本。

  • WELCOME / INSTRUCTIONS — 启动欢迎语以及助手的人设/System Prompt。

  • va.run() — 启动主循环:唤醒 → 监听 → LLM 处理 → 语音播报

切换到其他 LLM 或 TTS

只需进行少量修改,您就可以轻松切换到其他 LLM、TTS 或 STT 语言:

  • 支持的 LLM:

    • OpenAI

    • Doubao

    • Deepseek

    • Gemini

    • Qwen

    • Grok

  • 1. 测试 Piper — 查看 Piper TTS 支持的语言。

  • 测试 Vosk — 查看 Vosk STT 支持的语言。

如需切换,只需修改代码中的初始化部分:

from sunfounder_voice_assistant.llm import Gemini as LLM
llm = LLM(api_key="YOUR_KEY", model="gemini-pro")

# Set models and languages
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

故障排查

  • 机器人无法响应唤醒词

    • 检查麦克风是否工作正常。

    • 确认 WAKE_ENABLE = True

    • 根据您的发音调整唤醒词。

    • 尽量减少背景噪音,并清晰发音。

  • 扬声器没有声音输出

    • 检查 TTS 模型名称是否正确(例如 en_US-ryan-low)。

    • 手动测试 Piper 或 Espeak 是否可正常工作。

    • 检查扬声器连接和音量设置。

  • API key 报错或请求超时

    • 检查 secret.py 中配置的 key 是否正确。

    • 确保网络连接稳定。

    • 确认所使用的 LLM 模型受支持(例如 gpt-4o-mini)。

  • 唤醒词可用,但没有回复

    • 检查 STT 语言是否与您的口音匹配。

    • 确认模型已正确下载。

    • 尝试输出调试日志,以确认 STT 是否正在正常运行。

  • TTS 正常,但 LLM 没有回复

    • 检查 API key 是否有效。

    • 确认模型名称和 LLM 配置是否正确。

    • 确保设备已连接互联网。