Este artículo se basa en la documentación oficial publicada por OpenAI, en los comentarios del equipo recopilados en las discusiones de la comunidad de desarrolladores de OpenAI y en el comportamiento verificado en el código de Aurabase, que enruta de forma nativa estas clases de tres dimensiones a tres columnas vectoriales distintas. Cada figura externa está fechada y obtenida; para conocer la metodología que aplicamos a nuestras propias mediciones, consulte nuestro pilar de metodología de referencia .
- 1536 dimensiones sigue siendo la opción más equilibrada para la mayoría de los casos: incrustación de texto nativo-3-pequeño o incrustación de texto truncado-3-grande, sin apartarse del soporte HNSW nativo de pgvector.
- 3072 dimensiones (text-embedding-3-large) ofrece la puntuación MTEB más alta publicada por OpenAI (64,6 % frente a 62,3 %), pero supera el límite de 2000 dimensiones del tipo
vectorde pgvector: el índice HNSW requiere una conversión ahalfvec. - Truncar una incrustación mediante el parámetro OpenAI
dimensions(técnica Matryoshka) reduce el almacenamiento y acelera la búsqueda, pero no reduce el precio: esto depende del modelo consultado, no del tamaño del vector devuelto. - Gracias al almacenamiento
halfvec(2 bytes por dimensión), un vector de 3072 dimensiones ocupa el mismo espacio en disco sin formato en Aurabase que un vector de 1536 en elvectorclásico (4 bytes por dimensión): aproximadamente 6 KB. - Aurabase admite de forma nativa exactamente 3 clases de dimensión, 768, 1536 y 3072, cada una en su propia columna (marcada en
aura-ai/src/embeddings/mod.rs): no hay campo de dimensión libre.
768, 1536 o 3072: lo que realmente cambia cada nivel
Claramente, elegir primero entre incrustación de texto-3-pequeño y incrustación de texto-3-grande equivale a elegir entre 1536 y 3072 dimensiones nativas, incluso antes de hablar de truncamiento. La siguiente tabla resume los hechos verificables en los tres niveles que pgvector reconoce de forma nativa en el lado de la indexación y esa ruta de Aurabase.
| Criterio | 768 dimensiones | 1536 dimensiones | 3072 dimensiones |
|---|---|---|---|
| Modelo(s) relacionado(s) | Truncamiento de OpenAI o modelo heredado/de código abierto (nativo) | incrustación de texto-3-pequeño (nativo) o truncado 3-grande | incrustación de texto-3-grande (nativo) |
| Puntuación media MTEB | OpenAI no lo lanzó de forma nativa en este tamaño | 62,3 % | 64,6 % |
| Precio indicativo de OpenAI / 1 millón de tokens | Depende del modelo consultado, no del tamaño. | $0,02 (pequeño) o $0,13 (grande truncado) | $0.13 (incrustación de texto-3-grande) |
| Peso bruto almacenado/vector | 3KB (flotante32) | 6 KB (flotante32) | 12 KB (vector) o 6 KB (halfvec, Aurabase) |
| Índice pgvector nativo HNSW | si | si | no: se requiere fundición halfvec (>2000 atenuaciones) |
| Columna Aurabase (código verificado) | incrustación_768 | incrustación_1536 | incrustación_3072 |
Fuentes: OpenAI, blog oficial “Nuevos modelos de integración y actualizaciones de API”, 25 de enero de 2024 (puntuaciones MTEB y precios de lanzamiento, consulte la página de precios actual antes de usarlo); aura-ai/src/embeddings/mod.rs, Aurabase (soporte de índices y columnas, verificado el 24 de agosto de 2026).
El impacto en el almacenamiento: el cálculo que lo cambia todo
Una incrustación se almacena como una matriz de números de punto flotante. En pgvector, el tipo clásico vector codifica cada dimensión en 4 bytes (float32): por lo tanto, 768 dimensiones pesan alrededor de 3 KB de datos sin procesar por vector, 1536 dimensiones alrededor de 6 KB y 3072 dimensiones alrededor de 12 KB, incluso antes de contar el encabezado de pgvector y la sobrecarga de la página de Postgres.
Aquí es donde entra en juego el tipo halfvec de pgvector, que codifica cada dimensión en 2 bytes (float16) en lugar de 4. Un vector de 3072 dimensiones almacenado en halfvec pesa alrededor de 6 KB: exactamente el peso de un vector de 1536 dimensiones almacenado en el clásico vector.
Consecuencia directa y poco intuitiva: en Aurabase, pasar de 1536 a 3072 dimensiones no duplica el almacenamiento real en disco, ya que la columna embedding_3072 se consulta mediante una conversión halfvec. Por lo tanto, el costo adicional real de 3072 dimensiones no es principalmente el disco: es el precio del modelo OpenAI asociado y la salida del soporte de índice nativo del tipo vector, que se detalla en la siguiente sección.
¿Por qué 3072 dimensiones cambian el tipo de índice en pgvector?
El tipo vector de pgvector no permite construir un índice HNSW o IVFFlat más allá de 2000 dimensiones. Por lo tanto, 3072 dimensiones superan este límite: ninguna consulta de búsqueda vectorial en una columna vector(3072) puede basarse en un índice aproximado, sino que recurre a un escaneo secuencial completo, inutilizable en la escala de un corpus RAG en producción.
El código de Aurabase maneja este caso explícitamente: la columna embedding_3072 se convierte en halfvec(3072) en cada consulta de inserción y búsqueda, un tipo que pgvector puede indexar hasta 4000 dimensiones. Las columnas 768 y 1536 siguen siendo nativas vector, sin convertir, ya que no se acercan al límite.
Este detalle también explica por qué una dimensión de incrustación que no figura en [768, 1536, 3072] falla explícitamente en el lado de Aurabase, en lugar de ser aceptada y luego mal indexada: el nombre de la columna siempre proviene de una lista de permitidos fija, nunca de un valor gratuito enviado por el cliente. Para profundizar en la creación de un índice HNSW en Postgres más allá de este caso específico, consulte nuestro artículo Índice HNSW y búsqueda vectorial de Postgres.
Reducir la dimensión sin perderlo todo: el truncamiento de Matryoshka de OpenAI
A partir de enero de 2024, la API Embeddings de OpenAI acepta un parámetro dimensions que acorta el vector devuelto sin volver a invocar un modelo diferente. La técnica se llama Matryoshka Representation Learning: el modelo está entrenado para concentrar información útil en las primeras dimensiones del vector, de modo que un truncamiento pierda precisión de forma gradual y no abrupta.
OpenAI ilustra la eficacia de esta técnica con un ejemplo específico en su anuncio: text-embedding-3-large, truncado a solo 256 dimensiones, aún supera la puntuación MTEB del antiguo text-embedding-ada-002 utilizado en su tamaño completo de 1536 dimensiones (fuente: OpenAI, blog oficial, 25 de enero de 2024). Un vector 12 veces más pequeño que funciona mejor que un vector completo en este punto de referencia específico.
Un punto importante, y a menudo mal entendido: truncar no reduce el precio cobrado. OpenAI cobra según el modelo consultado, no el tamaño del vector devuelto, ya que el costo real es el cálculo realizado en el texto de entrada. Por lo tanto, solicitar 1536 dimensiones de text-embedded-3-large cuesta el mismo precio que sus 3072 dimensiones nativas (fuente: OpenAI, blog oficial, 25 de enero de 2024); sólo cambian la velocidad de almacenamiento y búsqueda.
Esta es precisamente la elección predeterminada de Aurabase, verificada en config/mod.rs: el modelo configurado por defecto es text-embedding-3-large, pero la dimensión de salida configurada por defecto es 1536, no 3072. Por lo tanto, el servicio paga por la representación del modelo ancho, truncado para permanecer en una columna indexable vector en HNSW nativo, sin la conversión halfvec requerida a 3072.
Qué dimensión elegir según su caso de uso
1536 dimensiones sigue siendo el punto de partida razonable para la mayoría de los proyectos RAG o de búsqueda semántica: la puntuación MTEB de text-embedding-3-small (62,3%) sigue siendo cercana a la del modelo grande, el almacenamiento sigue siendo ligero y el tipo clásico vector de índices pgvector en HNSW sin ninguna configuración particular.
3072 dimensiones se justifica cuando el corpus es ambiguo o técnico, donde la brecha de calidad entre el 62,3% y el 64,6% se traduce en resultados de búsqueda visiblemente mejores en sus propias consultas, no en el punto de referencia general de OpenAI. Varios comentarios del equipo registrados en las discusiones de la comunidad de desarrolladores de OpenAI apuntan en esta dirección: la ganancia de 3072 dimensiones se mide caso por caso, no se puede asumir.
768 dimensiones es especialmente adecuado cuando el volumen tiene prioridad sobre los matices: un corpus grande donde el presupuesto de almacenamiento o cálculo es la restricción real, o el uso de un modelo de incrustación heredado que ya está en 768 dimensiones nativas.
No establezca la dimensión hasta que haya medido la calidad de la búsqueda en una muestra representativa de su propio corpus, no solo en la puntuación MTEB general publicada por OpenAI. El MTEB promedia docenas de tareas heterogéneas; su corpus RAG es solo uno.
Esta elección de dimensión es parte de una pila RAG más grande, incrustaciones, índice HNSW y búsqueda híbrida, que nuestra página Native AIdocumenta.
Lo que más nos preguntan
La elección correcta no es la mejor, es la mejor medida
Las dimensiones 768, 1536 y 3072 no están divididas en un solo eje. 3072 gana en la puntuación MTEB publicada por OpenAI, pero deja el soporte HNSW nativo de pgvector y paga el precio del modelo grande, cualquiera que sea la dimensión finalmente solicitada. 1536 sigue siendo el saldo predeterminado más común, incluso en Aurabase. 768 sirve para casos en los que el volumen tiene prioridad sobre los matices.
El parámetro dimensions de OpenAI cambia la pregunta a formular: ya no es "qué modelo elegir", sino "qué truncamiento aceptar, para qué ganancia medida en mi corpus". Antes de finalizar una elección en producción, pruebe la calidad de la búsqueda en una muestra real, no sólo en un punto de referencia general. Nuestra guía RAG pipeline con pgvector detalla la configuración completa, desde la ingesta hasta la búsqueda híbrida.