Este repositorio contiene una aplicación Python que utiliza DuckDB como backend para almacenar y recuperar vectores de incrustación. El uso novedoso de DuckDB permite búsquedas de similitud eficientes entre grandes conjuntos de datos. En este ejemplo, hemos cargado comentarios de Hacker News e implementamos la funcionalidad para encontrar los 10 comentarios más similares a un comentario dado.
Clon el repositorio:
git clone https://github.com/patricktrainer/duckdb-embedding-search.gitNavegue al directorio de repositorio:
cd duckdb-embedding-searchInstalar paquetes requeridos:
pip install -r requirements.txtPara usar la aplicación, siga estos pasos:
load_comments.py para cargar comentarios en la base de datos DuckDB. Los comentarios y sus vectores de incrustación correspondientes se almacenarán en la tabla de embeddings de la base de datos hn_embeddings.db .main.py ) y proporcione un comentario de noticias del hacker. El script devolverá los 10 comentarios más similares de la base de datos.Nota : la función
get_similarityenembedding.pycreará un nuevo vector de incrustación para el comentario proporcionado si aún no existe en la base de datos. Esto significa que llegará a la API Operai, que contará con el uso de su API.
El siguiente ejemplo demuestra la funcionalidad de la aplicación. Se proporciona un comentario como entrada, y la aplicación devuelve los 10 comentarios más similares de la base de datos.
El comentario proporcionado como entrada:
Una cosa que he notado es que muchos ingenieros, cuando buscan una biblioteca en GitHub, verifican el último tiempo de confirmación. Piensan que cuanto más reciente es la última confirmación, mejor compatible es la biblioteca. Pero, ¿qué pasa con un proyecto archivado que hace exactamente lo que necesita hacer, tiene 0 errores y ha sido estable durante años? ¡Eso es como encontrar una joya oculta en una tienda de segunda mano! La mayoría de los ingenieros que veo hoy en día descartarán automáticamente una biblioteca que no está "constantemente" actualizada ... lo que implica que es algo bueno :)
Los comentarios más similares devueltos por la aplicación (abreviado por brevedad):
Texto:> Muerte a bibliotecas compartidas. Los dolores de cabeza que causan simplemente no valen la pena.
Completamente en desacuerdo. A pesar de que una talla no se ajusta a todos, cualquier persona que haga declaraciones radicales sobre bibliotecas estáticas solo declara al mundo cómo son completamente ajenos a los problemas básicos de mantenimiento de software, como el seguimiento de qué paquete de software se actualiza, especialmente aquellos que no se mantienen actualizados a diario.
Similitud: 0.8047998201033179
Texto: muchos puntos buenos aquí, pero el trabajo de mantenimiento para sistemas rentables parece un uso válido del tiempo.
Ahora, algunos sistemas rentables están lentamente y los ingenieros tenuidos pueden mantenerse ocupados haciendo un trabajo de rutina mientras no abordan o intensifican el bitrot. Pero creo que las personas que son buenas para asegurarse de que las cosas aburridas y estables se mantengan aburridas y estables generalmente están subestimadas.
Similitud: 0.796911347299464
connection.py : maneja las conexiones de la base de datos DuckDB.embedding.py : administra las operaciones vectoriales de incrustación.operations.py : contiene funciones de utilidad para el procesamiento de datos.openai_client.py : interfaces con la API de OpenAI. DuckDB se usa como una base de datos liviana de alto rendimiento para almacenar vectores de incrustación. El módulo connection.py establece una conexión con DuckDB, y operations.py contiene la lógica para insertar y recuperar incrustaciones.
Los vectores de incrustación se generan utilizando la API de OpenAI. El módulo openai_client.py contiene la lógica para la interfaz con la API. El módulo embedding.py contiene la lógica para generar vectores de incrustación y compararlos.