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¶
- Fragmentador (
/opt/mdu-api/chunker.cjs): Divide texto en fragmentos con estimacion de tokens - Embeddings: Vectores 768-dimensionales via
nomic-embed-text - Almacenamiento: Tabla
rag_documentscon indice HNSW sobrevector(768) - Busqueda: Similitud coseno via operador pgvector
<=> - 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.