Note

Bonjour, bienvenue dans la communauté des passionnés de Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez dans l’univers du Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes post-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aperçus exclusifs.

  • Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et concours : Participez à des concours et promotions spéciales.

👉 Prêt à explorer et à créer avec nous ? Cliquez sur [ici] et rejoignez-nous dès aujourd’hui !

18. Chat vocal avec GPT

Cet exemple combine 15. STT (Speech-to-Text), 16. TTS (Text-to-Speech) et un LLM basé sur GPT pour créer un robot entièrement interactif par la voix. PiCrawler écoute un mot de réveil, comprend votre parole, répond avec une conversation générée par l’IA et exécute des actions physiques en fonction du contexte.

Note

Le projet dépend de la classe VoiceActiveCrawler. Assurez-vous que le fichier voice_active_crawler.py est présent dans le répertoire examples. Créez également un fichier secret.py avec votre OPENAI_API_KEY. Si vous n’avez pas encore obtenu de clé API, consultez 17. Connexion aux LLMs en ligne (section OpenAI) pour des instructions étape par étape.

Exécuter le code

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

Après l’exécution, le robot initialise :

  • Le moteur STT pour la reconnaissance vocale

  • Le moteur TTS (Piper) pour les réponses parlées

  • Le client LLM (GPT-4o-mini) pour la conversation IA

  • Le détecteur de mot de réveil

Le robot vous salue avec un message de bienvenue. Dites le mot de réveil (par exemple « Hey Buddy ») pour commencer une conversation. Appuyez sur Ctrl+C pour quitter.

Code

Note

Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez aller dans le chemin du code source comme picrawler\examples. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet.

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",
)

# Nom du robot
NAME = "Buddy"

# Activer l'image (nécessite un modèle multimodal)
WITH_IMAGE = True

# Définir les modèles et les langues
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

# Activer la saisie clavier
KEYBOARD_ENABLE = True

# Activer le mot de réveil
WAKE_ENABLE = True
WAKE_WORD = ["hey buddy"]
# Réponse au mot de réveil, laisser vide pour désactiver
ANSWER_ON_WAKE = "Hi there"

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

# Définir les instructions
INSTRUCTIONS = """
You are a Raspberry Pi-based robotic spider developed by SunFounder, named Picrawler. You possess powerful AI capabilities similar to JARVIS from Iron Man. You can have conversations with people and perform actions based on the context of the conversation.

## Your Hardware Features

You have a physical body with the following features:
- 12 servos controlling 4 legs (3 servos per leg)
- A camera for vision
- Powered by a 7.4V 18650 battery pack
- Aluminum alloy body

## Actions You Can Perform:
["forward", "backward", "turn left", "turn right", "sit", "stand", "wave", "push up", "dance", "look left", "look right", "look up", "look down"]

## Response Requirements
### Format
You must respond in the following format:
RESPONSE_TEXT
ACTIONS: ACTION1, ACTION2, ...

### Style
Tone: lively, positive, humorous
Common expressions: likes to use jokes, metaphors, and playful teasing
Answer length: appropriately detailed

## Other Requirements
- Understand and go along with jokes
- For math problems, answer directly with the final result
- You know you're a spider robot
"""

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()

Comment ça fonctionne ?

  1. Qu’est-ce que VoiceActiveCrawler ?

    VoiceActiveCrawler est une classe de haut niveau qui relie quatre sous-systèmes en un seul pipeline interactif vocal :

    • STT — reconnaissance vocale (écoute votre voix)

    • LLM — conversation IA (GPT traite ce que vous avez dit)

    • TTS — synthèse vocale (prononce la réponse de l’IA)

    • Actions — mouvement physique (le robot exécute les commandes)

  2. Utilisation du mot de réveil comme déclencheur

    WAKE_ENABLE = True
    WAKE_WORD = ["hey buddy"]
    

    Lorsqu’il est activé, le robot écoute en continu le mot de réveil. Ce n’est qu’après l’avoir détecté que le robot commence un tour de conversation. Cela évite de répondre au bruit de fond.

    ANSWER_ON_WAKE = "Hi there"
    

    Lorsque le mot de réveil est reconnu, le robot peut optionnellement vous saluer avant d’écouter une commande. Définissez sur une chaîne vide pour désactiver le salut.

  3. Connexion au 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",
    )
    

    Le module picrawler.llm fournit un client compatible OpenAI. Stockez votre clé API dans un fichier secret.py séparé pour le garder hors du contrôle de version. Voir 17. Connexion aux LLMs en ligne pour savoir comment créer une clé API OpenAI et activer la facturation.

    gpt-4o-mini est recommandé : il est rapide, abordable et prend en charge les entrées multimodales (texte + images).

  4. Vision avec modèles multimodaux

    WITH_IMAGE = True
    

    Lorsqu’il est activé, le robot capture une photo de sa caméra et l’envoie avec votre question parlée. Le LLM peut alors « voir » ce que le robot voit — permettant des interactions comme « Quelle est la couleur de l’objet devant toi ? »

  5. Définir la personnalité du robot avec les instructions

    INSTRUCTIONS = """
    You are a Raspberry Pi-based robotic spider...
    ## Actions You Can Perform:
    ["forward", "backward", "turn left", ...]
    ...
    """
    

    La chaîne INSTRUCTIONS est le prompt système envoyé au LLM. Il définit :

    • L’identité et la personnalité du robot (humoristique, vif)

    • La liste des actions physiques disponibles

    • Le format de réponse requis : texte d’abord, puis une ligne ACTIONS:

    VoiceActiveCrawler analyse la ligne ACTIONS: de la réponse du LLM et exécute ces actions sur le robot.

  6. Solution de repli clavier

    KEYBOARD_ENABLE = True
    

    Lorsqu’il est activé, vous pouvez également taper des messages au clavier au lieu de parler. C’est utile dans les environnements bruyants ou lors des tests.

  7. Aperçu du pipeline

    La boucle de conversation complète fonctionne comme suit :

    1. Le robot écoute le mot de réveil (ou la saisie clavier).

    2. Une fois déclenché, il enregistre votre parole via STT.

    3. Le texte reconnu est envoyé au LLM, optionnellement avec une image de la caméra.

    4. Le LLM renvoie une réponse texte et une liste d’actions optionnelle.

    5. Le robot prononce la réponse via TTS et exécute les actions.

    6. La boucle revient à l’écoute du prochain mot de réveil.

  8. Trois backends LLM

    Le même pipeline VoiceActiveCrawler fonctionne avec différents backends LLM. Les leçons suivantes montrent deux alternatives :

    Caractéristique

    GPT (18)

    Doubao (19)

    Ollama (20)

    Exécuté sur

    Cloud

    Cloud

    Local

    Clé API

    Requise

    Requise

    Aucune

    Langue

    Anglais

    Chinois

    Anglais

    Vision

    Oui

    Oui

    Rarement