Vectordatabases
Maak verbinding met vectordatabases vanuit Delphi voor semantisch zoeken, RAG en AI-aangedreven toepassingen. Ondersteuning voor Pinecone en meer.
Maak verbinding met vectordatabases vanuit Delphi voor semantisch zoeken, RAG en AI-aangedreven toepassingen. Ondersteuning voor Pinecone en meer.
Sla tekst op als hoogdimensionale embeddings en haal de meest relevante passages op op basis van betekenis, niet van trefwoorden.
Een vectordatabase slaat de numerieke embeddings op die door een embeddingmodel worden geproduceerd en laat je de entries vinden die het dichtst bij een queryvector liggen. Dit is de basis van semantisch zoeken en Retrieval-Augmented Generation (RAG), waarbij je een groot taalmodel verankert met passages uit je eigen documenten in plaats van uitsluitend te vertrouwen op wat het model tijdens de training heeft onthouden.
sgcWebSockets levert twee uitwisselbare vectoropslag-backends die hetzelfde basiscomponent delen, TsgcAIDatabaseVector, zodat je de ene voor de andere kunt verwisselen zonder je ingest- of querycode te wijzigen. Combineer een van beide backends met het component TsgcAIOpenAIEmbeddings om ruwe tekst om te zetten in vectoren en die rechtstreeks in de opslag te plaatsen.
Wanneer welke gebruiken: kies voor de bestands-backend wanneer je geen infrastructuur wilt en de data comfortabel op de machine past. Kies Pinecone wanneer de index groot is, gedeeld moet worden tussen processen of gebruikers, of moet schalen voorbij één host.
Wijs een vectoropslag toe aan de eigenschap Database van een TsgcAIOpenAIEmbeddings-component en roep vervolgens CreateEmbeddingsFromFile aan om een heel document in één batch te embedden en te ingesten. Intern wordt elk fragment toegevoegd via de sequentie BeginAddData / AddData / EndAddData die de opslag overerft van TsgcAIDatabaseVector, zodat de bestands- en Pinecone-backends zich vanuit het oogpunt van je code identiek gedragen.
Bij het bevragen embed je de vraag van de gebruiker met GetEmbedding en geef je de resulterende vector door aan QueryData, die de dichtstbijzijnde matches retourneert gerangschikt op cosinus-overeenkomst. Voer die passages terug naar een chatmodel als context en je hebt een werkende RAG-pipeline: antwoorden verankerd in je eigen data, met bronvermeldingen die jij beheert. Dezelfde aanpak ondersteunt semantisch zoeken over kennisbanken, deduplicatie, aanbevelingen en clustering, allemaal zonder Delphi of C++ Builder te verlaten.
Ingest een corpus en bevraag de dichtstbijzijnde buur met een van beide backends.
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;