.. 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_ollama: 20. Chat de voz local con Ollama ================================================== Este ejemplo reemplaza la API de GPT basada en la nube con un LLM **Ollama** ejecutado localmente. Todo el procesamiento de IA permanece en su propia máquina — sin internet requerido, sin claves API que gestionar. Es un robot interactivo por voz completamente fuera de línea. **Ejecutar el código** .. raw:: html .. code-block:: cd ~/picrawler/examples sudo python3 20_voice_active_crawler_ollama.py **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 Ollama as LLM from voice_active_crawler import VoiceActiveCrawler # Si Ollama se ejecuta en el mismo Raspberry Pi, use "localhost". # Si se ejecuta en otra computadora de su red local, reemplace con la IP. llm = LLM( ip="localhost", model="llama3.2:3b" // puede usar cualquier modelo ) # Nombre del robot NAME = "Buddy" # Activar imagen (requiere modelo multimodal) WITH_IMAGE = False # 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, disable_think=True, ) if __name__ == '__main__': vad.run() **¿Cómo funciona?** #. ¿Qué es Ollama? `Ollama `_ es una herramienta para ejecutar grandes modelos de lenguaje localmente en su propio hardware. A diferencia de la lección GPT que llama a una API en la nube, este ejemplo ejecuta todo en el dispositivo — sus conversaciones nunca salen del Raspberry Pi (o de su red local). .. code-block:: # Instale Ollama, luego descargue un modelo: ollama pull llama3.2:3b #. Conexión LLM local .. code-block:: python from picrawler.llm import Ollama as LLM llm = LLM( ip="localhost", model="llama3.2:3b" ) La clase ``Ollama`` se conecta a un servidor Ollama a través de su API compatible con OpenAI. Diferencias clave respecto a la configuración cloud de GPT: - **Sin clave API** — no se necesita autenticación para un servidor local. - **Dirección IP** — use ``"localhost"`` si Ollama se ejecuta en la misma Pi, o una IP LAN como ``"192.168.1.100"`` si se ejecuta en otra computadora. - **Modelo** — cualquier modelo que haya descargado en Ollama funciona (``llama3.2:3b``, ``qwen2.5:7b``, ``mistral``, etc.). #. Desactivando la visión .. code-block:: python WITH_IMAGE = False La mayoría de los modelos Ollama no admiten entrada multimodal (imagen). Establecer ``WITH_IMAGE`` en ``False`` omite el paso de captura de cámara. Si descarga un modelo compatible con visión (ej. ``llava``), puede establecerlo en ``True``. #. Desactivando Think .. code-block:: python vad = VoiceActiveCrawler( ... disable_think=True, ) Algunos modelos Ollama (especialmente modelos de razonamiento como ``qwen2.5``) emiten etiquetas ```` en su salida. Establecer ``disable_think=True`` le dice a ``VoiceActiveCrawler`` que elimine estas etiquetas para que el robot solo pronuncie la respuesta final. #. El mismo pipeline, fuera de línea El pipeline de conversación es idéntico a :ref:`py_voice_active_gpt`: 1. La detección de palabra de activación inicia un turno. 2. STT convierte su voz en texto. 3. El texto se envía al LLM Ollama local. 4. El LLM devuelve una respuesta y acciones opcionales. 5. TTS pronuncia la respuesta y el robot realiza las acciones. La diferencia crítica: **el paso 3 se ejecuta en su propio hardware**, sin dependencia de la nube, sin límites de velocidad y con total privacidad. #. Consideraciones de hardware Ejecutar un LLM localmente consume muchos recursos. En un Raspberry Pi: - **Modelos pequeños** (3B parámetros, como ``llama3.2:3b``) funcionan lentamente pero funcionan; espere varios segundos de procesamiento por respuesta. - **Modelos grandes** (7B+) serán demasiado lentos para uso interactivo en un Pi. - Para mejor rendimiento, ejecute Ollama en una computadora separada en su red local y apunte el parámetro ``ip`` hacia ella.