Bancos de dados vetoriais
Conecte-se a bancos de dados vetoriais a partir do Delphi para busca semântica, RAG e aplicações com IA. Suporte para Pinecone e mais.
Conecte-se a bancos de dados vetoriais a partir do Delphi para busca semântica, RAG e aplicações com IA. Suporte para Pinecone e mais.
Armazene texto como embeddings de alta dimensionalidade e recupere as passagens mais relevantes por significado, não por palavras-chave.
Um banco de dados vetorial armazena os embeddings numéricos produzidos por um modelo de embedding e permite que você encontre as entradas mais próximas de um vetor de consulta. Essa é a base da busca semântica e da Retrieval-Augmented Generation (RAG), na qual você fundamenta um large language model com passagens extraídas dos seus próprios documentos, em vez de depender apenas do que o modelo memorizou durante o treinamento.
O sgcWebSockets oferece dois backends de armazenamento vetorial intercambiáveis que compartilham o mesmo componente base, TsgcAIDatabaseVector, para que você possa trocar um pelo outro sem alterar seu código de ingestão ou de consulta. Combine qualquer um dos backends com o componente TsgcAIOpenAIEmbeddings para transformar texto bruto em vetores e enviá-lo diretamente para o armazenamento.
Quando usar cada um: opte pelo backend de arquivo quando quiser zero infraestrutura e os dados couberem confortavelmente na máquina. Escolha o Pinecone quando o índice for grande, precisar ser compartilhado entre processos ou usuários, ou precisar escalar além de um único host.
Atribua um armazenamento vetorial à propriedade Database de um componente TsgcAIOpenAIEmbeddings e, em seguida, chame CreateEmbeddingsFromFile para gerar embeddings e ingerir um documento inteiro em um único lote. Internamente, cada trecho é adicionado através da sequência BeginAddData / AddData / EndAddData que o armazenamento herda de TsgcAIDatabaseVector, de modo que os backends de arquivo e Pinecone se comportam de forma idêntica do ponto de vista do seu código.
No momento da consulta, você gera o embedding da pergunta do usuário com GetEmbedding e passa o vetor resultante para QueryData, que retorna as correspondências mais próximas classificadas por similaridade de cosseno. Devolva essas passagens a um modelo de chat como contexto e você terá um pipeline RAG funcional: respostas fundamentadas nos seus próprios dados, com citações que você controla. A mesma abordagem viabiliza busca semântica em bases de conhecimento, deduplicação, recomendação e clustering, tudo sem sair do Delphi ou do C++ Builder.
Ingira um corpus e consulte o vizinho mais próximo com qualquer um dos 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;