.. note:: Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook. ¡Explora más a fondo Raspberry Pi, Arduino y ESP32 con otros entusiastas! **¿Por qué unirse?** - **Soporte experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprende y comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Avances exclusivos**: Obtén acceso anticipado a anuncios de nuevos productos y vistas previas. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes. - **Promociones festivas y sorteos**: Participa en sorteos y promociones de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _py_voice_active_gpt: 18. Chat de voz con GPT ============================ Este ejemplo combina :ref:`py_stt`, :ref:`py_tts` y un LLM basado en GPT para crear un robot completamente interactivo por voz. PiCrawler escucha una palabra de activación, entiende su habla, responde con conversación generada por IA y realiza acciones físicas según el contexto. .. note:: El proyecto depende de la clase **VoiceActiveCrawler**. Asegúrese de que el archivo ``voice_active_crawler.py`` esté presente en el directorio ``examples``. También cree un archivo ``secret.py`` con su ``OPENAI_API_KEY``. Si aún no ha obtenido una clave API, consulte :ref:`py_online_llm` (sección OpenAI) para instrucciones paso a paso. **Ejecutar el código** .. raw:: html .. code-block:: cd ~/picrawler/examples sudo python3 18_voice_active_crawler_gpt.py Después de ejecutar, el robot inicializa: - El motor STT para reconocimiento de voz - El motor TTS (Piper) para respuestas habladas - El cliente LLM (GPT-4o-mini) para conversación IA - El detector de palabra de activación El robot le saluda con un mensaje de bienvenida. Diga la palabra de activación (ej. "Hey Buddy") para comenzar una conversación. Presione **Ctrl+C** para salir. **Código** .. note:: Puede **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código siguiente. Pero antes, debe ir a la ruta del código fuente como ``picrawler\examples``. Después de modificar el código, puede ejecutarlo directamente para ver el efecto. .. 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", ) # Nombre del robot NAME = "Buddy" # Activar imagen (requiere modelo multimodal) WITH_IMAGE = True # Establecer modelos e idiomas TTS_MODEL = "en_US-ryan-low" STT_LANGUAGE = "en-us" # Activar entrada por teclado KEYBOARD_ENABLE = True # Activar palabra de activación WAKE_ENABLE = True WAKE_WORD = ["hey buddy"] # Respuesta a palabra de activación, dejar vacío para desactivar ANSWER_ON_WAKE = "Hi there" # Mensaje de bienvenida WELCOME = f"Hi, I'm {NAME}. Wake me up with: " + ", ".join(WAKE_WORD) # Establecer instrucciones 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() **¿Cómo funciona?** #. ¿Qué es VoiceActiveCrawler? ``VoiceActiveCrawler`` es una clase de alto nivel que conecta cuatro subsistemas en un solo pipeline interactivo por voz: - **STT** — reconocimiento de voz (escucha su voz) - **LLM** — conversación IA (GPT procesa lo que dijo) - **TTS** — síntesis de voz (pronuncia la respuesta de la IA) - **Acciones** — movimiento físico (el robot ejecuta comandos) #. Usar palabra de activación como disparador .. code-block:: python WAKE_ENABLE = True WAKE_WORD = ["hey buddy"] Cuando está activado, el robot escucha continuamente la palabra de activación. Solo después de detectarla, el robot comienza un turno de conversación. Esto evita responder al ruido de fondo. .. code-block:: python ANSWER_ON_WAKE = "Hi there" Cuando se reconoce la palabra de activación, el robot puede saludarle opcionalmente antes de escuchar un comando. Establezca como cadena vacía para desactivar el saludo. #. Conectando el 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", ) El módulo ``picrawler.llm`` proporciona un cliente compatible con OpenAI. Almacene su clave API en un archivo ``secret.py`` separado para mantenerlo fuera del control de versiones. Consulte :ref:`py_online_llm` para saber cómo crear una clave API de OpenAI y activar la facturación. Se recomienda ``gpt-4o-mini``: es rápido, asequible y admite entrada multimodal (texto + imágenes). #. Visión con modelos multimodales .. code-block:: python WITH_IMAGE = True Cuando está activado, el robot captura una foto de su cámara y la envía junto con su pregunta hablada. El LLM puede entonces "ver" lo que el robot ve — permitiendo interacciones como *"¿De qué color es el objeto frente a ti?"* #. Definiendo la personalidad del robot con instrucciones .. code-block:: python INSTRUCTIONS = """ You are a Raspberry Pi-based robotic spider... ## Actions You Can Perform: ["forward", "backward", "turn left", ...] ... """ La cadena ``INSTRUCTIONS`` es el **prompt del sistema** enviado al LLM. Define: - La identidad y personalidad del robot (humorístico, animado) - La lista de acciones físicas disponibles - El formato de respuesta requerido: texto primero, luego una línea ``ACTIONS:`` ``VoiceActiveCrawler`` analiza la línea ``ACTIONS:`` de la respuesta del LLM y ejecuta esas acciones en el robot. #. Alternativa por teclado .. code-block:: python KEYBOARD_ENABLE = True Cuando está activado, también puede escribir mensajes por teclado en lugar de hablar. Esto es útil en entornos ruidosos o durante las pruebas. #. Resumen del pipeline El bucle de conversación completo funciona así: 1. El robot escucha la palabra de activación (o entrada de teclado). 2. Una vez activado, graba su voz a través de STT. 3. El texto reconocido se envía al LLM, opcionalmente con una imagen de la cámara. 4. El LLM devuelve una respuesta de texto y una lista de acciones opcional. 5. El robot pronuncia la respuesta por TTS y realiza las acciones. 6. El bucle vuelve a escuchar la siguiente palabra de activación. #. Tres backends LLM El mismo pipeline ``VoiceActiveCrawler`` funciona con diferentes backends LLM. Las siguientes lecciones muestran dos alternativas: .. list-table:: :header-rows: 1 * - Característica - GPT (18) - Doubao (19) - Ollama (20) * - Se ejecuta en - Cloud - Cloud - Local * - Clave API - Requerida - Requerida - Ninguna * - Idioma - Inglés - Chino - Inglés * - Visión - Sí - Sí - Raramente - :ref:`py_voice_doubao` — El mismo enfoque cloud, adaptado para chino con el modelo Doubao de ByteDance. - :ref:`py_voice_ollama` — Se ejecuta completamente en su propio hardware, sin internet ni clave API necesarios.