Database vettoriali
Connettiti ai database vettoriali da Delphi per ricerca semantica, RAG e applicazioni basate sull'IA. Supporto per Pinecone e altri.
Connettiti ai database vettoriali da Delphi per ricerca semantica, RAG e applicazioni basate sull'IA. Supporto per Pinecone e altri.
Memorizza il testo come embeddings ad alta dimensionalità e recupera i passaggi più pertinenti in base al significato, non alle parole chiave.
Un database vettoriale memorizza gli embeddings numerici prodotti da un modello di embedding e ti permette di trovare le voci più vicine a un vettore di query. È la base della ricerca semantica e della Retrieval-Augmented Generation (RAG), in cui ancori un large language model con passaggi estratti dai tuoi documenti invece di affidarti solo a ciò che il modello ha memorizzato durante l'addestramento.
sgcWebSockets include due backend di archiviazione vettoriale intercambiabili che condividono lo stesso componente base, TsgcAIDatabaseVector, così puoi sostituire l'uno con l'altro senza modificare il codice di ingestione o di query. Abbina entrambi i backend al componente TsgcAIOpenAIEmbeddings per trasformare il testo grezzo in vettori e inserirlo direttamente nell'archivio.
Quale usare: opta per il backend a file quando vuoi zero infrastruttura e i dati stanno comodamente sulla macchina. Scegli Pinecone quando l'indice è grande, deve essere condiviso tra processi o utenti, oppure deve scalare oltre un singolo host.
Assegna un archivio vettoriale alla proprietà Database di un componente TsgcAIOpenAIEmbeddings, poi chiama CreateEmbeddingsFromFile per incorporare e ingerire un intero documento in un unico batch. Internamente ogni chunk viene aggiunto tramite la sequenza BeginAddData / AddData / EndAddData che l'archivio eredita da TsgcAIDatabaseVector, quindi i backend a file e Pinecone si comportano in modo identico dal punto di vista del tuo codice.
In fase di query incorpori la domanda dell'utente con GetEmbedding e passi il vettore risultante a QueryData, che restituisce le corrispondenze più vicine ordinate per similarità del coseno. Riporta quei passaggi a un modello di chat come contesto e avrai una pipeline RAG funzionante: risposte ancorate ai tuoi dati, con citazioni che controlli tu. Lo stesso approccio alimenta la ricerca semantica su knowledge base, la deduplicazione, la raccomandazione e il clustering, il tutto senza uscire da Delphi o C++ Builder.
Ingerisci un corpus e interroga il vicino più prossimo con entrambi i backend.
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;