Lo que vas a construir
Un motor de busqueda semantica que entiende el SIGNIFICADO de lo que buscas, no solo palabras clave.
Imagina buscar "animal domestico descansando" y que encuentre documentos sobre "el gato duerme en el sofa". Eso es busqueda vectorial: convierte texto en vectores matematicos y encuentra similitudes conceptuales.
Al terminar tendras un sistema en Python con ChromaDB que indexa documentos, crea embeddings con Gemini, y permite buscar por significado. Ideal para buscar en FAQs, articulos, o cualquier coleccion de texto.
El prompt para empezar
Crea un sistema de busqueda vectorial en Python con:
- ChromaDB como base de datos vectorial
- Embeddings de Gemini (gratis)
- Función para agregar documentos
- Función para buscar similares
- Mostrar score de similitud
Lo que la IA creará
import chromadb
from chromadb.utils import embedding_functions
import os
# Configurar embeddings con Gemini
gemini_ef = embedding_functions.GoogleGenerativeAiEmbeddingFunction(
api_key=os.environ["GEMINI_API_KEY"],
model_name="models/embedding-001"
)
# Crear cliente y colección
client = chromadb.PersistentClient(path="./vector_db")
collection = client.get_or_create_collection(
name="documentos",
embedding_function=gemini_ef,
metadata={"hnsw:space": "cosine"}
)
def add_documents(docs: list[dict]):
"""Agregar documentos con metadata"""
collection.add(
documents=[d["text"] for d in docs],
metadatas=[{"source": d.get("source", "unknown")} for d in docs],
ids=[f"doc_{i}" for i in range(len(docs))]
)
def search(query: str, n_results: int = 5):
"""Buscar documentos similares"""
results = collection.query(
query_texts=[query],
n_results=n_results,
include=["documents", "distances", "metadatas"]
)
for i, (doc, dist, meta) in enumerate(zip(
results["documents"][0],
results["distances"][0],
results["metadatas"][0]
)):
similarity = 1 - dist # Convertir distancia a similitud
print(f"{i+1}. [{similarity:.2%}] {doc[:100]}...")
print(f" Fuente: {meta['source']}")
# Ejemplo
docs = [
{"text": "El gato duerme en el sofá", "source": "mascotas.txt"},
{"text": "Python es un lenguaje de programación", "source": "tech.txt"},
{"text": "Mi perro corre en el parque", "source": "mascotas.txt"},
{"text": "JavaScript se usa para web", "source": "tech.txt"},
]
add_documents(docs)
search("animal doméstico descansando")
# → Encuentra "El gato duerme en el sofá" con alta similitud
Comparación SQL vs Vectorial
| SQL tradicional | Búsqueda vectorial |
|---|---|
LIKE '%gato%' | Busca "gato" literal |
| Solo coincidencias exactas | Entiende sinónimos |
| No entiende contexto | "mascota" → "gato", "perro" |