Bases de datos vectoriales — sgcWebSockets | eSeGeCe

Bases de datos vectoriales

Conéctate a bases de datos vectoriales desde Delphi para búsqueda semántica, RAG y aplicaciones impulsadas por IA. Soporte para Pinecone y más.

Búsqueda semántica y RAG en Delphi

Almacena texto como embeddings de alta dimensión y recupera los fragmentos más relevantes por significado, no por palabras clave.

Una base de datos vectorial almacena los embeddings numéricos que produce un modelo de embeddings y te permite encontrar las entradas más cercanas a un vector de consulta. Esta es la base de la búsqueda semántica y de Retrieval-Augmented Generation (RAG), donde fundamentas un modelo de lenguaje con fragmentos extraídos de tus propios documentos en lugar de depender únicamente de lo que el modelo memorizó durante el entrenamiento.

sgcWebSockets incluye dos backends de almacenamiento vectorial intercambiables que comparten el mismo componente base, TsgcAIDatabaseVector, de modo que puedes cambiar uno por otro sin modificar tu código de ingesta ni de consulta. Combina cualquiera de los backends con el componente TsgcAIOpenAIEmbeddings para convertir texto sin procesar en vectores e introducirlo directamente en el almacén.

  • TsgcAIDatabaseVectorFile — un almacén local basado en archivos. Sin servicio externo, ideal para aplicaciones de escritorio, uso sin conexión y corpus más pequeños.
  • TsgcAIDatabaseVectorPinecone — el servicio en la nube gestionado de Pinecone a través de su API REST, para índices grandes, compartidos o escalados horizontalmente.

Cuándo usar cada uno: opta por el backend de archivos cuando quieras cero infraestructura y los datos quepan cómodamente en la máquina. Elige Pinecone cuando el índice sea grande, deba compartirse entre procesos o usuarios, o necesite escalar más allá de un único host.

  • Almacena y consulta embeddings vectoriales de alta dimensión
  • Búsqueda semántica por similitud para aplicaciones RAG
  • Soporte de varios backends de bases de datos vectoriales
  • Filtrado por metadatos y búsqueda híbrida
  • Operaciones de upsert y consulta por lotes

Cómo funciona

Asigna un almacén vectorial a la propiedad Database de un componente TsgcAIOpenAIEmbeddings y luego llama a CreateEmbeddingsFromFile para incrustar e ingerir un documento completo en un solo lote. Internamente, cada fragmento se añade mediante la secuencia BeginAddData / AddData / EndAddData que el almacén hereda de TsgcAIDatabaseVector, de modo que los backends de archivo y de Pinecone se comportan de forma idéntica desde el punto de vista de tu código.

En el momento de la consulta, incrustas la pregunta del usuario con GetEmbedding y pasas el vector resultante a QueryData, que devuelve las coincidencias más cercanas ordenadas por similitud del coseno. Devuelve esos fragmentos a un modelo de chat como contexto y tendrás un pipeline RAG funcional: respuestas fundamentadas en tus propios datos, con citas que tú controlas. El mismo enfoque impulsa la búsqueda semántica sobre bases de conocimiento, la deduplicación, la recomendación y el clustering, todo sin salir de Delphi o C++ Builder.

Ejemplo en Delphi

Ingiere un corpus y consulta el vecino más cercano con cualquiera de los 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;

¿Listo para usar bases de datos vectoriales?

Descarga la prueba gratuita y empieza a construir en minutos.