Nota

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 [aquí] y únete hoy mismo.

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

cd ~/picrawler/examples
sudo python3 20_voice_active_crawler_ollama.py

Código

Nota

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.

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?

  1. ¿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).

    # Instale Ollama, luego descargue un modelo:
    ollama pull llama3.2:3b
    
  2. Conexión LLM local

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

  3. Desactivando la visión

    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.

  4. Desactivando Think

    vad = VoiceActiveCrawler(
        ...
        disable_think=True,
    )
    

    Algunos modelos Ollama (especialmente modelos de razonamiento como qwen2.5) emiten etiquetas <think> en su salida. Establecer disable_think=True le dice a VoiceActiveCrawler que elimine estas etiquetas para que el robot solo pronuncie la respuesta final.

  5. El mismo pipeline, fuera de línea

    El pipeline de conversación es idéntico a 18. Chat de voz con 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.

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