.. 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 [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! .. _py_voice_active_gpt: 18. Chat vocal avec GPT ============================ Cet exemple combine :ref:`py_stt`, :ref:`py_tts` 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 :ref:`py_online_llm` (section OpenAI) pour des instructions étape par étape. **Exécuter le code** .. raw:: html .. code-block:: 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. .. raw:: html .. code-block:: python 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 ?** #. 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) #. Utilisation du mot de réveil comme déclencheur .. code-block:: python 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. .. code-block:: python 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. #. Connexion au LLM .. code-block:: python 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 :ref:`py_online_llm` 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). #. Vision avec modèles multimodaux .. code-block:: python 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 ? »* #. Définir la personnalité du robot avec les instructions .. code-block:: python 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. #. Solution de repli clavier .. code-block:: python 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. #. 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. #. Trois backends LLM Le même pipeline ``VoiceActiveCrawler`` fonctionne avec différents backends LLM. Les leçons suivantes montrent deux alternatives : .. list-table:: :header-rows: 1 * - 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 - :ref:`py_voice_doubao` — Même approche cloud, adaptée au chinois avec le modèle Doubao de ByteDance. - :ref:`py_voice_ollama` — Fonctionne entièrement sur votre propre matériel, sans internet ni clé API requis.