Saltar a contenido

Ollama y RAG

MDU usa Ollama para inferencia IA local, alimentando embeddings para el pipeline RAG (Generacion Aumentada por Recuperacion) y capacidades de chat.

Configuracion Ollama

  • Binario: /usr/local/bin/ollama
  • Servicio: ollama.service (systemd)
  • Puerto: 127.0.0.1:11434
  • Limite de memoria: 6GB (MemoryMax=6G)
  • Modelos cargados max: 1

Modelos

Modelo Tamano Proposito
nomic-embed-text 274MB Embeddings 768-dim para RAG
mistral:7b-instruct-q4_K_M 4.4GB Chat/razonamiento (respuestas RAG)
phi3:mini 2.2GB Alternativa ligera

Modulo Cliente

/opt/mdu-api/ollama.cjs — Modulo CommonJS con degradacion graciosa:

const { embed, chat, healthCheck } = require('./ollama.cjs');

// Generar embeddings
const vector = await embed("texto para embeber");
// Devuelve: Float64Array(768)

// Completado de chat
const answer = await chat("Que es una impresora FDM?");
// Devuelve: string

// Health check
const ok = await healthCheck();
// Devuelve: boolean

Todas las funciones devuelven null/false en error — nunca lanza excepciones.

Pipeline RAG

Arquitectura

Documento → Fragmentador → Embeddings (nomic-embed-text)
                              |
                              v
                        pgvector (tabla rag_documents)
                              |
                       Embedding de consulta
                              |
                              v
                        Busqueda similitud coseno
                              |
                              v
                        Top-K fragmentos → Mistral 7B → Respuesta

Componentes

  1. Fragmentador (/opt/mdu-api/chunker.cjs): Divide texto en fragmentos con estimacion de tokens
  2. Embeddings: Vectores 768-dimensionales via nomic-embed-text
  3. Almacenamiento: Tabla rag_documents con indice HNSW sobre vector(768)
  4. Busqueda: Similitud coseno via operador pgvector <=>
  5. Generacion: Mistral 7B genera respuestas del contexto recuperado

Esquema Base de Datos

CREATE TABLE rag_documents (
  id UUID PRIMARY KEY,
  content TEXT NOT NULL,
  metadata JSONB,
  embedding vector(768),
  created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX ON rag_documents
  USING hnsw (embedding vector_cosine_ops);

API Admin

Todos los endpoints RAG requieren autenticacion admin:

Metodo Ruta Descripcion
POST /api/admin/rag/ingest Fragmentar + embeber + almacenar
POST /api/admin/rag/query Busqueda semantica + respuesta LLM
GET /api/admin/rag/documents Listar documentos
GET /api/admin/rag/metrics Metricas RAG
DELETE /api/admin/rag/documents/:id Eliminar documento

pgvector

Imagen PostgreSQL: pgvector/pgvector:pg16 (reemplaza postgres:16-alpine estandar).

Version de extension: 0.8.2. Permite busqueda de similitud vectorial con indexacion HNSW para consultas rapidas de vecinos mas cercanos aproximados.