該存儲庫包含一個Python應用程序,該應用程序利用DuckDB作為存儲和檢索嵌入向量的後端。 DuckDB的新穎使用允許在大型數據集中進行有效的相似性搜索。在此示例中,我們已經加載了Hacker News的評論,並實施了功能,以找到與給定評論的10個最相似的評論。
克隆存儲庫:
git clone https://github.com/patricktrainer/duckdb-embedding-search.git導航到存儲庫目錄:
cd duckdb-embedding-search安裝所需的軟件包:
pip install -r requirements.txt要使用該應用程序,請遵循以下步驟:
load_comments.py將註釋加載到DuckDB數據庫中。評論及其相應的嵌入向量將存儲在hn_embeddings.db數據庫的embeddings表中。main.py )並提供黑客新聞評論。該腳本將返回數據庫中的10個最相似的註釋。注意- 如果數據庫中尚不存在,
embedding.py中的get_similarity函數將為提供的註釋創建一個新的嵌入向量。這意味著它將擊中OpenAI API,這將違反您的API使用。
以下示例演示了應用程序的功能。提供評論作為輸入,該應用程序返回數據庫中的10個最相似的評論。
提供的評論作為輸入:
我注意到的一件事是,許多工程師在Github上尋找圖書館時,他們會檢查最後一次提交時間。他們認為,最近的提交越最近,圖書館支持得更好。但是,一個存檔的項目又能完成您需要做的事情,有0個錯誤,並且已經穩定了多年?這就像在舊貨店裡找到一個隱藏的寶石一樣!如今我看到的大多數工程師都會自動丟棄並未“不斷”更新的庫...暗示這是一件好事:)
應用程序返回的最類似評論(簡短縮寫):
文字:>共享圖書館的死亡。他們引起的頭痛不值得。
完全不同意。即使一個尺寸不適合所有尺寸,任何對靜態庫進行全面陳述的人只是向世界說明他們如何完全忽略了基本軟件維護問題,例如跟踪哪個軟件包已更新,特別是那些沒有每天保持最新狀態的軟件包。
相似性:0.8047998201033179
文字:這裡有很多好處,但是盈利系統的維護工作似乎是有效的時間。
現在,一些有利可圖的系統正在慢慢進行,終身工程師可以繼續忙於做例行工作,而無法解決或升級比特羅特。但是我認為擅長確保無聊和穩定的事情保持無聊和穩定的人通常會被低估。
相似性:0.796911347299464
connection.py :處理DuckDB數據庫連接。embedding.py :py:管理嵌入矢量操作。operations.py :包含用於數據處理的實用程序功能。openai_client.py :與OpenAI API接口。DuckDB用作輕巧的高性能數據庫來存儲嵌入向量。 connection.py模塊建立了與DuckDB的連接,並且operations.py包含用於插入和檢索嵌入的邏輯。
使用OpenAI的API生成嵌入向量。 openai_client.py模塊包含用於與API接口的邏輯。 embedding.py模塊包含用於生成嵌入向量並進行比較的邏輯。