~/tools / Embeddings e busca (RAG) / Embedding Similarity Calculator

Embedding Similarity Calculator — Compare vetores de embeddings do Ollama /api/embed: cosseno, produto escalar, distância

Cole a resposta do /api/embed do Ollama ou de um endpoint /v1/embeddings compatível com a OpenAI e compare os vetores: similaridade de cosseno, produto escalar e distância euclidiana, classificados em relação ao vetor que você escolher, além de uma matriz de similaridade. Ela também mostra as dimensões e o comprimento de cada vetor, para você ver se os vetores estão normalizados e se vieram do mesmo modelo. 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.

Lido como uma resposta do Ollama /api/embed: 4 vetores com 4 dimensões. Todos os vetores têm comprimento 1, então a similaridade de cosseno e o produto escalar são iguais.

Classificação por similaridade de cosseno

Comparado com #0 How do I keep a model loaded in Ollama?. Quanto maior, mais similar.

PosiçãoTextoCossenoProduto escalarDistância
1#1 keep_alive controls how long the model stays in memory0.99620.99620.0876
2#2 Protect Ollama with nginx and a password0.40370.40371.0921
3#3 Tomorrow's weather forecast0.01000.01001.4071

Matriz de similaridade de cosseno

Cada célula compara o vetor da linha com o vetor da coluna.

#0#1#2#3
#01.0000.9960.4040.010
#10.9961.0000.475-0.005
#20.4040.4751.000-0.377
#30.010-0.005-0.3771.000

Vetores

TextoDimensõesComprimento (norma L2)Comprimento unitário
#0 How do I keep a model loaded in Ollama?41.000000Sim
#1 keep_alive controls how long the model stays in memory41.000000Sim
#2 Protect Ollama with nginx and a password41.000001Sim
#3 Tomorrow's weather forecast41.000000Sim

Com base na documentação de embeddings e na referência da API do Ollama, conferidas em 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings

Tudo é calculado no seu navegador. Nada é enviado para lugar nenhum.

Um modelo de embeddings transforma um texto em uma lista de números, um vetor. A documentação do Ollama descreve o uso desses vetores para busca semântica com a similaridade de cosseno e para RAG. Antes de escrever o código da busca, vale olhar os números: a pergunta realmente fica mais próxima do trecho que a responde? Esta ferramenta lê o JSON que o Ollama devolve de /api/embed ({"embeddings": [[…], …]}), o formato compatível com a OpenAI de /v1/embeddings ({"data": [{"embedding": […]}]}) ou um array simples de vetores. Ela classifica todos os vetores em relação ao que você escolher pela similaridade de cosseno, e mostra também o produto escalar e a distância euclidiana. A documentação do Ollama diz que /api/embed devolve vetores normalizados em L2 (de comprimento unitário); para esses vetores, a similaridade de cosseno e o produto escalar são o mesmo número, e a ferramenta mostra o comprimento de cada vetor para você confirmar. A documentação também diz para usar o mesmo modelo de embeddings para indexar e para consultar. Vetores com números diferentes de dimensões não podem ser comparados de jeito nenhum, e a ferramenta para com um erro quando os encontra. Os cálculos foram conferidos com valores calculados separadamente em Python.

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

Casos de uso

  • Criar, em uma única requisição /api/embed, o embedding de uma pergunta e de alguns trechos candidatos e ver qual trecho fica em primeiro antes de montar uma busca
  • Comparar dois modelos de embeddings nas mesmas frases, um modelo de cada vez, para ver qual separa com mais clareza o texto relacionado do não relacionado
  • Verificar se os vetores guardados têm comprimento unitário e as dimensões esperadas antes de escolher uma métrica de distância para o seu banco de dados vetorial

Como usar

  1. Envie os textos ao seu modelo em uma única requisição, por exemplo curl http://localhost:11434/api/embed -d '{"model": "embeddinggemma", "input": ["question", "passage 1", "passage 2"]}', e cole a resposta JSON inteira.
  2. Opcionalmente, escreva um rótulo por linha, na mesma ordem da entrada, para que os resultados mostrem os textos em vez de números.
  3. Escolha com qual vetor comparar (por padrão #0, a primeira entrada). A tabela classifica os demais pela similaridade de cosseno; a matriz mostra todos os pares quando há 10 vetores ou menos.

FAQ

Qual similaridade devo usar?

A página de embeddings do Ollama diz para usar a similaridade de cosseno na maioria dos casos de busca semântica. A similaridade de cosseno compara a direção de dois vetores e ignora o comprimento deles; 1 significa a mesma direção. A ferramenta também mostra o produto escalar e a distância euclidiana, porque os bancos de dados vetoriais costumam permitir escolher entre eles.

Por que a similaridade de cosseno e o produto escalar são iguais?

Porque os vetores têm comprimento 1. A documentação do Ollama diz que /api/embed devolve vetores normalizados em L2, de comprimento unitário, e para vetores de comprimento unitário a similaridade de cosseno é igual ao produto escalar. A ferramenta mostra o comprimento de cada vetor e informa se todos têm comprimento unitário (dentro de 0.001).

A ferramenta diz que as dimensões não coincidem. O que isso significa?

Dois vetores só podem ser comparados quando têm a mesma quantidade de números. O comprimento depende do modelo, que a documentação coloca tipicamente entre 384 e 1024 dimensões, e a requisição /api/embed também aceita um campo dimensions. Comprimentos diferentes geralmente significam que os vetores vieram de modelos ou configurações diferentes. A documentação diz para usar o mesmo modelo de embeddings para indexar e para consultar.

Posso colar uma resposta com embeddings em base64?

Não. A ferramenta lê apenas números. Se você chamar o endpoint /v1/embeddings compatível com a OpenAI, peça os embeddings como números de ponto flutuante (floats), não como base64.

Uma similaridade de 0.8 é boa?

Não existe um limite fixo. Os valores dependem do modelo e dos seus textos, então compare as pontuações de trechos relacionados e não relacionados do mesmo modelo em vez de julgar um número isolado.

Meus dados são enviados para algum lugar?

Não. Os cálculos rodam no seu navegador. A ferramenta nunca chama o Ollama nem qualquer outro servidor; a requisição ao seu modelo é você mesmo quem envia.

Artigos relacionados

Relacionados