Database vettoriali — sgcWebSockets | eSeGeCe

Database vettoriali

Connettiti ai database vettoriali da Delphi per ricerca semantica, RAG e applicazioni basate sull'IA. Supporto per Pinecone e altri.

Ricerca semantica e RAG in Delphi

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.

  • TsgcAIDatabaseVectorFile — un archivio locale basato su file. Nessun servizio esterno, ideale per applicazioni desktop, uso offline e corpora di dimensioni ridotte.
  • TsgcAIDatabaseVectorPinecone — il servizio cloud gestito Pinecone tramite la sua API REST, per indici grandi, condivisi o scalati orizzontalmente.

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.

  • Memorizza e interroga embeddings vettoriali ad alta dimensionalità
  • Ricerca per similarità semantica per applicazioni RAG
  • Supporto per backend di database vettoriali multipli
  • Filtraggio per metadati e ricerca ibrida
  • Operazioni di upsert e query in batch

Come funziona

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.

Esempio Delphi

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;

Pronto a usare i database vettoriali?

Scarica la versione di prova gratuita e inizia a sviluppare in pochi minuti.