Saltar al contenido principal
El conjunto de datos de dbpedia contiene 1 millón de artículos de Wikipedia y sus embeddings vectoriales, generados con el modelo text-embedding-3-large de OpenAI. Este conjunto de datos es un excelente punto de partida para entender los embeddings vectoriales, la búsqueda de similitud vectorial y la IA generativa. Usamos este conjunto de datos para demostrar la búsqueda aproximada de vecinos más cercanos en ClickHouse y una aplicación de preguntas y respuestas simple pero potente.

Detalles del conjunto de datos

El conjunto de datos contiene 26 archivos Parquet alojados en huggingface.co. Los archivos se llaman 0.parquet, 1.parquet, …, 25.parquet. Para ver algunas filas de ejemplo del conjunto de datos, visita esta página de Hugging Face.

Crear tabla

Cree la tabla dbpedia para almacenar el id, el título, el texto y el vector de embeddings del artículo:

Cargar tabla

Para cargar el conjunto de datos a partir de todos los archivos Parquet, ejecuta el siguiente comando de shell:
Como alternativa, se pueden ejecutar Sentencias SQL individuales, como se muestra a continuación, para cargar cada uno de los 25 archivos Parquet:
Verifique que se muestren 1 millón de filas en la tabla dbpedia:
Lectura recomendada: “Embeddings vectoriales ” en la guía de OpenAPI La búsqueda semántica (también denominada búsqueda por similitud) mediante embeddings vectoriales implica los siguientes pasos:
  • Recibir una consulta de búsqueda de un usuario en lenguaje natural; por ejemplo, “Háblame de algunos viajes panorámicos en tren”, “Novelas de suspense ambientadas en Europa”, etc.
  • Generar un vector de embedding para la consulta de búsqueda mediante un modelo LLM
  • Encontrar los vecinos más cercanos al vector de embedding de la consulta en el conjunto de datos
Los vecinos más cercanos son documentos, imágenes o contenidos que constituyen resultados relevantes para la consulta del usuario. Los resultados recuperados son la entrada clave para la generación aumentada mediante recuperación (RAG) en aplicaciones de IA generativa. La búsqueda KNN (k - vecinos más cercanos), o búsqueda por fuerza bruta, consiste en calcular la distancia de cada vector del conjunto de datos al vector de embedding de búsqueda y, a continuación, ordenar esas distancias para obtener los vecinos más cercanos. Con el conjunto de datos dbpedia, una forma rápida de observar visualmente la búsqueda semántica es usar vectores de embedding del propio conjunto de datos como vectores de búsqueda. Por ejemplo:
Query
Response
Anota la latencia de la consulta para poder compararla con la latencia de la consulta de ANN (usando un índice vectorial). Registra también la latencia de la consulta con la caché del sistema de archivos del SO en frío y con max_threads=1 para determinar el uso real de cómputo y del ancho de banda de almacenamiento (¡extrapólalo a un conjunto de datos de producción con millones de vectores!)

Crear un índice de similitud vectorial

Ejecute la siguiente instrucción SQL para definir y crear un índice de similitud vectorial en la columna vector:
Los parámetros y las consideraciones de rendimiento para la creación de índices y la búsqueda se describen en la documentación. La creación y el almacenamiento del índice pueden tardar unos minutos, según la cantidad de núcleos de CPU disponibles y el ancho de banda del almacenamiento. Approximate Nearest Neighbours o ANN engloba un conjunto de técnicas (p. ej., estructuras de datos especiales, como grafos y bosques aleatorios) que calculan resultados mucho más rápido que la búsqueda vectorial exacta. La precisión de los resultados suele ser “suficientemente buena” para un uso práctico. Muchas técnicas aproximadas ofrecen parámetros para ajustar el compromiso entre la precisión de los resultados y el tiempo de búsqueda. Una vez que se ha creado el índice de similitud vectorial, las consultas de búsqueda vectorial usarán automáticamente el índice:
Query
Response

Generación de embeddings para la consulta de búsqueda

Las consultas de búsqueda por similitud vistas hasta ahora usan uno de los vectores existentes en la tabla dbpedia como vector de búsqueda. En aplicaciones reales, el vector de búsqueda debe generarse a partir de una consulta introducida por el usuario, que podría estar en lenguaje natural. El vector de búsqueda debe generarse con el mismo modelo LLM utilizado para generar los vectores de embedding del conjunto de datos. A continuación se muestra un script de Python de ejemplo para demostrar cómo llamar mediante programación a las API de OpenAI para generar vectores de embedding con el modelo text-embedding-3-large. El vector de embedding de búsqueda se pasa después como argumento a la función cosineDistance() en la consulta SELECT. Para ejecutar el script, es necesario configurar una API key de OpenAI en la variable de entorno OPENAI_API_KEY. La API key de OpenAI puede obtenerse después de registrarse en https://platform.openai.com.

Aplicación de demostración de preguntas y respuestas

Los ejemplos anteriores demostraron la búsqueda semántica y la recuperación de documentos con ClickHouse. A continuación se presenta una aplicación de ejemplo de IA generativa muy sencilla, pero con gran potencial. La aplicación realiza los siguientes pasos:
  1. Acepta un tema como entrada del usuario
  2. Genera un vector de embedding para el tema invocando la API de OpenAI con el modelo text-embedding-3-large
  3. Recupera artículos/documentos de Wikipedia muy relevantes mediante búsqueda de similitud vectorial en la tabla dbpedia
  4. Acepta del usuario una pregunta abierta en lenguaje natural relacionada con el tema
  5. Usa la API de Chat gpt-3.5-turbo de OpenAI para responder a la pregunta basándose en el conocimiento contenido en los documentos recuperados en el paso n.º 3. Los documentos recuperados en el paso n.º 3 se pasan como contexto a la API de Chat y constituyen el vínculo clave en la IA generativa.
A continuación se muestran primero un par de ejemplos de conversación al ejecutar la aplicación de preguntas y respuestas, seguidos por el código de la aplicación de preguntas y respuestas. Para ejecutar la aplicación, es necesario configurar una API key de OpenAI en la variable de entorno OPENAI_API_KEY. La API key de OpenAI se puede obtener tras registrarse en https://platform.openai.com.
Código:
Última modificación el 2 de julio de 2026