18. 与 GPT 进行语音对话

本示例结合了 15. STT(语音转文本)16. TTS(文本转语音) 和一个基于 GPT 的 LLM, 创建了一个完全语音交互的机器人。PiCrawler 监听唤醒词,理解您的语音, 以 AI 生成的对话回复,并根据上下文执行物理动作。

备注

本项目依赖 VoiceActiveCrawler 类。请确保 voice_active_crawler.py 文件存在于 examples 目录中。同时创建包含 OPENAI_API_KEYsecret.py 文件。如果尚未获取 API 密钥,请参阅 17. 连接在线大语言模型 (OpenAI 部分)了解详细步骤。

运行代码

cd ~/picrawler/examples
sudo python3 18_voice_active_crawler_gpt.py

运行后,机器人初始化:

  • STT 引擎用于语音识别

  • TTS 引擎(Piper)用于语音回复

  • LLM 客户端(GPT-4o-mini)用于 AI 对话

  • 唤醒词检测器

机器人会用欢迎消息问候您。说出唤醒词(例如 “Hey Buddy”)开始对话。 按 Ctrl+C 退出。

代码

备注

您可以**修改/重置/复制/运行/停止**以下代码。但在此之前,您需要进入源代码 路径,如 picrawler\examples。修改代码后,可以直接运行以查看效果。

from picrawler.llm import OpenAI as LLM
from secret import OPENAI_API_KEY as API_KEY

from voice_active_crawler import VoiceActiveCrawler

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

# 机器人名称
NAME = "Buddy"

# 启用图像(需要多模态模型)
WITH_IMAGE = True

# 设置模型和语言
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

# 启用键盘输入
KEYBOARD_ENABLE = True

# 启用唤醒词
WAKE_ENABLE = True
WAKE_WORD = ["hey buddy"]
ANSWER_ON_WAKE = "Hi there"

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

INSTRUCTIONS = """
You are a Raspberry Pi-based robotic spider developed by SunFounder, named Picrawler...
## Actions You Can Perform:
["forward", "backward", "turn left", "turn right", "sit", "stand", "wave", "push up", "dance", "look left", "look right", "look up", "look down"]
"""

vad = VoiceActiveCrawler(
    llm, name=NAME, with_image=WITH_IMAGE,
    stt_language=STT_LANGUAGE, tts_model=TTS_MODEL,
    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__':
    vad.run()

工作原理

  1. VoiceActiveCrawler 是什么?

    VoiceActiveCrawler 是一个高级类,将四个子系统整合到一个语音交互管道中:

    • STT — 语音识别(听取您的语音)

    • LLM — AI 对话(GPT 处理您说的话)

    • TTS — 语音合成(朗读 AI 回复)

    • 动作 — 物理运动(机器人执行命令)

  2. 使用唤醒词作为触发器

    WAKE_ENABLE = True
    WAKE_WORD = ["hey buddy"]
    

    启用后,机器人持续监听唤醒词。只有检测到唤醒词后,机器人才会开始对话。 这避免了对背景噪音的响应。

  3. 连接 LLM

    from picrawler.llm import OpenAI as LLM
    from secret import OPENAI_API_KEY as API_KEY
    
    llm = LLM(api_key=API_KEY, model="gpt-4o-mini")
    

    picrawler.llm 模块提供 OpenAI 兼容的客户端。推荐使用 gpt-4o-mini: 快速、实惠,支持多模态输入(文本+图像)。

  4. 多模态模型的视觉功能

    WITH_IMAGE = True
    

    启用后,机器人会从摄像头拍照并与语音问题一起发送。LLM 可以”看见”机器人 所见的景象。

  5. 用指令设置机器人个性

    INSTRUCTIONS 字符串是发送给 LLM 的系统提示,定义了机器人的身份、 个性、可用动作列表和回复格式。

  6. 管道概览

    1. 机器人监听唤醒词

    2. 通过 STT 录制语音

    3. 识别的文本发送给 LLM(可选带摄像头图像)

    4. LLM 返回文本回复和动作列表

    5. 机器人通过 TTS 朗读回复并执行动作

    6. 循环回到监听状态

  7. 三种 LLM 后端

    相同的 VoiceActiveCrawler 管道支持不同 LLM 后端:

    特性

    GPT (18)

    Doubao (19)

    Ollama (20)

    运行环境

    云端

    云端

    本地

    API 密钥

    需要

    需要

    不需要

    语言

    英语

    中文

    英语

    视觉

    支持

    支持

    较少