Ir al contenido principal

Tutorial de Weaviate: saca partido a la búsqueda vectorial

Explora las funcionalidades de Weaviate, un motor de búsqueda vectorial en tiempo real y de código abierto, con nuestra guía completa para principiantes.
Actualizado 17 sept 2026  · 11 min leer

Explorar con IA

ChatGPTClaudePerplexity

Weaviate es un motor de búsqueda vectorial en tiempo real, modular, nativo en la nube y de código abierto que te permite almacenar objetos de datos y embeddings vectoriales y consultarlos en función de medidas de similitud. En este tutorial, veremos qué es Weaviate y sus conceptos clave, aprenderemos a ponerlo en marcha, crear un esquema, añadir datos y consultarlos con la interfaz GraphQL de Weaviate. También cubriremos cómo usar Weaviate con Python y hablaremos de buenas prácticas y consejos para el diseño del esquema, la importación de datos y la optimización de consultas.

¿Qué es Weaviate?

Weaviate es una base de datos vectorial que almacena tanto objetos como vectores, lo que permite combinar la búsqueda vectorial. Es modular, nativo en la nube y en tiempo real, lo que facilita escalar modelos de machine learning. Weaviate incluye módulos opcionales para texto, imagen y otros tipos de medios que puedes seleccionar según tu tarea y tus datos. También puedes usar más de un módulo si trabajas con datos variados.

Entendiendo los embeddings

Los datos no estructurados, como texto, imágenes y audio, no tienen un formato predefinido, lo que dificulta su gestión con bases de datos y métodos tradicionales.

Para que estos datos sean utilizables en aplicaciones de IA y machine learning, se convierten en vectores numéricos mediante embeddings.

Los embeddings actúan como diccionarios especializados que transforman datos de alta dimensión en representaciones numéricas compactas, facilitando su procesamiento eficiente por modelos de IA.

Son esenciales para reducir la dimensionalidad y superar las limitaciones de los métodos de codificación tradicionales, permitiendo a la IA entender relaciones complejas y el contexto dentro de los datos.

Modelo de embedding de texto

Modelo de embedding de texto - Fuente de la imagen

Entendiendo las bases de datos vectoriales

Las bases de datos tradicionales almacenan datos en tablas, que se pueden consultar con SQL. Sin embargo, SQL no está bien preparado para buscar en datos no estructurados, como texto o imágenes. Las bases de datos vectoriales, en cambio, almacenan los datos como vectores que se consultan con medidas de similitud.

Esto las hace idóneas para tareas como la búsqueda semántica, las preguntas y respuestas y la búsqueda generativa. Los vectores se obtienen con un modelo de embeddings de ML: no son más que la representación numérica del objeto original (texto, imagen, audio, vídeo, etc.).

Imagina un escenario en el que se usa un modelo de lenguaje para analizar y clasificar grandes conjuntos de documentos de texto. Cada documento podría transformarse en un vector de alta dimensión que capture su esencia semántica.

Almacenar estos vectores en una base de datos tradicional puede no ser eficiente para tareas como la búsqueda por similitud o el clustering.

Aquí es donde una base de datos vectorial resulta muy útil. Está optimizada para almacenar vectores y realizar operaciones vectoriales de alta velocidad, como buscar los vecinos más cercanos o calcular la similitud del coseno entre vectores.

Diagrama de base de datos vectorial

Fuente de la imagen

Pinecone es otra base de datos vectorial muy popular y una gran alternativa a Weaviate. Si quieres saber más sobre Pinecone, echa un vistazo al tutorial Mastering Vector Databases with Pinecone.

Cómo configurar Weaviate

Para configurar Weaviate, puedes usar Docker Compose o instalarlo manualmente. Se recomienda Docker Compose porque simplifica el proceso de instalación. Una vez instalado Weaviate, puedes verificar la instalación ejecutando una consulta sencilla.

Para Docker Compose, descarga este archivo YAML de Weaviate. Cuando lo tengas, simplemente ejecuta:

docker compose up -d

Otras formas de usar Weaviate son:

Para usar Weaviate en Python puedes instalar el cliente de Python de weaviate con pip.

!pip install -U weaviate-client

Conceptos clave en Weaviate

Objeto de datos

En Weaviate, cada elemento de datos pertenece a un grupo llamado "Class" y tiene ciertas características llamadas "Properties". Estos elementos (representados como documentos JSON) son colecciones basadas en clases.

Cada elemento de datos se representa con un vector (modelo de embeddings de machine learning). Cada colección basada en clases contiene objetos de la misma clase, definidos por un esquema común.

Módulos

Weaviate está diseñado de forma flexible, lo que te permite añadir funciones opcionales como convertir datos a vectores o crear copias de seguridad.

Sin estos complementos, la versión básica de Weaviate funciona como una base de datos específicamente diseñada para datos vectoriales.

Diagrama del transformador de Weaviate

Fuente de la imagen

Almacenamiento

Weaviate es una base de datos fiable que guarda los datos al instante y soporta fallos tanto de software como de hardware.

Cuando buscas algo usando vectores, Weaviate te devuelve el elemento completo (a veces llamado "documento" en otras bases de datos) y no solo un identificador como un ID.

Si combinas búsquedas tradicionales y vectoriales, los filtros se aplican antes de la búsqueda vectorial, garantizando que recibas exactamente el número de resultados que has pedido. Esto es distinto a filtrar después de la búsqueda, donde el número de resultados puede variar.

Puedes actualizar o borrar libremente datos y sus vectores incluso mientras lees de la base de datos.

GraphQL

Puedes interactuar con Weaviate usando sus APIs, que incluyen una API RESTful y una API GraphQL. Las bibliotecas cliente de todos los lenguajes de programación son compatibles con estas funcionalidades.

GraphQL es un lenguaje de consultas para APIs que te permite solicitar exactamente los datos que necesitas. Ofrece una forma más eficiente y flexible de interactuar con bases de datos que métodos tradicionales como REST.

Se eligió la interfaz GraphQL por varios motivos, entre ellos:

  • Permite conectar datos en Weaviate mediante referencias cruzadas, por lo que un lenguaje de consultas basado en grafos como GraphQL resulta muy eficaz.
  • GraphQL evita pedir datos de más o de menos, entregando solo la información específica que solicitas, lo que mejora el rendimiento.
  • Simplifica el proceso y reduce la probabilidad de errores.

Crear una clase en Weaviate

Cada objeto de Weaviate pertenece a una clase. Puedes crear la clase manualmente o usar la función Auto-schema de Weaviate para generarla. Si la creas manualmente, tendrás más control sobre el modelo de datos.

Para crear una clase con la biblioteca cliente de Python:

class_name = "Item description"
class_object = {"class": class_name}
client.schema.create_class(class_object)  

Normalmente también especificarás configuraciones adicionales. Un ejemplo más realista, tomado de Weaviate.io, sería:

{
"class": "Article",
"vectorizer": "text2vec-cohere",
"vectorIndexConfig": {
"distance": "cosine",
},
"moduleConfig": {
"generative-openai": {}
},
"properties": [
{
"name": "title",
"dataType": ["text"]
},
{
"name": "chunk",
"dataType": ["text"]
},
{
"name": "chunk_no",
"dataType": ["int"]
},
{
"name": "url",
"dataType": ["text"],
"tokenization": "field"
},
],
}

Fíjate en que se define un modelo de vectorización text2vec-cohere y una métrica de distancia cosine. Observa cómo las propiedades se definen como una lista de diccionarios.

Crear un objeto en Weaviate

El objeto pertenece a una clase. Los objetos pueden omitir propiedades de la clase y también añadir propiedades nuevas. A continuación tienes un ejemplo de cómo añadir un objeto a la clase Article.

uuid = client.data_object.create({
'question': 'question here ...',
'answer': 'answer here ...'
}, 'Article')

Puedes asignar opcionalmente un vector para representar cada objeto. Si no defines un vector, Weaviate usará su vectorizador por defecto.

uuid = client.data_object.create(
data_object={
'question': 'question here ...',
'answer': 'answer here ...',
},
class_name='Article',
vector=[0.12345] * 1536

Ejemplo completo de cómo crear y usar una base de datos vectorial en Weaviate con el cliente de Python

Este es un ejemplo que muestra cómo crear una clase y luego añadir un objeto a esa clase usando el cliente de Python de Weaviate. Primero debes instalar el cliente de Python con pip.

!pip install -U weaviate-client

Para trabajar con Weaviate, debes tener una instancia operativa de Weaviate. Tienes dos opciones: usar una instancia alojada y totalmente gestionada en el servicio en la nube de Weaviate, o usar Weaviate en modo Embedded, que ejecuta la instancia en segundo plano dentro de tu aplicación.

# Para usar embedded
import weaviate
from weaviate.embedded import EmbeddedOptions
import json
import os


client = weaviate.Client(
    embedded_options=EmbeddedOptions(),
    additional_headers = {
        "X-OpenAI-Api-Key": "YOUR_OPENAI_KEY"
    }
)

Crear una clase es muy sencillo:

class_obj = {
    "class": "Question",
    "vectorizer": "text2vec-openai",      
"moduleConfig": {
        "text2vec-openai": {},
        "generative-openai": {}
    }
}


client.schema.create_class(class_obj)

Si estableces el vectorizer en None, tendrás que proporcionar los vectores tú mismo como una lista.

Ahora podemos añadir objetos a la clase creada Question mediante el proceso de importación por lotes. Usaremos el jeopardy Q&A en formato JSON. Tiene este aspecto:

Fuente de datos (Crédito: Weaviate oficial)

Fuente de datos (crédito: Weaviate oficial)

# Cargar datos
import requests
url = 'https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/jeopardy_tiny.json'
resp = requests.get(url)
data = json.loads(resp.text)


# Configurar un proceso por lotes
with client.batch(
    batch_size=100
) as batch:
    # Importar por lotes todas las preguntas
    for i, d in enumerate(data):
        print(f"importing question: {i+1}")


        properties = {
            "answer": d["Answer"],
            "question": d["Question"],
            "category": d["Category"],
        }


        client.batch.add_data_object(
            properties,
            "Question",
        )

Este ejemplo se ha reproducido a partir de la documentación de Weaviate.

Buenas prácticas y consejos para Weaviate

Veamos algunas recomendaciones útiles para usar Weaviate de forma eficaz. Ya sea al diseñar tu esquema, importar datos u optimizar consultas, estas buenas prácticas te ayudarán a sacarle el máximo partido a Weaviate.

Diseño del esquema

  • Diseña tu esquema para que sea flexible y escalable. Así podrás añadir propiedades nuevas y modificar las existentes sin tener que rehacer el esquema.
  • Usa identificadores únicos para cada entidad y acción. Te facilitará las consultas y evitarás duplicados.
  • Emplea tipos semánticos para definir las propiedades de entidades y acciones. Facilita las consultas y garantiza la coherencia en todo el esquema.

Importación de datos

  • Utiliza la importación por lotes para añadir datos de forma eficiente. Podrás cargar grandes volúmenes de una vez y evitar problemas de rendimiento.
  • Usa la API RESTful para añadir datos. Te permitirá automatizar la importación e integrarla con otras herramientas.
  • Trabaja con formatos de datos compatibles, como JSON o CSV. Así te aseguras de que la importación sea correcta y evitas errores.

Optimización de consultas

  • Utiliza la interfaz GraphQL de Weaviate para consultar los datos. Te permitirá realizar consultas complejas y filtrar según criterios específicos.
  • Usa paginación para limitar la cantidad de datos que devuelve cada consulta. Mejorarás el rendimiento y reducirás la carga del servidor.
  • Emplea caché para los datos de acceso frecuente. Mejorará el rendimiento y disminuirá el número de consultas necesarias.

ChromaDB es otra base de datos vectorial de código abierto muy popular en la comunidad de ciencia de datos. Con Chroma DB puedes gestionar documentos de texto, convertir texto en embeddings y hacer búsquedas por similitud con facilidad. Si quieres saber más sobre ChromaDB, consulta el tutorial de Chroma DB.

Conclusión

Este tutorial de Weaviate es una guía completa para entender y sacar partido a Weaviate, un motor de búsqueda vectorial en tiempo real, nativo en la nube y de código abierto. El artículo cubre desde los fundamentos de qué es Weaviate y cómo se diferencia de las bases de datos tradicionales, hasta los detalles de su configuración y uso efectivo.

Weaviate destaca por su capacidad para manejar datos no estructurados mediante embeddings vectoriales, lo que lo convierte en una herramienta potente para aplicaciones de machine learning e IA. Su arquitectura modular aporta flexibilidad y te permite elegir módulos opcionales según tus necesidades. El artículo también profundiza en la importancia de los embeddings y explica cómo transforman datos de alta dimensión en un formato fácil de procesar por los modelos de IA.

Si quieres seguir aprendiendo sobre Weaviate, echa un vistazo a nuestro webinar sobre bases de datos vectoriales para data science con Weaviate en Python.


Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

Científico de Datos, Fundador y Creador de PyCaret

Temas
Inteligencia Artificial

¡Empieza a trabajar con IA hoy!

Curso

Conceptos de la IA generativa

2 h
117.2K
Aprovecha la IA generativa con responsabilidad, aprende cómo se desarrollan estos modelos de IA y cómo afectarán a la sociedad en el futuro.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow
Relacionado

blog

Las 7 mejores bases de datos vectoriales en 2026

Una guía completa sobre las mejores bases de datos vectoriales. Domina el almacenamiento de datos de alta dimensión, descifra información no estructurada y aprovecha las incrustaciones vectoriales para aplicaciones de IA.
Moez Ali's photo

Moez Ali

14 min

Tutorial

Tutorial de pgvector: Integrar la búsqueda vectorial en PostgreSQL

Descubre cómo mejorar PostgreSQL con capacidades de búsqueda vectorial utilizando pgvector. Este tutorial te guía a través de la instalación, las operaciones básicas y la integración con herramientas de IA.
Moez Ali's photo

Moez Ali

10 min

Tutorial

Tutorial sobre máquinas de vectores de soporte con Scikit-learn

En este tutorial, aprenderás sobre las máquinas de vectores de soporte, uno de los algoritmos de machine learning supervisado más populares y utilizados.
Avinash Navlani's photo

Avinash Navlani

15 min

Tutorial

Guía para principiantes de la API de OpenAI: Tutorial práctico y prácticas recomendadas

Este tutorial te presenta la API de OpenAI, sus casos de uso, un enfoque práctico para utilizar la API y todas las prácticas recomendadas que debes seguir.
Arunn Thevapalan's photo

Arunn Thevapalan

13 min

Tutorial

Visión GPT-4: Guía completa para principiantes

Este tutorial le presentará todo lo que necesita saber sobre GPT-4 Vision, desde cómo acceder a él hasta ejemplos prácticos del mundo real y sus limitaciones.
Arunn Thevapalan's photo

Arunn Thevapalan

12 min

cursor ai code editor

Tutorial

Cursor AI: Una guía con 10 ejemplos prácticos

Aprende a instalar Cursor AI en Windows, macOS y Linux, y descubre cómo utilizarlo a través de 10 casos de uso diferentes.
Ver MásVer Más