EJEMPLO SENCILLO DE VECTOR Y DE UNA BÚSQUEDA SEMÁNTICA Y SU USO EN IA
Ejemplo de pequeña base de conocimiento de artículos donde el usuario pueda hacer preguntas en lenguaje natural y MariaDB devuelva los artículos más relevantes (búsqueda semántica), ideal para usar con ChatGPT, Claude, Gemini, etc. (RAG básico).- Creación de la tabla con VECTOR:
CREATE TABLE articulos ( id INT AUTO_INCREMENT PRIMARY KEY, titulo VARCHAR(300) NOT NULL, contenidoTEXT NOT NULL, embeddingVECTOR(1536) NOT NULL, -- Usamos 1536 (OpenAI text-embedding-3-small) -- Índice vectorial (imprescindible para buena velocidad) VECTOR INDEX idx_embedding (embedding) DISTANCE=cosine M=16 ) ENGINE=InnoDB; - Insertar datos con embeddings: Supongamos que ya generaste los embeddings. Aquí insertamos algunos artículos:
Nota: En la vida real, no escribes los 1536 números a mano. Los generas con Python, Node.js o PHP.INSERT INTO articulos (titulo, contenido, embedding) VALUES ('¿Qué es MariaDB?', 'MariaDB es un fork de MySQL, muy rápido y con gran compatibilidad...', VEC_FromText('[0.021, -0.045, 0.678, ..., 0.123]')),-- 1536 valores ('Ventajas de usar vectores en bases de datos', 'Los vectores permiten búsquedas semánticas mucho más inteligentes que LIKE...', VEC_FromText('[-0.12, 0.34, ..., 0.89]')), ('Cómo crear un chatbot con RAG', 'RAG significa Retrieval Augmented Generation. Combina búsqueda + IA generativa...', VEC_FromText('[0.45, -0.67, 0.23, ..., -0.11]')); - Búsqueda Semántica:
Ejemplo de resultado esperado-- Ejemplo: El usuario pregunta: "¿Qué es MariaDB y para qué sirve?" SET @pregunta_embedding = VEC_FromText('[0.015, -0.032, 0.712, ..., 0.098]');-- Embedding de la pregunta SELECT id, titulo, contenido, VEC_DISTANCE_COSINE(embedding, @pregunta_embedding) AS similitud FROM articulos ORDER BY similitud ASC -- Menor distancia = más similar (con cosine) LIMIT 3; - Uso en Inteligencia Artificial (RAG sencillo)
Una vez que se tienen los artículos más relevantes, se envían junto con la pregunta del usuario a un modelo de IA:
- Flujo típico: Usuario pregunta → "¿MariaDB soporta vectores?"
- Generar el embedding de la pregunta (con OpenAI, Cohere, etc.).
- Hacesrla búsqueda semántica en MariaDB (como arriba).
- Tomar los 3-5 mejores resultados.
- Construirs un prompt como este:
Responde a la pregunta del usuario usando solo la siguiente información: Artículo 1: ¿Qué es MariaDB? Contenido: MariaDB es un fork... Artículo 2: ... Pregunta del usuario: ¿MariaDB soporta vectores? Respuesta: - Envíar el prompt a ChatGPT / Claude / Grok / etc.
Versión más práctica con una sola consulta
SET @query_embedding = VEC_FromText('[... embedding de la pregunta ...]');
SELECT
titulo,
contenido,
VEC_DISTANCE_COSINE(embedding, @query_embedding) AS score
FROM articulos
ORDER BY score ASC
LIMIT 5;
Resumen del flujo completo (IA + MariaDB)
- El usuario hace una pregunta en lenguaje natural.
- Generar el embedding de la pregunta.
- Buscar en MariaDB usando búsqueda semántica (VECTOR + cosine).
- Recuperar los documentos más relevantes.
- Se pasan al modelo de IA junto con la pregunta → el modelo responde de forma precisa y contextualizada.