🔍

Búsqueda Vectorial

👨‍🍳👑 Master Chef⏱️ 40 minutos

📋 Prerequisitos sugeridos

  • Python básico
  • ChromaDB

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:

  1. ChromaDB como base de datos vectorial
  2. Embeddings de Gemini (gratis)
  3. Función para agregar documentos
  4. Función para buscar similares
  5. 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 tradicionalBúsqueda vectorial
LIKE '%gato%'Busca "gato" literal
Solo coincidencias exactasEntiende sinónimos
No entiende contexto"mascota" → "gato", "perro"

Siguiente nivel

Servidor MCP Custom