~/tools / Embeddings y búsqueda (RAG) / Embeddings to pgvector INSERT
Embeddings to pgvector INSERT — Convierte resultados de /api/embed y textos en INSERT de pgvector
Convierte los textos que has pasado a embeddings y la respuesta de /api/embed de Ollama (o de un endpoint /v1/embeddings compatible con OpenAI) en sentencias INSERT para una tabla pgvector de PostgreSQL. Cada texto se empareja con su vector en orden, las comillas se escapan y la herramienta comprueba que coincidan los recuentos y las dimensiones antes de que ejecutes nada. Nada sale de tu navegador.
El ejemplo usa vectores inventados, de longitud unitaria y con 4 dimensiones para que se puedan leer. Los embeddings reales tienen cientos o miles de dimensiones.
3 filas con 4 dimensiones. Textos leídos como el cuerpo de la petición a /api/embed, vectores como una respuesta de Ollama /api/embed.
Sentencias INSERT
Ejecútalo en psql u otro cliente. Las filas se insertan en una sola transacción.
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 de vector del README de pgvector, comprobado con pgvector 0.8.7 el 2026-11-04. README de pgvector
Todo se hace en tu navegador. La herramienta escribe SQL y no se conecta a nada.
Después de crear los embeddings de los fragmentos de tus documentos con Ollama, los vectores tienen que entrar en la base de datos junto con los textos de los que proceden. /api/embed de Ollama devuelve un vector por cada cadena de entrada, en el mismo orden que la entrada, así que el primer texto corresponde al primer vector. Esta herramienta hace el emparejamiento y escribe el SQL. Pega los textos, ya sea como el cuerpo JSON que enviaste a /api/embed (lo produce el RAG Text Chunker de este sitio), como un array JSON de cadenas o uno por línea, y pega la respuesta. La herramienta lee la respuesta de Ollama ({"embeddings": [[…], …]}) y la compatible con OpenAI ({"data": [{"embedding": […]}]}, devuelta al orden de index). Escribe los vectores en el formato de texto de pgvector, como '[0.1,-0.2,0.3]', y escribe cada texto como una constante de cadena SQL: la documentación de PostgreSQL dice que una comilla simple dentro de una cadena se escribe como dos comillas simples, y las barras invertidas se dejan tal cual porque standard_conforming_strings está activado por defecto desde PostgreSQL 9.1. Antes de escribir nada, comprueba lo que haría fallar el INSERT o emparejaría filas equivocadas: un número distinto de textos y de vectores, vectores con dimensiones diferentes, una dimensión distinta de la vector(n) de la columna, valores que no son números finitos (pgvector no acepta NaN ni Infinity), embeddings en base64 y el carácter NUL, que PostgreSQL no puede guardar en un texto. Las sentencias se envuelven en BEGIN y COMMIT, con 100 filas por INSERT. Ejecutamos el resultado en pgvector 0.8.7 con PostgreSQL 16 usando una respuesta real de Ollama, con textos que contenían comillas, barras invertidas, saltos de línea y emoji, y los textos volvieron sin cambios.
La lógica principal de esta herramienta es de código abierto, con licencia MIT. github.com/seigo5555/toolkitbox-lib/src/pgvector-insert.ts
Casos de uso
- Cargar en PostgreSQL los fragmentos de un manual o unas FAQ y sus embeddings de Ollama para una búsqueda RAG
- Probar una búsqueda con unas pocas filas reales antes de escribir el código de carga de tu aplicación
- Averiguar por qué falla una inserción: un vector con un número de dimensiones incorrecto, o más textos que vectores
Cómo usarlo
- Pega los textos que pasaste a embeddings: el cuerpo JSON del RAG Text Chunker, un array JSON de cadenas o un texto por línea.
- Envía los mismos textos a /api/embed y pega la respuesta JSON completa. Escribe los nombres de la tabla y de las columnas y, si quieres, las dimensiones de la columna vector(n).
- Copia el SQL y ejecútalo en psql u otro cliente. El pgvector SQL Builder de este sitio escribe una tabla y una consulta de búsqueda que encajan.
FAQ
¿Cómo sé qué vector corresponde a qué texto?
Por el orden. /api/embed de Ollama devuelve los embeddings en el mismo orden que el array de entrada, así que la herramienta empareja el primer texto con el primer vector, el segundo con el segundo, y así sucesivamente. Si los recuentos no coinciden, la herramienta se detiene en lugar de adivinar.
Mis fragmentos contienen saltos de línea. ¿Puedo pegarlos uno por línea?
No, un salto de línea dividiría un fragmento en dos textos. Pega en su lugar el cuerpo JSON que enviaste a /api/embed o un array JSON de cadenas; los saltos de línea dentro de cada cadena se conservan en el SQL.
¿Es seguro pegar texto con comillas?
La herramienta duplica cada comilla simple, que es como la documentación de PostgreSQL dice que se escribe una comilla dentro de una constante de cadena. Las barras invertidas se dejan sin cambios, lo cual es correcto con el valor por defecto standard_conforming_strings = on. Si tu servidor lo tiene desactivado, no ejecutes el resultado. En el código de una aplicación, usa los parámetros de tu controlador de base de datos en lugar de construir cadenas SQL.
¿Qué pasa si las dimensiones no coinciden con la columna?
pgvector rechaza la fila, con un error como "expected 384 dimensions, not 768". Escribe las dimensiones de la columna en la herramienta para detectarlo antes de ejecutar el SQL. Dimensiones distintas suelen significar que los vectores proceden de otro modelo o de otro ajuste de dimensiones.
¿Cuántas filas puedo convertir de una vez?
Hasta 1,000 textos y vectores. Para cargas mayores, el README de pgvector muestra la carga masiva con COPY.
¿Mis datos se envían a algún sitio?
No. La conversión se hace en tu navegador. La herramienta nunca se conecta a Ollama ni a una base de datos.
Artículos relacionados
- Guarda y busca embeddings de Ollama en PostgreSQL con pgvectorGuarda embeddings de Ollama en PostgreSQL con pgvector, búscalos con HNSW o IVFFlat y pasa los resultados a /api/chat para que la respuesta cite sus fuentes.
- Embeddings con Ollama: lo básico para búsqueda y RAGCrea embeddings con el /api/embed de Ollama: los modelos y sus tamaños, truncate y dimensions, vectores de longitud unitaria y similitud del coseno, según la documentación oficial.