Bancos de dados vetoriais — sgcWebSockets | eSeGeCe

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.

Busca semântica e RAG em Delphi

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.

  • TsgcAIDatabaseVectorFile — um armazenamento local baseado em arquivo. Sem serviço externo, ideal para aplicações desktop, uso offline e corpora menores.
  • TsgcAIDatabaseVectorPinecone — o serviço gerenciado em nuvem Pinecone através da sua API REST, para índices grandes, compartilhados ou escalados horizontalmente.

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.

  • Armazene e consulte embeddings vetoriais de alta dimensionalidade
  • Busca por similaridade semântica para aplicações RAG
  • Suporte a múltiplos backends de bancos de dados vetoriais
  • Filtragem por metadados e busca híbrida
  • Operações de upsert e consulta em lote

Como funciona

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.

Exemplo em Delphi

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;

Pronto para usar bancos de dados vetoriais?

Baixe a versão de avaliação gratuita e comece a desenvolver em poucos minutos.