~/tools / Embeddings und Suche (RAG) / Embeddings to pgvector INSERT

Embeddings to pgvector INSERT — Ergebnisse von Ollama /api/embed und Texte in pgvector-INSERTs umwandeln

Verwandeln Sie die eingebetteten Texte und die Antwort von /api/embed von Ollama (oder eines OpenAI-kompatiblen Endpunkts /v1/embeddings) in INSERT-Anweisungen für eine pgvector-Tabelle in PostgreSQL. Jeder Text wird der Reihe nach seinem Vektor zugeordnet, Anführungszeichen werden maskiert, und das Tool prüft, ob Anzahl und Dimensionen übereinstimmen, bevor Sie etwas ausführen. Nichts verlässt Ihren Browser.

Das Beispiel verwendet erfundene Vektoren der Länge 1 mit 4 Dimensionen, damit Sie sie lesen können. Echte Embeddings haben Hunderte oder Tausende Dimensionen.

3 Zeilen mit 4 Dimensionen. Texte gelesen als der Anfrage-Body für /api/embed, Vektoren als eine Antwort von Ollama /api/embed.

INSERT-Anweisungen

Führen Sie es in psql oder einem anderen Client aus. Die Zeilen werden in einer Transaktion eingefügt.

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;

Vektorformat aus der pgvector-README, am 2026-11-04 mit pgvector 0.8.7 geprüft. pgvector README

Alles geschieht in Ihrem Browser. Das Tool schreibt SQL und verbindet sich mit nichts.

Nachdem Sie Ihre Textabschnitte mit Ollama eingebettet haben, müssen die Vektoren zusammen mit den Texten, aus denen sie stammen, in die Datenbank. /api/embed von Ollama liefert zu jedem Eingabestring einen Vektor, in derselben Reihenfolge wie die Eingabe, der erste Text gehört also zum ersten Vektor. Dieses Tool übernimmt die Zuordnung und schreibt das SQL. Fügen Sie die Texte ein, entweder als JSON-Body, den Sie an /api/embed gesendet haben (der RAG Text Chunker auf dieser Website erzeugt ihn), als JSON-Array von Strings oder einen pro Zeile, und fügen Sie die Antwort ein. Das Tool liest die Antwort von Ollama ({"embeddings": [[…], …]}) und die OpenAI-kompatible ({"data": [{"embedding": […]}]}, wieder in die Reihenfolge des Index gebracht). Es schreibt die Vektoren im Textformat von pgvector, etwa '[0.1,-0.2,0.3]', und schreibt jeden Text als SQL-Stringkonstante: Laut PostgreSQL-Dokumentation wird ein einfaches Anführungszeichen in einem String als zwei einfache Anführungszeichen geschrieben, und Backslashes bleiben unverändert, weil standard_conforming_strings seit PostgreSQL 9.1 standardmäßig eingeschaltet ist. Bevor etwas geschrieben wird, prüft das Tool, was das INSERT scheitern lassen oder falsche Zeilen zuordnen würde: eine unterschiedliche Anzahl von Texten und Vektoren, Vektoren mit unterschiedlichen Dimensionen, eine Dimension, die vom vector(n) der Spalte abweicht, Werte, die keine endlichen Zahlen sind (pgvector akzeptiert weder NaN noch Infinity), base64-Embeddings und das Zeichen NUL, das PostgreSQL nicht in text speichern kann. Die Anweisungen werden in BEGIN und COMMIT eingefasst, mit 100 Zeilen pro INSERT. Wir haben die Ausgabe mit pgvector 0.8.7 und PostgreSQL 16 mit einer echten Antwort von Ollama ausgeführt, einschließlich Texten mit Anführungszeichen, Backslashes, Zeilenumbrüchen und Emoji, und die Texte kamen unverändert zurück.

Die Kernlogik dieses Tools ist Open Source unter der MIT-Lizenz. github.com/seigo5555/toolkitbox-lib/src/pgvector-insert.ts

Anwendungsfälle

  • Die Textabschnitte eines Handbuchs oder einer FAQ und ihre Embeddings von Ollama für eine RAG-Suche in PostgreSQL laden
  • Eine Suche an einigen echten Zeilen ausprobieren, bevor Sie den Ladecode für Ihre Anwendung schreiben
  • Herausfinden, warum ein Insert fehlschlägt: ein Vektor mit der falschen Anzahl von Dimensionen oder mehr Texte als Vektoren

Verwendung

  1. Fügen Sie die eingebetteten Texte ein: den JSON-Body vom RAG Text Chunker, ein JSON-Array von Strings oder einen Text pro Zeile.
  2. Senden Sie dieselben Texte an /api/embed und fügen Sie die gesamte JSON-Antwort ein. Geben Sie die Namen von Tabelle und Spalten ein und optional die Dimensionen der Spalte vector(n).
  3. Kopieren Sie das SQL und führen Sie es in psql oder einem anderen Client aus. Der pgvector SQL Builder auf dieser Website schreibt eine passende Tabelle und Suchabfrage.

FAQ

Woher weiß ich, welcher Vektor zu welchem Text gehört?

Über die Reihenfolge. /api/embed von Ollama liefert die Embeddings in derselben Reihenfolge wie das Eingabe-Array, daher ordnet das Tool den ersten Text dem ersten Vektor zu, den zweiten dem zweiten und so weiter. Wenn die Anzahlen nicht übereinstimmen, bricht das Tool ab, statt zu raten.

Meine Textabschnitte enthalten Zeilenumbrüche. Kann ich sie einen pro Zeile einfügen?

Nein, ein Zeilenumbruch würde einen Abschnitt in zwei Texte teilen. Fügen Sie stattdessen den JSON-Body ein, den Sie an /api/embed gesendet haben, oder ein JSON-Array von Strings; die Zeilenumbrüche innerhalb jedes Strings bleiben im SQL erhalten.

Ist es sicher, Text mit Anführungszeichen einzufügen?

Das Tool verdoppelt jedes einfache Anführungszeichen, so wie es die PostgreSQL-Dokumentation für ein Anführungszeichen in einer Stringkonstante vorsieht. Backslashes bleiben unverändert, was bei der Voreinstellung standard_conforming_strings = on richtig ist. Wenn dies auf Ihrem Server ausgeschaltet ist, führen Sie die Ausgabe nicht aus. Verwenden Sie im Anwendungscode die Parameter Ihres Datenbanktreibers, statt SQL-Strings zusammenzusetzen.

Was passiert, wenn die Dimensionen nicht zur Spalte passen?

pgvector lehnt die Zeile ab, mit einer Fehlermeldung wie "expected 384 dimensions, not 768". Geben Sie die Dimensionen der Spalte im Tool ein, um das vor dem Ausführen des SQL zu erkennen. Unterschiedliche Dimensionen bedeuten meist, dass die Vektoren von einem anderen Modell oder mit einer anderen Dimensionseinstellung stammen.

Wie viele Zeilen kann ich auf einmal umwandeln?

Bis zu 1,000 Texte und Vektoren. Für größere Ladevorgänge zeigt die pgvector-README das Massenladen mit COPY.

Werden meine Daten irgendwohin gesendet?

Nein. Die Umwandlung läuft in Ihrem Browser. Das Tool verbindet sich nie mit Ollama oder mit einer Datenbank.

Passende Artikel

Ähnliche Tools