~/tools / Embeddings e busca (RAG) / Embeddings to pgvector INSERT

Embeddings to pgvector INSERT — Transforme resultados do /api/embed e textos em INSERT do pgvector

Transforme os textos dos quais você gerou embeddings e a resposta do /api/embed do Ollama (ou de um endpoint /v1/embeddings compatível com a OpenAI) em instruções INSERT para uma tabela pgvector no PostgreSQL. Cada texto é emparelhado com o seu vetor em ordem, as aspas são escapadas e a ferramenta verifica se as contagens e as dimensões combinam antes que você execute qualquer coisa. Nada sai do seu navegador.

O exemplo usa vetores inventados, de comprimento unitário e com 4 dimensões para que dê para lê-los. Embeddings reais têm centenas ou milhares de dimensões.

3 linhas com 4 dimensões. Textos lidos como o corpo da requisição do /api/embed, vetores como uma resposta do Ollama /api/embed.

Instruções INSERT

Execute no psql ou em outro cliente. As linhas são inseridas em uma única transação.

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 vetor do README do pgvector, verificado com o pgvector 0.8.7 em 2026-11-04. README do pgvector

Tudo é feito no seu navegador. A ferramenta escreve SQL e não se conecta a nada.

Depois de gerar os embeddings dos trechos dos seus documentos com o Ollama, os vetores precisam ir para o banco de dados junto com os textos de onde vieram. O /api/embed do Ollama devolve um vetor por string de entrada, na mesma ordem da entrada, então o primeiro texto corresponde ao primeiro vetor. Esta ferramenta faz o emparelhamento e escreve o SQL. Cole os textos, seja como o corpo JSON que você enviou ao /api/embed (o RAG Text Chunker deste site o produz), como um array JSON de strings ou um por linha, e cole a resposta. A ferramenta lê a resposta do Ollama ({"embeddings": [[…], …]}) e a compatível com a OpenAI ({"data": [{"embedding": […]}]}, recolocada na ordem de index). Ela escreve os vetores no formato de texto do pgvector, como '[0.1,-0.2,0.3]', e escreve cada texto como uma constante de string SQL: a documentação do PostgreSQL diz que uma aspa simples dentro de uma string é escrita como duas aspas simples, e as barras invertidas são mantidas como estão porque standard_conforming_strings vem ativado por padrão desde o PostgreSQL 9.1. Antes de escrever qualquer coisa, ela verifica o que faria o INSERT falhar ou emparelharia linhas erradas: um número diferente de textos e de vetores, vetores com dimensões diferentes, uma dimensão diferente da vector(n) da coluna, valores que não são números finitos (o pgvector não aceita NaN nem Infinity), embeddings em base64 e o caractere NUL, que o PostgreSQL não consegue guardar em um texto. As instruções são envolvidas em BEGIN e COMMIT, com 100 linhas por INSERT. Executamos a saída no pgvector 0.8.7 com PostgreSQL 16 usando uma resposta real do Ollama, com textos contendo aspas, barras invertidas, quebras de linha e emoji, e os textos voltaram sem alterações.

A lógica principal desta ferramenta é de código aberto, sob a licença MIT. github.com/seigo5555/toolkitbox-lib/src/pgvector-insert.ts

Casos de uso

  • Carregar no PostgreSQL os trechos de um manual ou de um FAQ e seus embeddings do Ollama para uma busca RAG
  • Experimentar uma busca com algumas linhas reais antes de escrever o código de carga da sua aplicação
  • Descobrir por que uma inserção falha: um vetor com o número errado de dimensões, ou mais textos que vetores

Como usar

  1. Cole os textos dos quais você gerou embeddings: o corpo JSON do RAG Text Chunker, um array JSON de strings ou um texto por linha.
  2. Envie os mesmos textos ao /api/embed e cole a resposta JSON inteira. Digite os nomes da tabela e das colunas e, se quiser, as dimensões da coluna vector(n).
  3. Copie o SQL e execute-o no psql ou em outro cliente. O pgvector SQL Builder deste site escreve uma tabela e uma consulta de busca que combinam.

FAQ

Como sei qual vetor pertence a qual texto?

Pela ordem. O /api/embed do Ollama devolve os embeddings na mesma ordem do array de entrada, então a ferramenta emparelha o primeiro texto com o primeiro vetor, o segundo com o segundo, e assim por diante. Se as contagens forem diferentes, a ferramenta para em vez de adivinhar.

Meus trechos contêm quebras de linha. Posso colá-los um por linha?

Não, uma quebra de linha dividiria um trecho em dois textos. Cole, em vez disso, o corpo JSON que você enviou ao /api/embed ou um array JSON de strings; as quebras de linha dentro de cada string são mantidas no SQL.

É seguro colar texto com aspas?

A ferramenta duplica cada aspa simples, que é como a documentação do PostgreSQL diz que se escreve uma aspa dentro de uma constante de string. As barras invertidas ficam inalteradas, o que está correto com o padrão standard_conforming_strings = on. Se o seu servidor o tiver desativado, não execute a saída. No código de uma aplicação, use os parâmetros do driver do seu banco de dados em vez de montar strings SQL.

O que acontece se as dimensões não combinarem com a coluna?

O pgvector rejeita a linha, com um erro como "expected 384 dimensions, not 768". Digite as dimensões da coluna na ferramenta para detectar isso antes de executar o SQL. Dimensões diferentes geralmente significam que os vetores vieram de outro modelo ou de outra configuração de dimensões.

Quantas linhas posso converter de uma vez?

Até 1,000 textos e vetores. Para cargas maiores, o README do pgvector mostra a carga em massa com COPY.

Meus dados são enviados para algum lugar?

Não. A conversão roda no seu navegador. A ferramenta nunca se conecta ao Ollama nem a um banco de dados.

Artigos relacionados

Relacionados