Bazy wektorowe
Łącz się z bazami wektorowymi z Delphi na potrzeby wyszukiwania semantycznego, RAG i aplikacji napędzanych AI. Wsparcie dla Pinecone i innych.
Łącz się z bazami wektorowymi z Delphi na potrzeby wyszukiwania semantycznego, RAG i aplikacji napędzanych AI. Wsparcie dla Pinecone i innych.
Przechowuj tekst jako wielowymiarowe embeddingi i pobieraj najbardziej trafne fragmenty według znaczenia, a nie słów kluczowych.
Baza wektorowa przechowuje numeryczne embeddingi tworzone przez model embeddingów i pozwala znaleźć wpisy najbliższe wektorowi zapytania. To fundament wyszukiwania semantycznego i Retrieval-Augmented Generation (RAG), gdzie duży model językowy jest osadzany w kontekście fragmentów pobranych z Twoich własnych dokumentów, zamiast polegać wyłącznie na tym, co model zapamiętał podczas trenowania.
sgcWebSockets dostarcza dwa wymienne backendy magazynu wektorowego, które współdzielą ten sam komponent bazowy, TsgcAIDatabaseVector, dzięki czemu możesz zamienić jeden na drugi bez zmiany kodu ingestu czy zapytań. Połącz dowolny backend z komponentem TsgcAIOpenAIEmbeddings, aby zamienić surowy tekst na wektory i wysłać je prosto do magazynu.
Kiedy którego użyć: sięgnij po backend plikowy, gdy chcesz zero infrastruktury, a dane swobodnie mieszczą się na maszynie. Wybierz Pinecone, gdy indeks jest duży, musi być współdzielony między procesami lub użytkownikami albo musi skalować się ponad jednego hosta.
Przypisz magazyn wektorowy do właściwości Database komponentu TsgcAIOpenAIEmbeddings, a następnie wywołaj CreateEmbeddingsFromFile, aby osadzić i wczytać cały dokument w jednej partii. Wewnętrznie każdy fragment jest dodawany przez sekwencję BeginAddData / AddData / EndAddData, którą magazyn dziedziczy po TsgcAIDatabaseVector, więc backendy plikowy i Pinecone zachowują się identycznie z punktu widzenia Twojego kodu.
W trakcie zapytania osadzasz pytanie użytkownika za pomocą GetEmbedding i przekazujesz powstały wektor do QueryData, który zwraca najbliższe dopasowania uszeregowane według podobieństwa kosinusowego. Podaj te fragmenty z powrotem do modelu czatu jako kontekst i masz działający potok RAG: odpowiedzi osadzone w Twoich własnych danych, z cytowaniami pod Twoją kontrolą. To samo podejście napędza wyszukiwanie semantyczne po bazach wiedzy, deduplikację, rekomendacje i klasteryzację, a wszystko to bez opuszczania Delphi czy C++ Builder.
Wczytaj korpus i odpytaj najbliższego sąsiada za pomocą dowolnego backendu.
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;