Ce référentiel contient une application Python qui utilise DuckDB comme backend pour stocker et récupérer des vecteurs d'intégration. La nouvelle utilisation de DuckDB permet des recherches de similitudes efficaces parmi les grands ensembles de données. Dans cet exemple, nous avons chargé les commentaires de Hacker News et mis en œuvre des fonctionnalités pour trouver les 10 commentaires les plus similaires à un commentaire donné.
Clone le référentiel:
git clone https://github.com/patricktrainer/duckdb-embedding-search.gitAccédez au répertoire du référentiel:
cd duckdb-embedding-searchInstaller les packages requis:
pip install -r requirements.txtPour utiliser l'application, suivez ces étapes:
load_comments.py pour charger des commentaires dans la base de données DuckDB. Les commentaires et leurs vecteurs d'incorporation correspondants seront stockés dans le tableau embeddings de la base de données hn_embeddings.db .main.py ) et fournissez un commentaire de hacker News. Le script renverra les 10 commentaires les plus similaires de la base de données.Remarque - La fonction
get_similaritydansembedding.pycréera un nouveau vecteur d'intégration pour le commentaire fourni s'il n'existe pas déjà dans la base de données. Cela signifie qu'il atteindra l'API OpenAI, qui comptera contre votre utilisation de l'API.
L'exemple suivant démontre la fonctionnalité de l'application. Un commentaire est fourni en entrée et l'application renvoie les 10 commentaires les plus similaires de la base de données.
Le commentaire fourni en entrée:
Une chose que j'ai remarquée, c'est que de nombreux ingénieurs, lorsqu'ils recherchent une bibliothèque sur Github, ils vérifient le dernier temps de validation. Ils pensent que plus le dernier engagement est récent, plus la bibliothèque est mieux prise en charge. Mais qu'en est-il d'un projet archivé qui fait exactement ce que vous avez besoin de faire, a 0 bogues et est stable depuis des années? C'est comme trouver un joyau caché dans une friperie! La plupart des ingénieurs que je vois de nos jours jetteront automatiquement une bibliothèque qui n'est pas "constamment" mise à jour ... impliquant que c'est une bonne chose :)
Les commentaires les plus similaires renvoyés par la demande (abrégés pour brièveté):
Texte:> Mort aux bibliothèques partagées. Les maux de tête qu'ils provoquent ne valent tout simplement pas le bénéfice.
Complètement en désaccord. Même si une taille unique ne correspond pas à tous, quiconque fait des déclarations radicales sur les bibliothèques statiques explique simplement au monde comment ils sont complètement inconscients de problèmes de maintenance de logiciels de base tels que le suivi du package logiciel mis à jour, en particulier ceux qui ne sont pas tenus au courant quotidiennement.
similitude: 0,8047998201033179
Texte: Beaucoup de bons points ici, mais le travail de maintenance pour des systèmes rentables semble être une utilisation valide du temps.
Désormais, certains systèmes rentables sont lentement bitrotting et les ingénieurs titulaires peuvent rester occupés à faire des travaux de routine tout en n'ayant pas abordé ou dégénérer le bittrot. Mais je pense que les gens qui sont bons pour s'assurer que les choses ennuyeuses et stables restent ennuyeuses et stables sont généralement sous-estimées.
similitude: 0,796911347299464
connection.py : gère les connexions de la base de données DuckDB.embedding.py : gère les opérations de vecteur d'intégration.operations.py : contient des fonctions utilitaires pour le traitement des données.openai_client.py : interfaces avec l'API OpenAI. DuckDB est utilisé comme une base de données légère et haute performance pour stocker des vecteurs d'intégration. Le module connection.py établit une connexion à DuckDB, et operations.py contient la logique pour insérer et récupérer des intégres.
Les vecteurs d'intégration sont générés à l'aide de l'API d'Openai. Le module openai_client.py contient la logique pour l'interfaçage avec l'API. Le module embedding.py contient la logique pour générer des vecteurs d'intégration et les comparer.