Bases de données vectorielles
Connecte-toi à des bases de données vectorielles depuis Delphi pour la recherche sémantique, le RAG et les applications alimentées par l'IA. Prise en charge de Pinecone et plus.
Connecte-toi à des bases de données vectorielles depuis Delphi pour la recherche sémantique, le RAG et les applications alimentées par l'IA. Prise en charge de Pinecone et plus.
Stocke du texte sous forme d'embeddings en haute dimension et récupère les passages les plus pertinents par le sens, pas par mots-clés.
Une base de données vectorielle stocke les embeddings numériques produits par un modèle d'embedding et te permet de trouver les entrées les plus proches d'un vecteur de requête. C'est le fondement de la recherche sémantique et de la génération augmentée par récupération (RAG), où tu ancres un grand modèle de langage avec des passages tirés de tes propres documents au lieu de te reposer uniquement sur ce que le modèle a mémorisé pendant l'entraînement.
sgcWebSockets fournit deux backends de stockage vectoriel interchangeables qui partagent le même composant de base, TsgcAIDatabaseVector, ce qui te permet de remplacer l'un par l'autre sans modifier ton code d'ingestion ou de requête. Associe l'un ou l'autre backend au composant TsgcAIOpenAIEmbeddings pour transformer du texte brut en vecteurs et les pousser directement dans le magasin.
Lequel choisir : opte pour le backend fichier lorsque tu veux zéro infrastructure et que les données tiennent confortablement sur la machine. Choisis Pinecone lorsque l'index est volumineux, doit être partagé entre processus ou utilisateurs, ou doit s'étendre au-delà d'un seul hôte.
Affecte un magasin vectoriel à la propriété Database d'un composant TsgcAIOpenAIEmbeddings, puis appelle CreateEmbeddingsFromFile pour embedder et ingérer un document entier en un seul batch. En interne, chaque fragment est ajouté via la séquence BeginAddData / AddData / EndAddData que le magasin hérite de TsgcAIDatabaseVector, de sorte que les backends fichier et Pinecone se comportent à l'identique du point de vue de ton code.
Au moment de la requête, tu embeddes la question de l'utilisateur avec GetEmbedding et tu passes le vecteur résultant à QueryData, qui renvoie les correspondances les plus proches classées par similarité cosinus. Renvoie ces passages à un modèle de chat comme contexte et tu obtiens un pipeline RAG fonctionnel : des réponses ancrées dans tes propres données, avec des citations que tu contrôles. La même approche alimente la recherche sémantique sur les bases de connaissances, la déduplication, la recommandation et le clustering, le tout sans quitter Delphi ou C++ Builder.
Ingère un corpus et interroge le plus proche voisin avec l'un ou l'autre 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;