Modelos de Lenguaje, Embeddings y Bases de Datos Vectoriales con Ollama y ChromaDB
馃幆 ¿Qu茅 vamos a construir?
Un sistema de inteligencia artificial local que pueda:
Entender y generar texto usando modelos de lenguaje (sin internet)
Convertir texto a n煤meros (embeddings) que capturen su significado
Almacenar y buscar informaci贸n usando similitud sem谩ntica
馃 Parte 1: Ollama - Tu IA Local
馃敡 ¿Qu茅 es Ollama?
Imagina que Ollama es como descargar Netflix para ver pel铆culas SIN internet. En lugar de pel铆culas, descargas modelos de IA que funcionan directamente en tu computadora.
馃摜 Instalaci贸n Paso a Paso
# 1. Ve a la p谩gina oficial:
# https://ollama.com/
# 2. Descarga el instalador para tu sistema:
# Windows → ollama-setup.exe
# Mac → Ollama-darwin.zip
# Linux → curl -fsSL https://ollama.com/install.sh | sh
# 3. Instala (siguiente, siguiente, siguiente ✅)
# 4. Verifica la instalaci贸n:
# Abre tu terminal (CMD, PowerShell, o Terminal)
# Escribe:
ollama --version馃帹 Visualizaci贸n: C贸mo funciona Ollama
[TU COMPUTADORA]
↓
[Ollama] ← Descarga modelos (como apps)
↓
[Modelo IA] ← Ej: Gemma3, Llama3, DeepSeek-R1
↓
[Respuestas] ← Funciona OFFLINE ✅馃 Descargando tu Primer Modelo
Los modelos son como diferentes niveles de conocimiento:
| Modelo | Tama帽o | Nivel | Analog铆a |
|---|---|---|---|
| Gemma3:4b | 3.3 GB | 馃煝 B谩sico | Estudiante de secundaria |
| Llama3:8b | 4.7 GB | 馃煛 Intermedio | Estudiante universitario |
| DeepSeek-R1:32b | 20 GB | 馃煚 Avanzado | Maestro especialista |
| Llama3:70b | 40 GB | 馃敶 Experto | Investigador PhD |
# Ver modelos disponibles en tu PC:
ollama list
# Descargar un modelo nuevo:
ollama run gemma3:4b # Modelo peque帽o y r谩pido
# O descargar uno espec铆fico:
ollama run deepseek-r1:1.5b馃挰 Conversando con tu Modelo
# 1. Iniciar el modelo:
ollama run gemma3:4b
# 2. Conversar (aparecer谩 >>>):
>>> Hola, ¿c贸mo est谩s?
>>> ¿Qu茅 fecha es hoy?
>>> Expl铆came qu茅 es la fotos铆ntesis
# 3. Salir:
/bye o Ctrl+D⚠️ Importante: Los modelos tienen fecha de corte (como enciclopedias antiguas). No saben eventos recientes a menos que los actualices.
馃К Parte 2: Embeddings - El "ADN" del Texto
馃攳 ¿Qu茅 son los embeddings?
Imagina que cada palabra o frase tiene un c贸digo de barras num茅rico 煤nico. Los embeddings son esos c贸digos, pero que tambi茅n capturan significado y relaciones.
馃搳 Visualizaci贸n: De Texto a N煤meros
"El gato corre r谩pido"
↓ (sentence-transformers)
[0.23, -0.45, 0.89, ..., 0.12] # 384 n煤meros (vector)
"El felino se mueve velozmente"
↓
[0.25, -0.43, 0.88, ..., 0.11] # Casi igual → Significado similar
"La pizza est谩 caliente"
↓
[0.89, 0.12, -0.56, ..., -0.34] # Muy diferente → Tema distinto馃洜️ Instalando Sentence-Transformers
# En tu terminal (con Python instalado):
pip install sentence-transformers torch馃捇 Ejemplo Pr谩ctico: Creando Embeddings
from sentence_transformers import SentenceTransformer
# 1. Cargar el modelo (se descarga autom谩ticamente)
modelo = SentenceTransformer('all-MiniLM-L6-v2')
# Este modelo pesa ~80MB y es muy eficiente
# 2. Textos de ejemplo
textos = [
"El perro juega en el parque",
"Los caninos se divierten en 谩reas verdes",
"Hoy voy a cocinar pasta",
"Preparar茅 espaguetis para la cena"
]
# 3. Convertir a embeddings
embeddings = modelo.encode(textos)
print(f"Tenemos {len(textos)} textos")
print(f"Cada texto se convierte en {len(embeddings[0])} n煤meros")
print(f"El embedding del primer texto: {embeddings[0][:5]}...") # Primeros 5 n煤meros馃梽️ Parte 3: ChromaDB - Tu Biblioteca Inteligente
馃摎 ¿Qu茅 es ChromaDB?
Imagina ChromaDB como una biblioteca m谩gica donde no buscas por t铆tulo, sino por significado. Le preguntas "libros sobre animales que vuelan" y te encuentra textos sobre p谩jaros, murci茅lagos, e incluso insectos.
馃攧 Flujo Completo del Sistema
[Documentos de tu negocio]
↓
[Embeddings → C贸digos num茅ricos]
↓
[Almacenar en ChromaDB]
↓
[Usuario hace pregunta]
↓
[Buscar textos similares]
↓
[Ollama respunde con contexto]馃摝 Instalando ChromaDB
pip install chromadb馃彈️ Creando tu Primera Base de Datos Vectorial
import chromadb
from sentence_transformers import SentenceTransformer
# 1. Inicializar ChromaDB (crea una carpeta local)
chroma_client = chromadb.PersistentClient(path="./mi_base_datos")
# 2. Crear una "colecci贸n" (como una tabla)
coleccion = chroma_client.create_collection(name="documentos_empresa")
# 3. Modelo para embeddings
modelo_embed = SentenceTransformer('all-MiniLM-L6-v2')
# 4. Documentos de ejemplo (podr铆an ser manuales, FAQs, etc.)
documentos = [
"Los empleados tienen 30 d铆as de vacaciones al a帽o",
"Para reportar una falla, enviar email a soporte@empresa.com",
"El horario de oficina es de 9 AM a 6 PM",
"Los proyectos deben entregarse cada viernes",
"El c贸digo de vestimenta es business casual"
]
# 5. Generar IDs 煤nicos
ids = [f"doc_{i}" for i in range(len(documentos))]
# 6. Generar embeddings y guardar
embeddings = modelo_embed.encode(documentos).tolist()
# 7. A帽adir a ChromaDB
coleccion.add(
documents=documentos,
embeddings=embeddings,
ids=ids
)
print(f"✅ Base de datos creada con {len(documentos)} documentos")馃攷 Buscando Informaci贸n por Significado
# Pregunta del usuario
pregunta = "¿Cu谩ntos d铆as libres tengo?"
# Convertir pregunta a embedding
embedding_pregunta = modelo_embed.encode([pregunta]).tolist()
# Buscar documentos similares
resultados = coleccion.query(
query_embeddings=embedding_pregunta,
n_results=2 # Traer los 2 m谩s relevantes
)
print("馃搫 Documentos m谩s relevantes:")
for i, doc in enumerate(resultados['documents'][0]):
print(f"{i+1}. {doc}")Salida esperada:
馃搫 Documentos m谩s relevantes:
1. Los empleados tienen 30 d铆as de vacaciones al a帽o
2. El horario de oficina es de 9 AM a 6 PM馃殌 Parte 4: Sistema Completo - IA con Memoria
馃 Integrando Todo: Ollama + Embeddings + ChromaDB
import subprocess
import json
import chromadb
from sentence_transformers import SentenceTransformer
class SistemaIAEmpresarial:
def __init__(self):
self.modelo_embed = SentenceTransformer('all-MiniLM-L6-v2')
self.chroma_client = chromadb.PersistentClient(path="./empresa_db")
# Crear o cargar colecci贸n
try:
self.coleccion = self.chroma_client.get_collection("conocimiento_empresa")
except:
self.coleccion = self.chroma_client.create_collection("conocimiento_empresa")
def agregar_conocimiento(self, textos):
"""A帽ade documentos a la base de conocimientos"""
embeddings = self.modelo_embed.encode(textos).tolist()
ids = [f"doc_{self.coleccion.count() + i}" for i in range(len(textos))]
self.coleccion.add(
documents=textos,
embeddings=embeddings,
ids=ids
)
print(f"✅ A帽adidos {len(textos)} documentos")
def buscar_contexto(self, pregunta, n_resultados=3):
"""Encuentra informaci贸n relevante para la pregunta"""
embedding = self.modelo_embed.encode([pregunta]).tolist()
resultados = self.coleccion.query(
query_embeddings=embedding,
n_results=n_resultados
)
# Combinar documentos encontrados
contexto = "\n".join(resultados['documents'][0])
return contexto
def preguntar_a_ollama(self, pregunta, contexto):
"""Usa Ollama para responder con contexto"""
# Crear prompt con contexto
prompt = f"""Bas谩ndote en la siguiente informaci贸n:
{contexto}
Pregunta: {pregunta}
Responde de manera clara y concisa:"""
# Llamar a Ollama (debe estar instalado)
comando = ["ollama", "run", "gemma3:4b", prompt]
try:
resultado = subprocess.run(
comando,
capture_output=True,
text=True,
input=prompt,
timeout=30
)
return resultado.stdout
except Exception as e:
return f"Error: {str(e)}"
def preguntar(self, pregunta):
"""Flujo completo: buscar + responder"""
print(f"馃攳 Buscando informaci贸n relevante...")
contexto = self.buscar_contexto(pregunta)
print(f"馃 Consultando al modelo de IA...")
respuesta = self.preguntar_a_ollama(pregunta, contexto)
return respuesta
# 馃摑 EJEMPLO DE USO COMPLETO
if __name__ == "__main__":
# 1. Crear sistema
sistema = SistemaIAEmpresarial()
# 2. Alimentar con conocimiento (solo una vez)
conocimiento_inicial = [
"Las vacaciones son de 30 d铆as por a帽o calendario",
"El proceso de reporte de bugs requiere llenar el formato IT-102",
"Las reuniones de equipo son cada lunes a las 10 AM",
"El presupuesto para proyectos debe aprobarse por el gerente de 谩rea",
"El d铆a de pago es el 煤ltimo viernes de cada mes"
]
sistema.agregar_conocimiento(conocimiento_inicial)
# 3. Hacer preguntas
preguntas = [
"¿Cu谩ntos d铆as de vacaciones tengo?",
"¿C贸mo reporto un error en el software?",
"¿Cu谩ndo es la pr贸xima reuni贸n?"
]
for pregunta in preguntas:
print(f"\n馃馃捈 Pregunta: {pregunta}")
respuesta = sistema.preguntar(pregunta)
print(f"馃 Respuesta: {respuesta[:200]}...") # Primeros 200 caracteres馃搱 Diagrama del Sistema Completo
馃幃 Ejercicio Pr谩ctico: Crea tu Propio Asistente
馃幆 Reto: Asistente de Recetas de Cocina
# Paso 1: Configura el conocimiento
recetas = [
"Para hacer arroz blanco: 1 taza de arroz, 2 tazas de agua, sal al gusto. Cocinar 20 minutos.",
"Huevos revueltos: Batir 2 huevos, a帽adir sal, cocinar en sart茅n con mantequilla.",
"Ensalada C茅sar: Lechuga, pollo, crutones, queso parmesano y aderezo C茅sar.",
"Pasta con tomate: Cocinar pasta, preparar salsa con tomate, ajo y albahaca."
]
# Paso 2: Crea el sistema
# (Usa el c贸digo de la clase SistemaIAEmpresarial pero c谩mbiale el nombre)
# Paso 3: Pregunta cosas como:
# - "¿C贸mo hago huevos revueltos?"
# - "¿Qu茅 necesito para una ensalada?"
# - "¿Cu谩nto tiempo se cocina el arroz?"馃搵 Resumen en Tabla
| Herramienta | Funci贸n | Analog铆a | Ejemplo de Uso |
|---|---|---|---|
| Ollama | Ejecuta modelos de IA localmente | Netflix offline | ollama run gemma3:4b |
| Sentence-Transformers | Convierte texto a n煤meros (embeddings) | C贸digo de barras sem谩ntico | modelo.encode("texto") |
| ChromaDB | Almacena y busca por similitud | Biblioteca m谩gica | coleccion.query(embedding) |
| Sistema Completo | IA con conocimiento espec铆fico | Experto de empresa | Preguntas sobre procesos internos |
馃挕 Consejos para Principiantes
Empieza peque帽o: Usa
gemma3:4b(3.3GB) antes de modelos grandesPrueba primero: Haz embeddings con 5-10 documentos antes de miles
Mant茅n organizado: Nombra bien tus colecciones en ChromaDB
Experimenta: Prueba diferentes modelos de embeddings
Backup: Guarda tu carpeta de ChromaDB (contiene toda tu base de datos)
馃毃 Soluci贸n de Problemas Comunes
| Problema | Soluci贸n |
|---|---|
| "Ollama no se reconoce" | Reinicia terminal o reinicia PC despu茅s de instalar |
| "Error de memoria" | Usa modelos m谩s peque帽os o a帽ade m谩s RAM |
| "Embeddings muy lentos" | Usa all-MiniLM-L6-v2 (el m谩s r谩pido) |
| "ChromaDB no encuentra similitudes" | Aseg煤rate que los embeddings se generaron con el mismo modelo |
馃摎 Recursos Adicionales
Documentaci贸n oficial:
Modelos populares para Ollama:
llama3:8b- Buen balancemistral:7b- Excelente para c贸digodeepseek-coder:6.7b- Especializado en programaci贸n
Modelos de embeddings:
all-MiniLM-L6-v2- Peque帽o y r谩pido (recomendado)paraphrase-multilingual-MiniLM-L12-v2- Multiling眉eall-mpnet-base-v2- Mayor precisi贸n
馃帀 ¡Felicidades!
Ahora tienes un sistema completo de IA que:
✅ Funciona sin internet
✅ Entiende el significado (no solo palabras clave)
✅ Aprende de tus documentos espec铆ficos
✅ Responde preguntas contextuales
Pr贸ximo paso: A帽ade documentos reales de tu empresa o proyectos y convi茅rtete en el experto en IA local de tu organizaci贸n.
¿Listo para crear algo incre铆ble?
Comentarios
Publicar un comentario