您好,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中文網其他相關文章!

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti

Python 對象的序列化和反序列化是任何非平凡程序的關鍵方面。如果您將某些內容保存到 Python 文件中,如果您讀取配置文件,或者如果您響應 HTTP 請求,您都會進行對象序列化和反序列化。 從某種意義上說,序列化和反序列化是世界上最無聊的事情。誰會在乎所有這些格式和協議?您想持久化或流式傳輸一些 Python 對象,並在以後完整地取回它們。 這是一種在概念層面上看待世界的好方法。但是,在實際層面上,您選擇的序列化方案、格式或協議可能會決定程序運行的速度、安全性、維護狀態的自由度以及與其他系

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

本文指導Python開發人員構建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等庫詳細介紹,強調輸入/輸出處理,並促進用戶友好的設計模式,以提高CLI可用性。

該教程建立在先前對美麗湯的介紹基礎上,重點是簡單的樹導航之外的DOM操縱。 我們將探索有效的搜索方法和技術,以修改HTML結構。 一種常見的DOM搜索方法是EX

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),