.. 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.