~/tools / Embeddings y búsqueda (RAG) / Embedding Similarity Calculator
Embedding Similarity Calculator — Compara vectores de embeddings de Ollama /api/embed: coseno, producto escalar, distancia
Pega la respuesta del /api/embed de Ollama o de un endpoint /v1/embeddings compatible con OpenAI y compara los vectores: similitud del coseno, producto escalar y distancia euclídea, ordenados respecto al vector que elijas, además de una matriz de similitud. También muestra las dimensiones y la longitud de cada vector, para que veas si los vectores están normalizados y si proceden del mismo modelo. 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.
Leído como una respuesta de Ollama /api/embed: 4 vectores con 4 dimensiones. Todos los vectores tienen una longitud de 1, así que la similitud del coseno y el producto escalar son iguales.
Clasificación por similitud del coseno
Comparado con #0 How do I keep a model loaded in Ollama?. Cuanto mayor, más similar.
| Puesto | Texto | Coseno | Producto escalar | Distancia |
|---|---|---|---|---|
| 1 | #1 keep_alive controls how long the model stays in memory | 0.9962 | 0.9962 | 0.0876 |
| 2 | #2 Protect Ollama with nginx and a password | 0.4037 | 0.4037 | 1.0921 |
| 3 | #3 Tomorrow's weather forecast | 0.0100 | 0.0100 | 1.4071 |
Matriz de similitud del coseno
Cada celda compara el vector de la fila con el vector de la columna.
| #0 | #1 | #2 | #3 | |
|---|---|---|---|---|
| #0 | 1.000 | 0.996 | 0.404 | 0.010 |
| #1 | 0.996 | 1.000 | 0.475 | -0.005 |
| #2 | 0.404 | 0.475 | 1.000 | -0.377 |
| #3 | 0.010 | -0.005 | -0.377 | 1.000 |
Vectores
| Texto | Dimensiones | Longitud (norma L2) | Longitud unitaria |
|---|---|---|---|
| #0 How do I keep a model loaded in Ollama? | 4 | 1.000000 | Sí |
| #1 keep_alive controls how long the model stays in memory | 4 | 1.000000 | Sí |
| #2 Protect Ollama with nginx and a password | 4 | 1.000001 | Sí |
| #3 Tomorrow's weather forecast | 4 | 1.000000 | Sí |
Basado en la documentación de embeddings y la referencia de la API de Ollama, comprobadas el 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings
Todo se calcula en tu navegador. No se envía nada a ninguna parte.
Un modelo de embeddings convierte un texto en una lista de números, un vector. La documentación de Ollama describe el uso de estos vectores para la búsqueda semántica con la similitud del coseno y para el RAG. Antes de escribir el código de búsqueda conviene mirar los números: ¿la pregunta queda realmente más cerca del pasaje que la responde? Esta herramienta lee el JSON que Ollama devuelve desde /api/embed ({"embeddings": [[…], …]}), el formato compatible con OpenAI de /v1/embeddings ({"data": [{"embedding": […]}]}) o un array simple de vectores. Ordena todos los vectores respecto al que elijas según la similitud del coseno, y muestra además el producto escalar y la distancia euclídea. La documentación de Ollama dice que /api/embed devuelve vectores normalizados L2 (de longitud unitaria); para tales vectores, la similitud del coseno y el producto escalar son el mismo número, y la herramienta muestra la longitud de cada vector para que puedas comprobarlo. La documentación también dice que se use el mismo modelo de embeddings para indexar y para consultar. Los vectores con distinto número de dimensiones no se pueden comparar en absoluto, y la herramienta se detiene con un error cuando los encuentra. Los cálculos se comprobaron con valores calculados por separado en Python.
La lógica principal de esta herramienta es de código abierto, con licencia MIT. github.com/seigo5555/toolkitbox-lib/src/embedding-similarity.ts
Casos de uso
- Crear en una sola petición /api/embed el embedding de una pregunta y de unos cuantos pasajes candidatos y ver qué pasaje queda primero antes de construir una búsqueda
- Comparar dos modelos de embeddings con las mismas frases, un modelo cada vez, para ver cuál separa con más claridad el texto relacionado del no relacionado
- Comprobar si los vectores guardados tienen longitud unitaria y las dimensiones esperadas antes de elegir una métrica de distancia para tu base de datos vectorial
Cómo usarlo
- Envía los textos a tu modelo en una sola petición, por ejemplo curl http://localhost:11434/api/embed -d '{"model": "embeddinggemma", "input": ["question", "passage 1", "passage 2"]}', y pega la respuesta JSON completa.
- Opcionalmente, escribe una etiqueta por línea, en el mismo orden que la entrada, para que los resultados muestren los textos en lugar de números.
- Elige con qué vector comparar (por defecto #0, la primera entrada). La tabla ordena los demás por similitud del coseno; la matriz muestra todos los pares cuando hay 10 vectores o menos.
FAQ
¿Qué similitud debo usar?
La página de embeddings de Ollama dice que se use la similitud del coseno para la mayoría de los casos de búsqueda semántica. La similitud del coseno compara la dirección de dos vectores e ignora su longitud; 1 significa la misma dirección. La herramienta también muestra el producto escalar y la distancia euclídea, porque las bases de datos vectoriales suelen permitir elegir entre ellos.
¿Por qué la similitud del coseno y el producto escalar son iguales?
Porque los vectores tienen una longitud de 1. La documentación de Ollama dice que /api/embed devuelve vectores normalizados L2, de longitud unitaria, y para vectores de longitud unitaria la similitud del coseno es igual al producto escalar. La herramienta muestra la longitud de cada vector e indica si todos tienen longitud unitaria (con un margen de 0.001).
La herramienta dice que las dimensiones no coinciden. ¿Qué significa?
Dos vectores solo se pueden comparar cuando tienen la misma cantidad de números. La longitud depende del modelo, que la documentación sitúa típicamente entre 384 y 1024 dimensiones, y la petición /api/embed también acepta un campo dimensions. Longitudes distintas suelen significar que los vectores proceden de modelos o ajustes diferentes. La documentación dice que se use el mismo modelo de embeddings para indexar y para consultar.
¿Puedo pegar una respuesta con embeddings en base64?
No. La herramienta solo lee números. Si llamas al endpoint /v1/embeddings compatible con OpenAI, pide los embeddings como números en coma flotante (floats), no como base64.
¿Una similitud de 0.8 es buena?
No hay un umbral fijo. Los valores dependen del modelo y de tus textos, así que compara las puntuaciones de pasajes relacionados y no relacionados del mismo modelo en lugar de juzgar un solo número aislado.
¿Se envían mis datos a algún sitio?
No. Los cálculos se ejecutan en tu navegador. La herramienta nunca llama a Ollama ni a ningún otro servidor; la petición a tu modelo la envías tú mismo.
Artículos relacionados
- 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.
- 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.