~/tools / Embedding e ricerca (RAG) / Embeddings to pgvector INSERT
Embeddings to pgvector INSERT — Trasforma risultati di /api/embed e testi in INSERT per pgvector
Trasforma i testi di cui hai calcolato gli embedding e la risposta di /api/embed di Ollama (o di un endpoint /v1/embeddings compatibile con OpenAI) in istruzioni INSERT per una tabella pgvector in PostgreSQL. Ogni testo viene abbinato al suo vettore in ordine, gli apici vengono escapati e lo strumento controlla che i conteggi e le dimensioni corrispondano prima che tu esegua qualsiasi cosa. Nulla lascia il tuo browser.
L'esempio usa vettori inventati, di lunghezza unitaria e con 4 dimensioni, per poterli leggere. Gli embedding reali hanno centinaia o migliaia di dimensioni.
3 righe con 4 dimensioni. Testi letti come il corpo della richiesta a /api/embed, vettori come una risposta di Ollama /api/embed.
Istruzioni INSERT
Eseguile in psql o in un altro client. Le righe vengono inserite in un'unica transazione.
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;Formato dei vettori dal README di pgvector, verificato con pgvector 0.8.7 il 2026-11-04. README di pgvector
Tutto avviene nel tuo browser. Lo strumento scrive SQL e non si connette a nulla.
Dopo aver calcolato con Ollama gli embedding dei frammenti dei tuoi documenti, i vettori devono entrare nel database insieme ai testi da cui provengono. /api/embed di Ollama restituisce un vettore per ogni stringa di input, nello stesso ordine dell'input, quindi il primo testo corrisponde al primo vettore. Questo strumento fa l'abbinamento e scrive l'SQL. Incolla i testi, come corpo JSON che hai inviato a /api/embed (lo produce il RAG Text Chunker di questo sito), come array JSON di stringhe o uno per riga, e incolla la risposta. Lo strumento legge la risposta di Ollama ({"embeddings": [[…], …]}) e quella compatibile con OpenAI ({"data": [{"embedding": […]}]}, rimessa nell'ordine di index). Scrive i vettori nel formato testuale di pgvector, come '[0.1,-0.2,0.3]', e scrive ogni testo come costante stringa SQL: la documentazione di PostgreSQL dice che un apice singolo dentro una stringa si scrive con due apici singoli, e i backslash vengono lasciati così come sono perché standard_conforming_strings è attivo per impostazione predefinita da PostgreSQL 9.1. Prima di scrivere qualsiasi cosa, controlla ciò che farebbe fallire l'INSERT o abbinerebbe le righe sbagliate: un numero diverso di testi e di vettori, vettori con dimensioni diverse, una dimensione diversa da quella del vector(n) della colonna, valori che non sono numeri finiti (pgvector non accetta NaN né Infinity), embedding in base64 e il carattere NUL, che PostgreSQL non può memorizzare in un testo. Le istruzioni sono racchiuse in BEGIN e COMMIT, con 100 righe per INSERT. Abbiamo eseguito l'output su pgvector 0.8.7 con PostgreSQL 16 usando una risposta reale di Ollama, con testi contenenti apici, backslash, a capo ed emoji, e i testi sono tornati invariati.
La logica principale di questo strumento è open source, con licenza MIT. github.com/seigo5555/toolkitbox-lib/src/pgvector-insert.ts
Casi d'uso
- Caricare in PostgreSQL i frammenti di un manuale o di una FAQ e i loro embedding di Ollama per una ricerca RAG
- Provare una ricerca su poche righe reali prima di scrivere il codice di caricamento della tua applicazione
- Scoprire perché un inserimento fallisce: un vettore con il numero sbagliato di dimensioni, oppure più testi che vettori
Utilizzo
- Incolla i testi di cui hai calcolato gli embedding: il corpo JSON del RAG Text Chunker, un array JSON di stringhe o un testo per riga.
- Invia gli stessi testi a /api/embed e incolla l'intera risposta JSON. Inserisci i nomi della tabella e delle colonne e, se vuoi, le dimensioni della colonna vector(n).
- Copia l'SQL ed eseguilo in psql o in un altro client. Il pgvector SQL Builder di questo sito scrive una tabella e una query di ricerca che corrispondono.
FAQ
Come faccio a sapere quale vettore appartiene a quale testo?
Dall'ordine. /api/embed di Ollama restituisce gli embedding nello stesso ordine dell'array di input, quindi lo strumento abbina il primo testo al primo vettore, il secondo al secondo, e così via. Se i conteggi sono diversi, lo strumento si ferma invece di tirare a indovinare.
I miei frammenti contengono a capo. Posso incollarli uno per riga?
No, un a capo dividerebbe un frammento in due testi. Incolla invece il corpo JSON che hai inviato a /api/embed o un array JSON di stringhe; gli a capo all'interno di ogni stringa vengono mantenuti nell'SQL.
È sicuro incollare testo con gli apici?
Lo strumento raddoppia ogni apice singolo, che è il modo in cui la documentazione di PostgreSQL dice di scrivere un apice dentro una costante stringa. I backslash vengono lasciati invariati, il che è corretto con il valore predefinito standard_conforming_strings = on. Se il tuo server lo ha disattivato, non eseguire l'output. Nel codice di un'applicazione, usa i parametri del driver del tuo database invece di costruire stringhe SQL.
Cosa succede se le dimensioni non corrispondono alla colonna?
pgvector rifiuta la riga, con un errore come "expected 384 dimensions, not 768". Inserisci le dimensioni della colonna nello strumento per scoprirlo prima di eseguire l'SQL. Dimensioni diverse di solito significano che i vettori vengono da un altro modello o da un'altra impostazione delle dimensioni.
Quante righe posso convertire in una volta?
Fino a 1,000 testi e vettori. Per caricamenti più grandi, il README di pgvector mostra il caricamento in blocco con COPY.
I miei dati vengono inviati da qualche parte?
No. La conversione viene eseguita nel tuo browser. Lo strumento non si connette mai a Ollama né a un database.
Articoli correlati
- Salvare e cercare gli embedding di Ollama in PostgreSQL con pgvectorConserva gli embedding di Ollama in PostgreSQL con pgvector, cercali con HNSW o IVFFlat e passa i risultati a /api/chat perché la risposta citi le sue fonti.
- Embedding con Ollama: le basi per ricerca e RAGCrea embedding con l'/api/embed di Ollama: i modelli e le loro dimensioni, truncate e dimensions, vettori di lunghezza unitaria e similarità del coseno, secondo la documentazione ufficiale.