Asistente IA local con ChromaDB y Ollama en 2026

Construir un asistente IA local con arquitectura de capas separadas, ChromaDB como base vectorial, Ollama para inferencia y retrieval híbrido no es un proyecto de fin de semana ni algo que salga bien al primer intento. La clave de una arquitectura de asistente IA local que realmente funciona está en desacoplar cada componente desde el arranque, antes de escribir una sola línea de código de negocio.

En 30 segundos

  • Una arquitectura local viable tiene tres capas independientes: LLM (Ollama), embeddings y almacenamiento vectorial (ChromaDB), y orquestación. Cambiar una no rompe las otras.
  • ChromaDB usa SQLite como backend por defecto, sin configuración de servidor, y soporta búsqueda híbrida (semántica + keyword) desde la misma instancia.
  • El retrieval híbrido supera al puramente vectorial en consultas con términos técnicos exactos, nombres propios y números de versión.
  • Los modelos con menos de 7B parámetros corren en CPU a velocidades usables (5-10 tokens/segundo), lo que los hace viables sin GPU dedicada.
  • Una estrategia de fallback bien diseñada puede enrutar a APIs externas solo cuando la confianza del modelo local está por debajo de un umbral, sin exponer datos sensibles.

Arquitectura de capas: por qué separar LLM, embeddings y almacenamiento

Un asistente IA local es, en su forma más simple, tres cosas que trabajan juntas: un modelo de lenguaje que genera texto, un sistema que convierte texto en vectores numéricos, y una base de datos que guarda esos vectores y los recupera por similitud. El error más común es mezclarlos en un solo proceso monolítico.

Ponele que usás LangChain con Ollama y ChromaDB todo en un solo script de Python. Funciona. Hasta que querés cambiar el modelo LLM de Llama 3.1 a Mistral, o actualizar ChromaDB a una versión con mejor performance, o reemplazar los embeddings con un modelo fine-tuned para tu dominio específico. En la arquitectura monolítica, cualquiera de esos cambios requiere tocar el código en varios lugares y rezar para que nada se rompa.

La separación de responsabilidades en tres capas resuelve eso. Capa 1: el servidor LLM (Ollama corriendo en localhost:11434). Capa 2: el motor de embeddings (un modelo separado, puede ser el mismo Ollama o sentence-transformers). Capa 3: el almacenamiento vectorial (ChromaDB). La orquestación, sea LangChain, LlamaIndex, o código propio, habla con cada capa por su interfaz.

¿Cuándo esto parece overkill? Casi nunca. Incluso para proyectos personales, la modularidad te ahorra tiempo en debugging. Cuando el modelo empieza a dar respuestas raras, sabés exactamente en qué capa buscar el problema.

Elegir el modelo LLM local: criterios de decisión según hardware

La primera pregunta práctica es cuánta VRAM tenés. O si no tenés GPU dedicada, cuánta RAM. Acá viene lo concreto:

ModeloTamañoVRAM mínimaTokens/seg GPUTokens/seg CPUUso recomendado
Phi-3 Mini3.8B3 GB60-808-12Tareas simples, dispositivos de baja potencia
Gemma 2 2B2B2 GB80-10010-15Respuestas rápidas, clasificación
Mistral 7B7B6 GB40-555-8Comprensión general, código básico
Llama 3.3 8B8B8 GB35-504-7Balance calidad/velocidad
Llama 3.1 70B Q470B (cuantizado)40 GB15-25no viableMáxima calidad, servidor dedicado
asistente ia local arquitectura diagrama explicativo

Los datos de velocidad son aproximados y varían con el hardware específico. Según el ranking de modelos locales de 2026 en Javadex, los modelos de 7-8B en cuantización Q4_K_M son el punto óptimo para la mayoría de los casos de uso en hardware consumer.

La estrategia de fallback a modelos más pequeños tiene sentido cuando la latencia importa más que la calidad: si el usuario espera respuesta en menos de 3 segundos y tenés solo CPU disponible, Phi-3 o Gemma 2B son opciones viables. Si la calidad de la respuesta es lo que importa (y podés esperar 10-15 segundos), Llama 3.3 8B es otra historia. Completá la lectura con nuestra comparativa: cómo elegir entre Claude y Gemini.

Base de datos vectorial: ChromaDB y por qué es el punto de partida correcto

ChromaDB es una base de datos vectorial open source que usa SQLite como backend persistente por defecto. Sin configuración de servidor, sin Docker obligatorio, sin credenciales. Instalás el paquete, creás una colección, y empezás a guardar embeddings.

Eso lo hace radicalmente diferente a Qdrant o Milvus, que requieren un proceso separado. Para desarrollo local o aplicaciones de una sola máquina, esa diferencia importa mucho.

Cuándo ChromaDB alcanza y cuándo no

Según la documentación oficial de ChromaDB, el backend SQLite maneja bien colecciones de hasta varios millones de vectores en hardware moderno. Para la mayoría de los proyectos de asistentes locales, eso es más que suficiente.

Los límites reales aparecen en tres escenarios: cuando necesitás búsqueda distribuida en múltiples nodos (ahí Qdrant o Milvus ganan), cuando el volumen supera varios millones de documentos con actualizaciones frecuentes, o cuando necesitás replicación con alta disponibilidad. Para esos casos, ChromaDB tiene un modo cliente-servidor que permite separar la lógica de la base de datos, pero para escala real conviene evaluar alternativas.

Los metadatos en ChromaDB son clave para el filtrado. Guardar metadatos como fuente del documento, fecha de creación, tipo de contenido, o tags permite hacer consultas más precisas: “buscá solo en documentos de los últimos 30 días” o “solo en la categoría técnica”.

Retrieval híbrido: cuándo los vectores solos no alcanzan

La búsqueda vectorial captura similitud semántica. Si preguntás “cómo mejorar el rendimiento de consultas”, va a encontrar documentos que hablen de optimización, performance, velocidad, aunque no usen esas palabras exactas. Es poderosa para entender intención.

El problema aparece con términos técnicos exactos. Buscás “error CUDA_OUT_OF_MEMORY en PyTorch 2.3.1” y el retrieval vectorial puede devolverte documentos sobre errores de memoria en general, pero perder el documento que tiene exactamente ese error y ese código de versión específico. La búsqueda keyword captura exactitud literal.

Acá viene lo interesante: el retrieval híbrido combina ambas. Hacés las dos búsquedas en paralelo y fusionás los resultados con un algoritmo de ranking (Reciprocal Rank Fusion es el más común). Los documentos que aparecen alto en ambas búsquedas suben al tope. Los que solo aparecen en una bajan pero no desaparecen. Lo explicamos a fondo en diferencias clave entre Gemini y GPT.

Casos donde cada estrategia brilla

Solo vectorial: preguntas en lenguaje natural, consultas conceptuales, cuando el usuario no conoce los términos técnicos exactos. “¿Cómo hago que mi modelo recuerde conversaciones anteriores?” va a encontrar bien documentos sobre memoria, contexto, historial.

Solo keyword: búsqueda de nombres propios, versiones específicas, códigos de error, funciones o clases con nombres únicos. Si buscás “función get_embedding_dimension”, la búsqueda vectorial puede confundirse. Keyword la encuentra directo.

Híbrido: la mayoría de los casos de producción. ¿Alguien verificó que el puro vectorial supera al híbrido en algún benchmark independiente con datos reales de dominio técnico? En general no, y los papers sobre RAG de 2025-2026 consistentemente muestran ventajas del híbrido en dominios especializados.

Pipeline de embeddings: qué modelo usar para convertir texto en vectores

El modelo de embeddings determina qué tan bien tu sistema entiende semánticamente tu contenido. No es el LLM que genera respuestas, es el modelo que convierte cada chunk de texto en un vector numérico para almacenarlo en ChromaDB.

Para uso general en español o inglés técnico, `nomic-embed-text` (disponible en Ollama) o `all-MiniLM-L6-v2` (via sentence-transformers) son puntos de partida sólidos. El primero tiene contexto de 8192 tokens, útil cuando tus documentos son largos. El segundo es más liviano y rápido.

Los embeddings custom para dominio específico (fine-tuned en tu documentación interna, por ejemplo) pueden mejorar la calidad de retrieval entre 10% y 30% en benchmarks específicos del dominio, pero el costo de entrenamiento y mantenimiento es real. Para la mayoría de los proyectos, los modelos pre-entrenados generales alcanzan y no tiene sentido complejizar. Habría que ver si tu caso de uso específico justifica el overhead.

Una herramienta práctica para validar calidad de embeddings: calculá la similitud coseno entre pares de oraciones que vos sabés que deberían ser similares vs. pares que no. Si el modelo da alta similitud a cosas no relacionadas, es señal de que no es el indicado para tu dominio. Tema relacionado: cuál modelo es más potente en 2026.

Estrategia de fallback: cuándo escalar a la nube sin comprometer datos

Ponele que tu asistente local recibe una consulta muy específica sobre un evento reciente que no está en su base de conocimiento. El modelo local va a alucinar o va a decir que no sabe. ¿Cuándo conviene enrutar esa consulta a una API externa?

La respuesta depende de dos métricas que podés medir: la confianza del retrieval y la confianza del modelo. Si el retrieval no encontró documentos relevantes (similitud coseno por debajo de 0.6, por ejemplo), eso es señal de que la pregunta está fuera del dominio local. Si el modelo genera texto con alta perplexity (señal de que está “adivinando”), otro indicador.

La arquitectura que funciona según el análisis de arquitecturas RAG escalables es: primero intentar local, registrar métricas de confianza, y solo si están por debajo del umbral definido, reenviar la consulta (o una versión anonimizada de ella) a la API externa. Eso te da lo mejor de los dos mundos sin exponer datos sensibles en consultas que tu sistema local puede manejar bien.

El logging de fallbacks es importante. Si estás escalando el 40% de las consultas a la nube, algo anda mal con tu base de conocimiento local. Si es el 5%, es normal y esperado.

Privacidad, latencia y costo: el análisis real de IA local

Las ventajas de correr todo local son reales y medibles. Los datos nunca salen de tu servidor. La latencia de inferencia no depende de la red (un modelo 7B en una GPU decente responde en menos de 2 segundos). No pagás por token generado.

Los desafíos también son reales.

Actualizar modelos requiere descargar archivos de varios GB y validar que no hayan regresiones. El debugging es más difícil sin telemetría externa. Si querés hostear esto en un servidor, necesitás hardware que justifique el costo. Para calcular el ROI: si usás APIs externas a razón de USD 10-50 por mes, la inversión en hardware se amortiza en 12-24 meses dependiendo del volumen. Para equipos pequeños con uso intensivo, la matemática puede favorecer lo local. Para uso ocasional, las APIs cloud son más convenientes. Si el servidor lo vas a alojar, donweb.com tiene opciones de VPS que pueden servir como base para este tipo de setup.

Según el análisis de asistentes IA locales vs. cloud, la privacidad de datos es el factor decisivo para la mayoría de los equipos que adoptan IA local, por encima del costo.

Producción: monitoreo, versionado y testing sin telemetría externa

Lanzar un asistente IA local a producción y asumir que va a funcionar igual en seis meses es optimismo infundado. Los modelos no se degradan solos, pero tu base de conocimiento sí: documentos desactualizados, embeddings generados con un modelo que ya no usás, chunks mal cortados que se colaron en la indexación.

Sin telemetría externa, el monitoreo es manual pero posible. Definí un conjunto de consultas de evaluación con respuestas esperadas. Correlas cada semana contra el sistema actual. Si la tasa de respuestas que superan tu criterio de calidad baja más de 5 puntos porcentuales, investigá.

Para el versionado: guardá en metadatos de ChromaDB qué versión del modelo de embeddings generó cada vector. Cuando cambies el modelo, regenerás los embeddings de todas las colecciones y los guardás con el nuevo tag de versión. Eso te permite comparar calidad entre versiones antes de hacer el switch definitivo. Más contexto en alternativas europeas en desarrollo de IA.

El A/B testing entre estrategias de retrieval (solo vectorial vs. híbrido) se puede implementar a nivel de orquestación: un porcentaje de las consultas va por una estrategia, el resto por la otra. Medís calidad de respuesta con una métrica simple (¿el usuario hizo follow-up preguntando por aclaración? = señal de respuesta insuficiente). Después de 500-1000 consultas tenés datos suficientes para decidir.

Errores comunes al implementar un asistente IA local

  • Chunks demasiado grandes o demasiado pequeños: chunks de 2000 tokens pierden precisión en el retrieval porque el vector promedia demasiado contenido. Chunks de 50 tokens pierden contexto. El rango de 256-512 tokens con 20% de overlap es el punto de partida más razonable para texto técnico.
  • No separar el modelo de embeddings del LLM: usar el mismo modelo Ollama para generar embeddings y para responder preguntas es técnicamente posible pero ineficiente. Los modelos de chat están optimizados para generación, no para producir buenos vectores de similitud. Usá modelos de embedding dedicados (nomic-embed-text, por ejemplo).
  • Ignorar el preprocessing de documentos: meter PDFs o HTML directo en ChromaDB sin limpiar markup, headers, footers o contenido boilerplate contamina los embeddings. Un paso de limpieza antes de la indexación mejora el retrieval más que cambiar el modelo.
  • No versionar la colección de ChromaDB: reindexar con un modelo diferente sin registrar qué versión generó qué vectores hace imposible el debugging posterior. Siempre guardá el nombre y versión del modelo de embeddings como metadato.
  • Asumir que mayor tamaño de modelo siempre es mejor: para tareas de extracción de información o respuesta sobre documentos propios, un modelo de 7B bien instruido puede superar a uno de 70B mal prompeado. El prompt engineering importa tanto como el modelo.

Preguntas Frecuentes

¿Cómo construir un asistente IA que funcione completamente local?

Necesitás tres componentes: Ollama para correr el LLM local (disponible en Linux, Mac y Windows), ChromaDB para almacenamiento vectorial, y un modelo de embeddings. El flujo básico: indexás tus documentos convirtiéndolos en chunks, generás embeddings para cada chunk y los guardás en ChromaDB. Cuando llega una consulta, convertís la pregunta en embedding, buscás los chunks más similares en ChromaDB, y los pasás como contexto al LLM en Ollama para que genere la respuesta.

¿Qué diferencia hay entre un RAG local y uno en la nube?

La diferencia central es dónde procesa la inferencia y dónde se almacenan los datos. En RAG local, el LLM corre en tu hardware y los documentos nunca salen de tu servidor. En RAG cloud, enviás los documentos y consultas a una API externa (OpenAI, Anthropic, Google). El RAG local tiene latencia predecible sin dependencia de red y privacidad total, pero requiere hardware con suficiente RAM o VRAM. El RAG cloud escala sin límite de hardware pero tiene costo por token y dependencia de terceros.

¿Cuál es la mejor arquitectura para un asistente IA con ChromaDB y Ollama?

La arquitectura más robusta separa tres capas: Ollama como servidor LLM en localhost:11434, ChromaDB como base vectorial persistente, y un modelo de embeddings dedicado (nomic-embed-text o all-MiniLM). La orquestación puede ser LangChain, LlamaIndex, o código propio en Python. El retrieval híbrido (vectorial + keyword) supera al puro vectorial en dominios técnicos con terminología específica.

¿Por qué usar retrieval híbrido en lugar de solo búsqueda vectorial?

La búsqueda vectorial captura similitud semántica pero falla con términos exactos: nombres de funciones, versiones de librerías, códigos de error específicos. La búsqueda keyword captura exactitud literal pero no entiende sinónimos ni variaciones. El retrieval híbrido combina ambas mediante Reciprocal Rank Fusion, y en benchmarks de dominios técnicos consistentemente mejora la precisión del retrieval entre 10% y 25% respecto al puramente vectorial.

¿Cuáles son las decisiones técnicas más críticas al construir IA local?

El tamaño de chunk para indexación (256-512 tokens con overlap es el punto de partida), la elección del modelo de embeddings (separado del LLM generativo), y la estrategia de fallback (cuándo escalar a APIs externas) son las tres decisiones que más impactan la calidad final. Después viene el modelo LLM, que muchos priorizan pero que tiene menos efecto si el retrieval está mal configurado: un buen retrieval con un modelo mediocre supera a un modelo excelente con retrieval deficiente.

Conclusión

Construir una asistente IA local con arquitectura de capas separadas, ChromaDB y Ollama es un proyecto técnico accesible en 2026 con hardware consumer. La clave no está en elegir el modelo más grande ni en la herramienta de orquestación, sino en las decisiones de diseño que parecen menores: separar embeddings del LLM, implementar retrieval híbrido, versionar las colecciones vectoriales desde el primer día.

Lo que realmente diferencia un prototipo de un sistema que funciona en producción seis meses después es el monitoreo manual sistemático y una estrategia de fallback bien definida. Sin eso, la degradación silenciosa es inevitable y vas a enterarte cuando los usuarios ya estén frustrados.

Si estás evaluando empezar, el stack mínimo viable es Ollama + ChromaDB + un script de Python que maneje el pipeline de indexación y consulta. Eso puede estar funcionando en un día. Después agregás complejidad donde los datos te digan que la necesitás, no antes.

Fuentes

Desplazarse hacia arriba