Complete "Conectar agentes de IA a bases de datos SQL" primero para desbloquear esta lección.Ir a la lección anterior

Introducción a las bases de datos NoSQL y vectoriales para agentes de IA

Los agentes de IA necesitan algo más que simples tablas estructuradas. Cuando se enfrentan a contenido no estructurado, búsqueda semántica o embeddings a gran escala, las bases de datos relacionales tradicionales se quedan cortas. Ahí es donde entran los almacenes de documentos NoSQL y las bases de datos vectoriales.

Bases de datos de documentos como MongoDB almacenan registros flexibles similares a JSON. Son ideales cuando tu agente maneja payloads variados — por ejemplo, perfiles de usuario con campos opcionales, páginas web scrapeadas o historiales de chat donde cada conversación tiene una estructura diferente.

Bases de datos vectoriales como Pinecone, Weaviate o Chroma almacenan embeddings de alta dimensión y permiten a los agentes realizar búsqueda por similitud. En lugar de coincidir palabras clave exactas, el agente recupera los elementos que son semánticamente más cercanos a una consulta. Esto impulsa pipelines de RAG, sistemas de memoria y funciones de recomendación.

Conectando agentes a almacenes de documentos

El flujo de trabajo típico implica que un agente llame a una herramienta o función que envuelve operaciones de base de datos. En lugar de escribir consultas en crudo en el prompt, expones acciones seguras y parametrizadas como get_user_profile o log_conversation.

python
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["agent_store"]
def log_conversation(session_id: str, messages: list):
db.conversations.update_one(
{"session_id": session_id},
{"$set": {"messages": messages}},
upsert=True
)
def get_user_context(user_id: str) -> dict:
return db.users.find_one({"user_id": user_id})

En este patrón, el agente decide qué función llamar según la solicitud del usuario, y las funciones gestionan todas las interacciones con la base de datos entre bambalinas. El esquema de la base de datos se mantiene flexible: MongoDB aceptará cualquier forma que almacenes.

diagrama de flujo que muestra un agente recibiendo una solicitud, eligiendo entre una consulta al almacén de documentos y una búsqueda vectorial, y devolviendo una respuesta combinada

Uso de bases de datos vectoriales para recuperación semántica

Las bases de datos vectoriales convierten texto en arreglos numéricos (embeddings) usando un modelo como text-embedding-3-small de OpenAI o un sentence-transformer local. Una vez almacenados, la similitud se mide con distancia coseno o producto punto.

python
from openai import OpenAI
import chromadb
client = OpenAI()
chroma = chromadb.PersistentClient(path="./vector_store")
collection = chroma.get_or_create_collection("docs")
def embed(text: str) -> list:
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
def add_document(doc_id: str, content: str):
collection.add(ids=[doc_id], embeddings=[embed(content)], documents=[content])
def search_similar(query: str, top_k: int = 3) -> list:
results = collection.query(query_embeddings=[embed(query)], n_results=top_k)
return results["documents"][0]

El agente llama a search_similar cuando la pregunta del usuario requiere conocimiento más allá de su fecha de corte de entrenamiento. Los fragmentos recuperados se inyectan luego en el prompt como contexto para el modelo de lenguaje.

Elegir entre almacenes de documentos y vectoriales

Las bases de datos de documentos son la elección correcta cuando necesitas búsquedas exactas, esquemas flexibles y filtrado tradicional. Por ejemplo, obtener un pedido por ID o listar todas las sesiones de un tenant.

Las bases de datos vectoriales son la elección correcta cuando necesitas recuperación difusa basada en significado. Ejemplos incluyen encontrar artículos de ayuda relevantes para la redacción de un usuario, coincidir currículums con descripciones de puestos y localizar conversaciones pasadas que se asemejen al tema actual.

En la práctica, la mayoría de agentes en producción combinan ambas. La base de datos vectorial encuentra elementos semánticamente relacionados, y la base de datos de documentos obtiene los registros estructurados completos relacionados con esos elementos — por ejemplo, recuperar el perfil completo de usuario tras una coincidencia por similitud en tickets pasados.

Errores comunes y buenas prácticas

Un error frecuente es almacenar embeddings grandes dentro de una base de datos de documentos. Aunque posible, esto penaliza la velocidad de indexación y el rendimiento de las consultas. Mantén los embeddings en un almacén vectorial dedicado y guarda referencias (como un ID de documento) en tu almacén de documentos.

Otro error es olvidarse de gestionar los cambios de modelo de embeddings. Si cambias de modelo, debes re-embebir todo tu corpus: los vectores antiguos y nuevos no son comparables.

Por último, establece siempre filtros de metadatos en tus consultas vectoriales. Buscar entre millones de vectores es caro, así que acota por fecha, usuario o categoría antes de hacer el paso de similitud.

python
results = collection.query(
query_embeddings=[embed(query)],
n_results=5,
where={"user_id": "u_123", "created_at": {"$gt": 1700000000}}
)

Resumen

Las bases de datos de documentos NoSQL otorgan a los agentes de IA flexibilidad de esquema para datos variados del mundo real. Las bases de datos vectoriales añaden recuperación semántica que el SQL tradicional no puede igualar. Para agentes en producción, el patrón ganador es el híbrido: usa un almacén de documentos para estado estructurado y búsquedas exactas, y un almacén vectorial para búsqueda basada en significado. Mantén los embeddings en su almacén nativo, filtra pronto y planifica con antelación las actualizaciones de modelo.

Práctica de la lección

Punto de control de la lección

Repasa lo aprendido y recibe comentarios sobre tu trabajo.

0/7
01¿Cuál es la principal ventaja de una base de datos vectorial frente a un almacén de documentos tradicional para agentes de IA?
02En el patrón de almacén de documentos mostrado, ¿por qué log_conversation usa upsert=True?
03¿Qué función se usa para convertir texto en una representación numérica para una base de datos vectorial?
04¿Cuál es la arquitectura híbrida recomendada descrita en la lección?
05¿Qué ocurre si cambias tu modelo de embeddings después de poblar una base de datos vectorial?
06¿Por qué el ejemplo de código final usa un filtro where en collection.query()?
07¿Qué escenario se adapta mejor a una base de datos de documentos que a una base de datos vectorial?
Respondidas · 0/7
Trabajar con bases de datos NoSQL y vectoriales