~/tools / Embeddingi i wyszukiwanie (RAG) / Embeddings to pgvector INSERT
Embeddings to pgvector INSERT — Wyniki Ollamy /api/embed i teksty na polecenia INSERT dla pgvector
Zamień teksty, dla których utworzono embeddingi, i odpowiedź z /api/embed Ollamy (albo z endpointu /v1/embeddings zgodnego z OpenAI) na polecenia INSERT dla tabeli pgvector w PostgreSQL. Każdy tekst jest łączony ze swoim wektorem według kolejności, cudzysłowy są poprawnie zapisywane, a narzędzie sprawdza zgodność liczby i wymiarów, zanim cokolwiek uruchomisz. Nic nie opuszcza Twojej przeglądarki.
Przykład używa zmyślonych wektorów o długości 1 i 4 wymiarach, aby dało się je przeczytać. Prawdziwe embeddingi mają setki lub tysiące wymiarów.
3 wierszy z 4 wymiarami. Teksty odczytano jako treść żądania /api/embed, wektory jako odpowiedź Ollama /api/embed.
Polecenia INSERT
Uruchom je w psql lub innym kliencie. Wiersze są wstawiane w jednej transakcji.
BEGIN;
INSERT INTO documents (content, embedding) VALUES
('Embeddings turn text into numeric vectors.', '[0.620186,0.410123,0.550165,0.380114]'),
('pgvector stores vectors in PostgreSQL, next to the rest of your data.', '[0.578815,0.469039,0.518937,0.419142]'),
('Ollama''s /api/embed returns one vector per input, in the same order.', '[0.119982,0.809879,-0.329951,0.46993]');
COMMIT;Format wektora z README pgvector, sprawdzony na pgvector 0.8.7 dnia 2026-11-04. pgvector README
Wszystko dzieje się w Twojej przeglądarce. Narzędzie pisze SQL i z niczym się nie łączy.
Gdy fragmenty dokumentów zostaną zamienione w embeddingi w Ollamie, wektory trzeba zapisać w bazie razem z tekstami, z których pochodzą. /api/embed Ollamy zwraca jeden wektor na każdy ciąg wejściowy, w tej samej kolejności co dane wejściowe, więc pierwszy tekst odpowiada pierwszemu wektorowi. To narzędzie wykonuje to łączenie i pisze SQL. Wklej teksty: jako treść JSON, którą wysłano do /api/embed (tworzy ją RAG Text Chunker na tej stronie), jako tablicę JSON ciągów albo po jednym w wierszu, oraz wklej odpowiedź. Narzędzie odczytuje odpowiedź Ollamy ({"embeddings": [[…], …]}) i odpowiedź zgodną z OpenAI ({"data": [{"embedding": […]}]}, ułożoną z powrotem według indeksu). Zapisuje wektory w formacie tekstowym pgvector, na przykład '[0.1,-0.2,0.3]', a każdy tekst jako stałą łańcuchową SQL: dokumentacja PostgreSQL mówi, że apostrof wewnątrz ciągu zapisuje się jako dwa apostrofy, a ukośniki wsteczne zostają bez zmian, ponieważ standard_conforming_strings jest domyślnie włączone od PostgreSQL 9.1. Zanim cokolwiek zapisze, sprawdza to, co spowodowałoby błąd INSERT albo połączenie niewłaściwych wierszy: różną liczbę tekstów i wektorów, wektory o różnych wymiarach, wymiar różny od vector(n) kolumny, wartości, które nie są skończonymi liczbami (pgvector nie przyjmuje NaN ani Infinity), embeddingi w base64 oraz znak NUL, którego PostgreSQL nie może przechować w text. Polecenia są ujęte w BEGIN i COMMIT, po 100 wierszy na INSERT. Uruchomiliśmy wynik na pgvector 0.8.7 z PostgreSQL 16, używając prawdziwej odpowiedzi z Ollamy, w tym tekstów z cudzysłowami, ukośnikami wstecznymi, podziałami wierszy i emoji, a teksty wróciły bez zmian.
Główna logika tego narzędzia jest otwartoźródłowa, na licencji MIT. github.com/seigo5555/toolkitbox-lib/src/pgvector-insert.ts
Zastosowania
- Wczytać fragmenty instrukcji lub FAQ i ich embeddingi z Ollamy do PostgreSQL na potrzeby wyszukiwania RAG
- Wypróbować wyszukiwanie na kilku prawdziwych wierszach, zanim napiszesz kod ładujący dla swojej aplikacji
- Sprawdzić, dlaczego INSERT się nie udaje: wektor z niewłaściwą liczbą wymiarów albo więcej tekstów niż wektorów
Jak używać
- Wklej teksty, dla których utworzono embeddingi: treść JSON z RAG Text Chunker, tablicę JSON ciągów albo po jednym tekście w wierszu.
- Wyślij te same teksty do /api/embed i wklej całą odpowiedź JSON. Wpisz nazwy tabeli i kolumn oraz opcjonalnie wymiary kolumny vector(n).
- Skopiuj SQL i uruchom go w psql lub innym kliencie. pgvector SQL Builder na tej stronie pisze pasującą tabelę i zapytanie wyszukujące.
FAQ
Skąd wiadomo, który wektor należy do którego tekstu?
Z kolejności. /api/embed Ollamy zwraca embeddingi w tej samej kolejności co tablica wejściowa, więc narzędzie łączy pierwszy tekst z pierwszym wektorem, drugi z drugim i tak dalej. Jeśli liczby się różnią, narzędzie zatrzymuje się zamiast zgadywać.
Moje fragmenty zawierają podziały wierszy. Czy mogę wkleić je po jednym w wierszu?
Nie, podział wiersza rozdzieliłby fragment na dwa teksty. Wklej zamiast tego treść JSON wysłaną do /api/embed albo tablicę JSON ciągów; podziały wierszy wewnątrz każdego ciągu zostają w SQL.
Czy wklejanie tekstu z cudzysłowami jest bezpieczne?
Narzędzie podwaja każdy apostrof, tak jak dokumentacja PostgreSQL każe zapisywać apostrof w stałej łańcuchowej. Ukośniki wsteczne zostają bez zmian, co jest poprawne przy domyślnym standard_conforming_strings = on. Jeśli na Twoim serwerze jest wyłączone, nie uruchamiaj wyniku. W kodzie aplikacji używaj parametrów sterownika bazy danych zamiast budowania ciągów SQL.
Co się stanie, jeśli wymiary nie pasują do kolumny?
pgvector odrzuca wiersz z błędem takim jak "expected 384 dimensions, not 768". Wpisz w narzędziu wymiary kolumny, aby wychwycić to przed uruchomieniem SQL. Różne wymiary zwykle oznaczają, że wektory pochodzą z innego modelu albo z innym ustawieniem wymiarów.
Ile wierszy mogę przekonwertować naraz?
Do 1,000 tekstów i wektorów. Przy większych ładowaniach README pgvector pokazuje ładowanie zbiorcze za pomocą COPY.
Czy moje dane są dokądś wysyłane?
Nie. Konwersja odbywa się w Twojej przeglądarce. Narzędzie nigdy nie łączy się z Ollamą ani z bazą danych.
Powiązane artykuły
- Przechowywanie i wyszukiwanie embeddingów Ollamy w PostgreSQL z pgvectorEmbeddingi Ollamy w PostgreSQL z pgvector, wyszukiwanie przez HNSW lub IVFFlat i przekazanie wyników do /api/chat, aby odpowiedź podawała źródła.
- Embeddingi w Ollamie: podstawy wyszukiwania i RAGTwórz embeddingi przez /api/embed w Ollamie: modele i ich rozmiary, truncate i dimensions, wektory jednostkowe i podobieństwo cosinusowe, według oficjalnej dokumentacji.