Heim > Backend-Entwicklung > Python-Tutorial > ChromaDB für den SQL Mind

ChromaDB für den SQL Mind

Linda Hamilton
Freigeben: 2024-12-10 01:02:10
Original
648 Leute haben es durchsucht

ChromaDB for the SQL Mind

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.

Schema

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]]
)
Nach dem Login kopieren
Nach dem Login kopieren

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.

CRUD-Operationen

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 
Nach dem Login kopieren
Nach dem Login kopieren
#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")
Nach dem Login kopieren
Nach dem Login kopieren
Insert into tablename
Values(... , ..., ...)
Nach dem Login kopieren
Nach dem Login kopieren
collection.add(
    ids = [1]
    documents = ["some text"]
    metadatas = [{"key":"value"}]
    embeddings = [[1,2,3]]
)
Nach dem Login kopieren
Nach dem Login kopieren

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"}
)
Nach dem Login kopieren
Nach dem Login kopieren

Abfragen

Jetzt schauen wir uns an, wie bestimmte Abfragen aussehen

Select * from tablename

Select * from tablename limit value

Select Documents, Metadata from tablename
Nach dem Login kopieren
Nach dem Login kopieren
collection.get()

collection.get(limit = val)

collection.get(include = ["documents","metadata"])
Nach dem Login kopieren

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
Nach dem Login kopieren
collection.query(
    n_results = val #limit
    includes = [A,B] 
)
Nach dem Login kopieren

Jetzt haben wir drei Möglichkeiten, die Daten zu filtern: Ähnlichkeitssuche (wofür Vektordatenbanken hauptsächlich verwendet werden), Metadatenfilter und Dokumentfilter

Ähnlichkeitssuche

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]])
Nach dem Login kopieren

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.

Nach Metadaten filtern

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]]
)
Nach dem Login kopieren
Nach dem Login kopieren
Create Table tablename 
Nach dem Login kopieren
Nach dem Login kopieren

Nach Dokumentinhalt filtern

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")
Nach dem Login kopieren
Nach dem Login kopieren

Wichtige Hinweise:

  • Verwenden Sie Operatoren wie $contains, $startsWith oder $endsWith.
    • $contains: Dokumente abgleichen, die eine Teilzeichenfolge enthalten.
    • $startsWith: Dokumente abgleichen, die mit einer Teilzeichenfolge beginnen.
    • $endsWith: Dokumente abgleichen, die mit einer Teilzeichenfolge enden.
  • Zum Beispiel:

    Insert into tablename
    Values(... , ..., ...)
    
    Nach dem Login kopieren
    Nach dem Login kopieren

Häufige Anwendungsfälle:

Wir können alle drei Filter folgendermaßen kombinieren:

  1. Suche innerhalb einer bestimmten Kategorie:

    collection.add(
        ids = [1]
        documents = ["some text"]
        metadatas = [{"key":"value"}]
        embeddings = [[1,2,3]]
    )
    
    Nach dem Login kopieren
    Nach dem Login kopieren
  2. 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"}
    )
    
    Nach dem Login kopieren
    Nach dem Login kopieren
  3. Metadaten- und Dokumentinhaltsfilter kombinieren:

    Select * from tablename
    
    Select * from tablename limit value
    
    Select Documents, Metadata from tablename
    
    Nach dem Login kopieren
    Nach dem Login kopieren

Diese Filter verbessern die Präzision Ihrer Ähnlichkeitssuchen und machen ChromaDB zu einem leistungsstarken Tool für die gezielte Suche nach Dokumenten.

Abschluss

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage