Hallo, Chroma DB ist eine Vektordatenbank, die für die Arbeit mit GenAI-Anwendungen nützlich ist. In diesem Artikel werde ich untersuchen, wie wir Abfragen auf Chroma DB ausführen können, indem ich mir ähnliche Beziehungen in MySQL anschaue.
Im Gegensatz zu SQL können Sie kein eigenes Schema definieren. In Chroma erhalten Sie feste Spalten mit jeweils eigenem Zweck:
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: Es handelt sich um eindeutige IDs. Beachten Sie, dass Sie sie selbst bereitstellen müssen, im Gegensatz zu SQL gibt es keine automatische Inkrementierung
Dokumente: Wird zum Einfügen der Textdaten verwendet, die zum Generieren der Einbettungen verwendet werden. Sie können den Text eingeben und die Einbettungen werden automatisch erstellt. Oder Sie können Einbettungen einfach direkt bereitstellen und den Text an anderer Stelle speichern.
Einbettungen: Sie sind meiner Meinung nach der wichtigste Teil der Datenbank, da sie zur Durchführung der Ähnlichkeitssuche verwendet werden.
Metadaten: Dies wird verwendet, um alle zusätzlichen Daten zu verknüpfen, die Sie möglicherweise für zusätzlichen Kontext zu Ihrer Datenbank hinzufügen möchten.
Da nun die Grundlagen einer Sammlung klar sind, können wir mit den CRUD-Operationen fortfahren und sehen, wie wir die Datenbank abfragen können.
Hinweis: Sammlungen sind wie Tabellen in Chroma
Um eine Sammlung zu erstellen, können wir create_collection() verwenden und unsere Vorgänge nach Bedarf ausführen. Wenn die Sammlung jedoch bereits erstellt wurde und wir sie erneut aktualisieren müssen, müssen wir get_collection() verwenden, sonst erhalten wir eine Fehlermeldung.
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]] )
Um die eingefügten Daten zu aktualisieren oder die Daten zu löschen, können wir die folgenden Befehle verwenden
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"} )
Jetzt schauen wir uns an, wie bestimmte Abfragen aussehen
Select * from tablename Select * from tablename limit value Select Documents, Metadata from tablename
collection.get() collection.get(limit = val) collection.get(include = ["documents","metadata"])
Während get() dazu dient, eine große Menge an Tabellen für komplexere Abfragen abzurufen, müssen Sie die Abfragemethode verwenden
Select A,B from table limit val
collection.query( n_results = val #limit includes = [A,B] )
Jetzt haben wir drei Möglichkeiten, die Daten zu filtern: Ähnlichkeitssuche (wofür Vektordatenbanken hauptsächlich verwendet werden), Metadatenfilter und Dokumentfilter
Wir können basierend auf Text oder Einbettungen suchen und die ähnlichsten Ergebnisse erhalten
collection.query(query_texts=["string"]) collection.query(query_embeddings=[[1,2,3]])
In ChromaDB werden die Parameter where und where_document verwendet, um Ergebnisse während einer Abfrage zu zu filtern. Mit diesen Filtern können Sie Ihre Ähnlichkeitssuche basierend auf Metadaten oder bestimmten Dokumentinhalten verfeinern.
Mit dem Where-Parameter können Sie Dokumente basierend auf den zugehörigen Metadaten filtern. Metadaten sind normalerweise ein Wörterbuch von Schlüssel-Wert-Paaren, die Sie beim Einfügen des Dokuments angeben.
Dokumente nach Metadaten wie Kategorie, Autor oder Datum filtern.
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
Der Parameter where_document ermöglicht das Filtern direkt basierend auf dem Inhalt von Dokumenten.
Nur Dokumente abrufen, die bestimmte Schlüsselwörter enthalten.
#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")
Zum Beispiel:
Insert into tablename Values(... , ..., ...)
Wir können alle drei Filter folgendermaßen kombinieren:
Suche innerhalb einer bestimmten Kategorie:
collection.add( ids = [1] documents = ["some text"] metadatas = [{"key":"value"}] embeddings = [[1,2,3]] )
Dokumente suchen, die einen bestimmten Begriff enthalten:
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"} )
Metadaten- und Dokumentinhaltsfilter kombinieren:
Select * from tablename Select * from tablename limit value Select Documents, Metadata from tablename
Diese Filter verbessern die Präzision Ihrer Ähnlichkeitssuchen und machen ChromaDB zu einem leistungsstarken Tool für die gezielte Suche nach Dokumenten.
Ich habe diesen Artikel geschrieben, weil ich das Gefühl hatte, dass das Dokument zu wünschen übrig lässt, wenn ich versuche, mein eigenes Programm zu erstellen. Ich hoffe, das hilft!
Vielen Dank fürs Lesen. Wenn Ihnen der Artikel gefallen hat, liken und teilen Sie ihn bitte. Auch wenn Sie neu in der Softwarearchitektur sind und mehr wissen möchten, starte ich eine gruppenbasierte Kohorte, in der ich persönlich mit Ihnen und einer kleinen Gruppe zusammenarbeiten werde, um Ihnen alles über die Prinzipien der Softwarearchitektur und des Softwaredesigns beizubringen. Bei Interesse können Sie das untenstehende Formular ausfüllen. https://forms.gle/SUAxrzRyvbnV8uCGA
Das obige ist der detaillierte Inhalt vonChromaDB für den SQL Mind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!