Saltar a contenido

Sistema de IA Local

Visión global del subsistema de inteligencia artificial de SmallCountry: modelos de lenguaje, reconocimiento de voz, síntesis de habla y agentes autónomos que corren íntegramente en hardware propio, sin enviar un solo dato a la nube.


Descripción general

La IA en SmallCountry responde al Principio 10 — Asistencia inteligente supervisada y al ADR-017: toda la inteligencia artificial corre en local, en el servidor Horus, sin depender de APIs externas. Tus datos, tus conversaciones y tus documentos nunca salen de tu red.

El sistema es degradable por diseño (Mecanismo 8 — IA Degradable). Si la GPU se satura, si Horus se apaga o si los modelos pesan demasiado, el sistema baja la calidad de las respuestas pero nunca deja de funcionar.


Pipeline de IA

flowchart LR
    subgraph Entrada["🎤 Entrada"]
        Voz["Voz<br/>micrófono · grabación"]
        Texto["Texto<br/>chat · documentos"]
        Evento["Eventos<br/>sensores · alertas"]
    end

    subgraph Procesamiento["⚙️ Procesamiento"]
        Whisper["Whisper<br/>STT · faster-whisper<br/>transcripción voz→texto"]
        Ollama["Ollama<br/>LLM · modelos locales<br/>llama3.1 · qwen2.5"]
        Qdrant["Qdrant<br/>RAG · búsqueda vectorial<br/>documentos propios"]
        Piper["Piper<br/>TTS · texto→voz<br/>síntesis en castellano"]
    end

    subgraph Agentes["🤖 Agentes"]
        Hermes["Hermes Agent<br/>orquestador principal<br/>skills · herramientas"]
        OpenWebUI["Open WebUI<br/>chat privado<br/>subida de documentos"]
        Sherlog["Sherlog<br/>análisis de logs<br/>lenguaje natural"]
        Continue["Continue.dev<br/>asistente de código<br/>code-server"]
    end

    subgraph Salida["📤 Salida"]
        Respuesta["Respuesta<br/>texto · voz estructurada"]
        Accion["Acción<br/>API call · webhook"]
        Almacen["Almacenamiento<br/>Joplin · Nextcloud"]
    end

    Entrada --> Procesamiento --> Agentes --> Salida

    style Entrada fill:#c8e6c9,stroke:#2e7d32,color:#000
    style Procesamiento fill:#bbdefb,stroke:#1565c0,color:#000
    style Agentes fill:#f9a8d4,stroke:#c2185b,color:#000
    style Salida fill:#ffe082,stroke:#f57f17,color:#000

Flujo de una consulta con voz

sequenceDiagram
    actor Persona as 👤 Persona
    participant Micro as 🎤 Micrófono (Android / Ubuntu)
    participant Whisper as 📝 Whisper (Horus)
    participant Ollama as 🧠 Ollama + Qdrant (Horus)
    participant Hermes as 🤖 Hermes Agent
    participant Piper as 🔊 Piper (Horus)
    participant Accion as ⚡ Servicio (API / webhook)

    Persona->>Micro: "¿Cuánta miel produjo la colmena 3 este mes?"
    Micro->>Whisper: Audio WAV (16kHz mono)
    Whisper->>Hermes: Texto transcrito
    Hermes->>Ollama: Prompt + contexto + tools
    Ollama->>Qdrant: Búsqueda semántica en documentos
    Qdrant->>Ollama: Fragmentos relevantes
    Ollama->>Hermes: Respuesta estructurada + tool call
    Hermes->>Accion: API call a farmOS (datos de producción)
    Accion->>Hermes: Datos de miel (colmena 3, mayo 2026)
    Hermes->>Ollama: Formular respuesta en lenguaje natural
    Ollama->>Hermes: "La colmena 3 produjo 8.4 kg de miel este mes"
    Hermes->>Piper: Texto para sintetizar
    Piper->>Persona: Audio de respuesta en castellano

Componentes

Componente Función Ficha
Ollama Servidor de modelos de lenguaje (LLM). Corre modelos como llama3.1, qwen2.5, deepseek Ficha
Qdrant Base de datos vectorial para RAG (Retrieval Augmented Generation). Indexa documentos propios Ficha
Whisper (modelo de transcripción de voz de OpenAI) Reconocimiento de voz STT (conversión de voz a texto). faster-whisper optimizado para CPU/GPU. Transcribe en castellano Ficha
Piper (sintetizador de voz neuronal) Síntesis de voz TTS (conversión de texto a voz). Modelos en castellano con calidad natural Ficha
Hermes Agent Agente orquestador. Conecta STT, LLM, TTS y herramientas externas. Skills modulares Ficha
Open WebUI Interfaz de chat privada. Similar a ChatGPT pero corriendo en local Ficha
Continue.dev Asistente de código dentro de code-server. Autocompletado, explicación, refactorización Ficha
Sherlog Analizador de logs con lenguaje natural. "¿Por qué falló el backup de anoche?" Ficha

Modelos disponibles

Modelo Tamaño RAM requerida Caso de uso
llama3.1:8b 4.7 GB 8 GB Asistente general, chat diario
qwen2.5:7b 4.4 GB 8 GB Análisis de documentos, RAG
deepseek-coder:6.7b 3.8 GB 6 GB Asistencia de código (Continue.dev)
nomic-embed-text 274 MB 1 GB Embeddings para Qdrant (RAG)
whisper-large-v3 3.1 GB 6 GB Transcripción de voz en castellano
piper-es 50 MB 512 MB Síntesis de voz en castellano

Hardware

Componente Especificación Propósito
GPU NVIDIA RTX 4060 8 GB Inferencia de LLM y Whisper en GPU
RAM 64 GB DDR5 Carga de múltiples modelos simultáneos
CPU Intel i7-13700H Inferencia de CPU para modelos pequeños y Piper
SSD 1 TB NVMe Almacenamiento de modelos (~40 GB) y caché de Qdrant
VRAM 8 GB GDDR6 Cabe un modelo 7B-8B cuantizado + embeddings

Con esta configuración, Horus puede ejecutar simultáneamente un LLM de 8B parámetros, Whisper para transcripción continua y Piper para síntesis de voz, con latencias de inferencia por debajo de 2 segundos para respuestas de chat y 5 segundos para transcripción de audio de 30 segundos.


Modo degradado

Si Horus no está disponible (apagón, mantenimiento, fallo de GPU), la IA se degrada siguiendo el Mecanismo 8 — IA Degradable:

Escenario Degradación Qué sigue funcionando
Sin GPU (driver caído) Inferencia por CPU en Horus (5-10x más lenta) Todo, pero más lento
Horus apagado Sin IA local Los servicios de usuario (Nextcloud, Immich) no dependen de IA
Sin Qdrant RAG desactivado Chat genérico sin contexto de documentos propios
Sin Whisper Sin entrada por voz Chat por texto en Open WebUI sigue funcionando
Sin Piper Sin respuesta por voz Respuestas solo en texto

Ningún servicio Tier B o superior depende de la IA para funcionar. La IA es un aumentador, no un requisito.


Para el arquitecto

Configuración de Ollama

# /etc/ollama/config.yaml
host: "0.0.0.0:11434"
num_gpu: 1
max_loaded_models: 2
keep_alive: "30m"

Modelos cargados por defecto

ollama list
# llama3.1:8b        (siempre en VRAM)
# qwen2.5:7b         (bajo demanda, 30min TTL)
# nomic-embed-text   (siempre en VRAM para Qdrant)

Flujo Whisper → Piper

Micrófono (Android/Ubuntu) → HTTP POST audio WAV → Whisper LXC (faster-whisper)
→ Hermes Agent (procesamiento + LLM) → Piper LXC (síntesis) → Respuesta audio

Fichas relacionadas