Bases de données vectorielles — sgcWebSockets | eSeGeCe

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.

Recherche sémantique et RAG dans Delphi

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.

  • TsgcAIDatabaseVectorFile — un magasin local basé sur fichier. Aucun service externe, idéal pour les applications de bureau, l'usage hors ligne et les corpus plus petits.
  • TsgcAIDatabaseVectorPinecone — le service cloud managé Pinecone via son API REST, pour les index volumineux, partagés ou mis à l'échelle horizontalement.

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.

  • Stocke et interroge des embeddings vectoriels en haute dimension
  • Recherche de similarité sémantique pour les applications RAG
  • Prise en charge de plusieurs backends de bases de données vectorielles
  • Filtrage par métadonnées et recherche hybride
  • Opérations d'upsert et de requête par batch

Comment ça marche

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.

Exemple Delphi

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;

Prêt à utiliser des bases de données vectorielles ?

Télécharge l'essai gratuit et commence à construire en quelques minutes.