~/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
- 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.
- 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).
- 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
- Guarde e pesquise embeddings do Ollama no PostgreSQL com o pgvectorGuarde embeddings do Ollama no PostgreSQL com o pgvector, pesquise-os com HNSW ou IVFFlat e passe os resultados para o /api/chat para que a resposta cite suas fontes.
- Embeddings com o Ollama: o básico para busca e RAGCrie embeddings com o /api/embed do Ollama: os modelos e seus tamanhos, truncate e dimensions, vetores de comprimento unitário e similaridade de cosseno, segundo a documentação oficial.