Dieses Repository enthält eine Python -Anwendung, die Duckdb als Backend zum Speichern und Abrufen von Einbettungsvektoren verwendet. Die neuartige Verwendung von DuckDB ermöglicht effiziente Ähnlichkeitssuche bei großen Datensätzen. In diesem Beispiel haben wir Kommentare von Hacker News geladen und Funktionen implementiert, um die 10 ähnlichen Kommentare zu einem bestimmten Kommentar zu finden.
Klonen Sie das Repository:
git clone https://github.com/patricktrainer/duckdb-embedding-search.gitNavigieren Sie zum Repository -Verzeichnis:
cd duckdb-embedding-searchInstallieren Sie die erforderlichen Pakete:
pip install -r requirements.txtBefolgen Sie die folgenden Schritte, um die Anwendung zu verwenden:
load_comments.py , um Kommentare in die Duckdb -Datenbank zu laden. Die Kommentare und deren entsprechende Einbettungsvektoren werden in der embeddings der Datenbank hn_embeddings.db gespeichert.main.py ) aus und geben Sie einen Hacker -Nachrichten Kommentar an. Das Skript gibt die 10 ähnlichen Kommentare aus der Datenbank zurück.HINWEIS - Die Funktion
get_similaritybeiembedding.pyerstellt einen neuen Einbettungsvektor für den angegebenen Kommentar, wenn es in der Datenbank noch nicht vorhanden ist. Dies bedeutet, dass es die OpenAI -API treffen wird, die gegen Ihre API -Verwendung zählt.
Das folgende Beispiel zeigt die Funktionalität der Anwendung. Ein Kommentar wird als Eingabe abgegeben, und die Anwendung gibt die 10 ähnlichen Kommentare aus der Datenbank zurück.
Der Kommentar als Eingabe:
Eine Sache, die mir aufgefallen ist, ist, dass viele Ingenieure, wenn sie nach einer Bibliothek auf GitHub suchen, die letzte Ausschusseszeit überprüfen. Sie glauben, dass die Bibliothek umso besser unterstützt wird. Aber was ist mit einem archivierten Projekt, das genau das tut, was Sie tun müssen, hat 0 Fehler und ist seit Jahren stabil? Das ist so, als würde man in einem Gebrauchtwarenladen ein verstecktes Juwel finden! Die meisten Ingenieure, die ich heutzutage sehe, werden automatisch eine Bibliothek verwerfen, die nicht "ständig" aktualisiert wird ... was bedeutet, dass es eine gute Sache ist :)
Die ähnlichsten Kommentare, die von der Anwendung zurückgegeben wurden (abgekürzt für Kürze):
Text:> Tod an gemeinsame Bibliotheken. Die Kopfschmerzen, die sie verursachen, sind den Nutzen einfach nicht wert.
Völlig anderer Meinung. Auch wenn eine Größe nicht für alle passt, erklärt jeder, der kehrende Aussagen über statische Bibliotheken macht, der Welt nur, wie es in Bezug auf grundlegende Software -Wartungsprobleme, wie die Verfolgung des Softwarepakets aktualisiert wird, völlig ahnungslos sind, insbesondere diejenigen, die nicht täglich auf dem Laufenden bleiben.
Ähnlichkeit: 0,804798201033179
Text: Viele gute Punkte hier, aber die Wartungsarbeiten für profitable Systeme scheint eine gültige Zeit zu nutzen.
Jetzt sind einige profitable Systeme langsam bitrott, und feste Ingenieure können immer wieder die routinemäßige Arbeit erledigen, während sie den Bitrot nicht angehen oder eskalieren. Aber ich denke, Leute, die gut darin sind, sicherzustellen, dass langweilige und stabile Dinge langweilig und stabil bleiben, werden normalerweise unterschätzt.
Ähnlichkeit: 0,796911347299464
connection.py : Griffe Duckdb -Datenbankverbindungen.embedding.py .operations.py : Enthält Dienstprogrammfunktionen für die Datenverarbeitung.openai_client.py : Schnittstellen mit der OpenAI -API. Duckdb wird als leichte Hochleistungsdatenbank verwendet, um Einbettungsvektoren zu speichern. Das Modul connection.py stellt eine Verbindung zu Duckdb und operations.py her, enthält die Logik für das Einsetzen und Abrufen von Einbettungen.
Einbettungsvektoren werden mit OpenAIs API erzeugt. Das Modul openai_client.py enthält die Logik für die Schnittstelle mit der API. Das embedding.py enthält die Logik zum Erzeugen von Einbettungsvektoren und zum Vergleich.