Vektor-Datenbanken
Verbinde dich aus Delphi mit Vektordatenbanken für semantische Suche, RAG und KI-gestützte Anwendungen. Unterstützung für Pinecone und mehr.
Verbinde dich aus Delphi mit Vektordatenbanken für semantische Suche, RAG und KI-gestützte Anwendungen. Unterstützung für Pinecone und mehr.
Speichere Text als hochdimensionale Embeddings und finde die relevantesten Passagen nach Bedeutung, nicht nach Schlüsselwörtern.
Eine Vektordatenbank speichert die numerischen Embeddings, die ein Embedding-Modell erzeugt, und ermöglicht es dir, die Einträge zu finden, die einem Abfragevektor am nächsten liegen. Das ist die Grundlage von semantischer Suche und Retrieval-Augmented Generation (RAG), bei der du ein Large Language Model mit Passagen aus deinen eigenen Dokumenten anreicherst, statt dich nur auf das zu verlassen, was sich das Modell während des Trainings gemerkt hat.
sgcWebSockets liefert zwei austauschbare Vektorspeicher-Backends, die sich dieselbe Basiskomponente TsgcAIDatabaseVector teilen, sodass du das eine ohne Änderung deines Ingest- oder Abfragecodes durch das andere ersetzen kannst. Kombiniere eines der Backends mit der Komponente TsgcAIOpenAIEmbeddings, um Rohtext in Vektoren zu verwandeln und ihn direkt in den Speicher zu schreiben.
Wann welches: Greife zum Datei-Backend, wenn du keinerlei Infrastruktur willst und die Daten bequem auf die Maschine passen. Wähle Pinecone, wenn der Index groß ist, prozess- oder benutzerübergreifend geteilt werden muss oder über einen einzelnen Host hinaus skalieren soll.
Weise einen Vektorspeicher der Eigenschaft Database einer TsgcAIOpenAIEmbeddings-Komponente zu und rufe dann CreateEmbeddingsFromFile auf, um ein ganzes Dokument in einem einzigen Batch einzubetten und aufzunehmen. Intern wird jeder Chunk über die Sequenz BeginAddData / AddData / EndAddData hinzugefügt, die der Speicher von TsgcAIDatabaseVector erbt, sodass sich das Datei- und das Pinecone-Backend aus Sicht deines Codes identisch verhalten.
Zur Abfragezeit bettest du die Frage des Benutzers mit GetEmbedding ein und übergibst den resultierenden Vektor an QueryData, das die nächsten Treffer nach Kosinus-Ähnlichkeit sortiert zurückgibt. Reiche diese Passagen als Kontext an ein Chat-Modell zurück, und du hast eine funktionierende RAG-Pipeline: Antworten, die auf deinen eigenen Daten basieren, mit Quellenangaben, die du kontrollierst. Derselbe Ansatz treibt semantische Suche über Wissensdatenbanken, Deduplizierung, Empfehlungen und Clustering an, alles ohne Delphi oder C++ Builder zu verlassen.
Nimm einen Korpus auf und frage mit beiden Backends den nächsten Nachbarn ab.
uses
sgcAI, sgcAI_OpenAI_Embeddings,
sgcAI_DB_Vector, sgcAI_DB_Vector_File, sgcAI_DB_Vector_Pinecone;
var
Embeddings: TsgcAIOpenAIEmbeddings;
DBFile: TsgcAIDatabaseVectorFile;
DBPinecone: TsgcAIDatabaseVectorPinecone;
begin
Embeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Embeddings.OpenAIOptions.ApiKey := 'sk-...';
// Local file-based vector store
DBFile := TsgcAIDatabaseVectorFile.Create(nil);
DBFile.VectorFileOptions.InputFilename := 'corpus.sgcif';
DBFile.VectorFileOptions.VectorFilename := 'corpus.sgcvf';
Embeddings.Database := DBFile;
Embeddings.CreateEmbeddingsFromFile('docs.txt');
// Or push to the Pinecone cloud index
DBPinecone := TsgcAIDatabaseVectorPinecone.Create(nil);
DBPinecone.PineconeOptions.ApiKey := 'pc-...';
DBPinecone.PineconeIndexOptions.IndexName := 'sgc-embeddings';
Embeddings.Database := DBPinecone;
// Query the nearest neighbour for an arbitrary text
Results := Embeddings.Database.QueryData(
Embeddings.GetEmbedding('what is sgcWebSockets?', ''));
end;