這個分為兩部分的系列使用SQLite進行機器學習探索。 上一篇文章討論了SQLite在生產就緒的Web應用程序中的越來越多的作用。本文著重於使用sqlite實施檢索功能。
>>用於使用生成AI的自定義Web應用程序,請訪問losangelesaiapps.com >
代碼可用>在此處。 。
傳統的抹布實施通常涉及:
>
sqlite-vec
這種方法消除了對雲矢量數據庫和笨重框架的需求。
Sqlite的強度在於其可擴展性。 與Python庫類似的擴展名添加了C中寫入的功能。一個很好的示例是全文搜索(FTS)擴展。 添加矢量搜索功能,從而使語義理解超出關鍵字匹配。 尋找“馬”可能會返回“馬術”或“小馬”。
使用虛擬表,提供:sqlite-vec
>sqlite-vec
>自定義數據源:
CREATE VIRTUAL TABLE my_table USING my_extension_module();
my_extension_module()
vec0
代碼(sqlite-vec
repo link
文件作為示例數據(主要是物理相關)。 是sqlite數據庫文件。
,
requirements.txt
sqlite-vec
>openai
openai api鍵:python-dotenv
獲取openai api鍵。 pip install -r requirements.txt
> 加載擴展名:python代碼加載sqlite-vec
>擴展名並創建一個虛擬表:
CREATE VIRTUAL TABLE my_table USING my_extension_module();
documents
表存儲嵌入式(embedding
),fileNames(file_name
)和content(content
)。
表示輔助字段。
.txt
代碼通過db.enable_load_extension(True) sqlite_vec.load(db) db.enable_load_extension(False) db.execute(''' CREATE VIRTUAL TABLE documents USING vec0( embedding float[1536], +file_name TEXT, +content TEXT ) ''')
# ... (OpenAI embedding function) ... for file_name in os.listdir("data"): # ... (Open file, get content, get embedding) ... db.execute( 'INSERT INTO documents (embedding, file_name, content) VALUES (?, ?, ?)', (serialize_float32(embedding), file_name, content) ) db.commit()
>
結論
>大大簡化了抹布。 它消除了對複雜框架和雲服務的需求,使其具有成本效益且易於迭代。 雖然縮放可能最終需要一個更健壯的數據庫,但sqlite-vec
>為較小的項目提供了引人注目的解決方案。 擴展名支持多種編程語言。 sqlite-vec
以上是在Sqlite中檢索增強發電的詳細內容。更多資訊請關注PHP中文網其他相關文章!