適用於 SQL 思維的 ChromaDB
您好,Chroma DB 是一個向量資料庫,對於使用 GenAI 應用程式非常有用。在本文中,我將探討如何透過查看 MySQL 中的類似關係來在 Chroma DB 上執行查詢。
模式
與 SQL 不同,您無法定義自己的架構。在 Chroma 中,您會得到固定的列,每個列都有自己的用途:
import chromadb #setiing up the client client = chromadb.Client() collection = client.create_collection(name="name") collection.add( documents = ["str1","str2","str3",...] ids = [1,2,3,....] metadatas=[{"chapter": "3", "verse": "16"},{"chapter":"3", "verse":"5"}, ..] embeddings = [[1,2,3], [3,4,5], [5,6,7]] )
Ids:它們是唯一的 id。請注意,您需要自己提供它們,與 sql 不同,沒有自動增量
文件: 用於插入用於產生嵌入的文字資料。您可以提供文本,它會自動建立嵌入。或者您可以直接提供嵌入並將文字儲存在其他位置。
嵌入: 在我看來,它們是資料庫中最重要的部分,因為它們用於執行相似性搜尋。
元資料:這用於關聯您可能想要新增到資料庫中以獲得任何額外上下文的任何其他資料。
現在集合的基礎知識已經清楚了,讓我們繼續進行 CRUD 操作,我們將了解如何查詢資料庫。
增刪改查操作
注意:集合就像 Chroma 中的表格
要建立集合,我們可以使用 create_collection() 並根據需要執行我們的操作,但如果集合已經建立並且我們需要再次引用它,我們必須使用 get_collection() 否則我們會收到錯誤。
Create Table tablename
#Create a collection collection = client.create_collection(name="name") #If a collection is already made and you need to use it again the use collection = client.get_collection(name="name")
Insert into tablename Values(... , ..., ...)
collection.add( ids = [1] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] )
要更新插入的數據或刪除數據,我們可以使用以下命令
collection.update( ids = [2] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] ) # If the id does not exist update will do nothing. to add data if id does not exist use collection.upsert( ids = [2] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] ) # To delete data use delete and refrence the document or id or the feild collection.delete( documents = ["some text"] ) # Or you can delete from a bunch of ids using where that will apply filter on metadata collection.delete( ids=["id1", "id2", "id3",...], where={"chapter": "20"} )
查詢
現在我們將看看某些查詢的樣子
Select * from tablename Select * from tablename limit value Select Documents, Metadata from tablename
collection.get() collection.get(limit = val) collection.get(include = ["documents","metadata"])
雖然 get() 用於獲取大量表以進行更高級的查詢,但您需要使用查詢方法
Select A,B from table limit val
collection.query( n_results = val #limit includes = [A,B] )
現在我們有3種可能的方法來過濾資料:相似性搜尋(向量資料庫主要用於什麼),元資料過濾器和文件過濾器
相似性搜尋
我們可以根據文字或嵌入進行搜尋並獲得最相似的輸出
collection.query(query_texts=["string"]) collection.query(query_embeddings=[[1,2,3]])
在 ChromaDB 中,where 和 where_document 參數用於在查詢期間過濾 結果。這些篩選器可讓您根據元資料或特定文件內容優化相似性搜尋。
按元資料過濾
where 參數可讓您根據關聯的元資料過濾文件。元資料通常是您在文件插入期間提供的鍵值對的字典。
按類別、作者或日期等元資料過濾文件。
import chromadb #setiing up the client client = chromadb.Client() collection = client.create_collection(name="name") collection.add( documents = ["str1","str2","str3",...] ids = [1,2,3,....] metadatas=[{"chapter": "3", "verse": "16"},{"chapter":"3", "verse":"5"}, ..] embeddings = [[1,2,3], [3,4,5], [5,6,7]] )
Create Table tablename
按文檔內容過濾
where_document 參數允許直接根據文件內容進行過濾。
僅檢索包含特定關鍵字的文件。
#Create a collection collection = client.create_collection(name="name") #If a collection is already made and you need to use it again the use collection = client.get_collection(name="name")
重點:
- 使用 $contains、$startsWith 或 $endsWith 等運算子。
- $contains:符合包含子字串的文件。
- $startsWith:符合以子字串開頭的文件。
- $endsWith:符合以子字串結尾的文件。
-
例如:
Insert into tablename Values(... , ..., ...)
登入後複製登入後複製
常見用例:
我們可以像這樣組合所有三個過濾器:
-
在特定類別中搜尋:
collection.add( ids = [1] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] )
登入後複製登入後複製 -
搜尋包含特定術語的文件:
collection.update( ids = [2] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] ) # If the id does not exist update will do nothing. to add data if id does not exist use collection.upsert( ids = [2] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] ) # To delete data use delete and refrence the document or id or the feild collection.delete( documents = ["some text"] ) # Or you can delete from a bunch of ids using where that will apply filter on metadata collection.delete( ids=["id1", "id2", "id3",...], where={"chapter": "20"} )
登入後複製登入後複製 -
組合元資料與文件內容過濾器:
Select * from tablename Select * from tablename limit value Select Documents, Metadata from tablename
登入後複製登入後複製
這些過濾器提高了相似性搜尋的精確度,使 ChromaDB 成為目標文件檢索的強大工具。
結論
我寫這篇文章是因為我覺得該文件在嘗試製作自己的程式時還有很多不足之處,我希望這會有所幫助!
感謝您的閱讀,如果您喜歡這篇文章,請按讚和分享。另外,如果您是軟體架構新手並且想了解更多信息,我將開始一個基於小組的隊列,我將親自與您和一個小組一起工作,教您有關軟體架構和設計原理的所有知識。如果您有興趣,可以填寫下面的表格。 https://forms.gle/SUAxrzRyvbnV8uCGA
以上是適用於 SQL 思維的 ChromaDB的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。
