Este artigo é baseado na documentação oficial publicada pela OpenAI, no feedback da equipe coletado nas discussões da comunidade de desenvolvedores OpenAI e no comportamento verificado no código Aurabase, que roteia nativamente essas classes de três dimensões para três colunas de vetores distintas. Cada figura externa é datada e fornecida; para a metodologia que aplicamos às nossas próprias medições, consulte nosso pilar de metodologia de benchmark .
- As dimensões 1536 continuam sendo a escolha mais equilibrada para a maioria dos casos: incorporação de texto nativo-3-pequeno ou incorporação de texto truncado-3-grande, sem sair do suporte HNSW nativo do pgvector.
- 3072 dimensões (text-embedding-3-large) oferece a pontuação MTEB mais alta publicada pela OpenAI (64,6% vs. 62,3%), mas excede o limite de dimensão de 2000 do tipo
vectordo pgvector: o índice HNSW requer uma conversão parahalfvec. - Truncar uma incorporação via parâmetro OpenAI
dimensions(técnica Matryoshka) reduz o armazenamento e acelera a busca, mas não reduz o preço: isso depende do modelo consultado, não do tamanho do vetor retornado. - Graças ao armazenamento
halfvec(2 bytes por dimensão), um vetor de 3072 dimensões ocupa o mesmo espaço bruto em disco no Aurabase que um vetor 1536 no clássicovector(4 bytes por dimensão): aproximadamente 6 KB. - Aurabase suporta nativamente exatamente 3 classes de dimensão, 768, 1536 e 3072, cada uma em sua própria coluna (marcada em
aura-ai/src/embeddings/mod.rs): nenhum campo de dimensão livre.
768, 1536 ou 3072: o que cada nível realmente muda
Claramente, escolher entre text-embedding-3-small e text-embedding-3-large equivale primeiro a escolher entre 1536 e 3072 dimensões nativas, antes mesmo de falar em truncamento. A tabela abaixo resume os fatos verificáveis nos três níveis que o pgvector reconhece nativamente no lado da indexação e na rota do Aurabase.
| Critério | 768 dimensões | 1536 dimensões | 3072 dimensões |
|---|---|---|---|
| Modelo(s) relacionado(s) | Truncamento OpenAI ou modelo legado/código aberto (nativo) | text-embedding-3-small (nativo) ou truncado 3-large | incorporação de texto-3-grande (nativo) |
| Pontuação média do MTEB | não lançado nativamente pela OpenAI neste tamanho | 62,3 % | 64,6 % |
| Preço indicativo do OpenAI / 1 milhão de tokens | depende do modelo consultado, não do tamanho | US$ 0,02 (pequeno) ou US$ 0,13 (grande truncado) | US$ 0,13 (incorporação de texto 3 grandes) |
| Peso bruto armazenado/vetor | 3 KB (float32) | 6 KB (float32) | 12 KB (vetor) ou 6 KB (halfvec, Aurabase) |
| Índice pgvector HNSW nativo | sim | sim | não: é necessário lançar halfvec (>2.000 dims) |
| Coluna Aurabase (código verificado) | incorporação_768 | incorporação_1536 | incorporação_3072 |
Fontes: OpenAI, blog oficial “Novos modelos de incorporação e atualizações de API”, 25 de janeiro de 2024 (pontuações MTEB e preços de lançamento, verifique na página de preços atual antes de usar); aura-ai/src/embeddings/mod.rs, Aurabase (suporte a colunas e índices, verificado em 24 de agosto de 2026).
O impacto no armazenamento: o cálculo que muda tudo
Uma incorporação é armazenada como uma matriz de números de ponto flutuante. No pgvector, o tipo clássico vector codifica cada dimensão em 4 bytes (float32): 768 dimensões, portanto, pesam cerca de 3 KB de dados brutos por vetor, 1536 dimensões em torno de 6 KB e 3072 dimensões em torno de 12 KB, mesmo antes de contar o cabeçalho pgvector e a sobrecarga da página Postgres.
É aqui que entra o tipo halfvec de pgvector, que codifica cada dimensão em 2 bytes (float16) em vez de 4. Um vetor de 3072 dimensões armazenado em halfvec pesa cerca de 6 KB: exatamente o peso de um vetor de 1536 dimensões armazenado no clássico vector.
Consequência direta e não intuitiva: no Aurabase, passar de 1536 para 3072 dimensões não dobra o armazenamento real em disco, uma vez que a coluna embedding_3072 é consultada por meio de uma conversão halfvec. O custo adicional real das dimensões 3072 não é, portanto, principalmente o disco: é o preço do modelo OpenAI associado e a saída do suporte de índice nativo do tipo vector, detalhado na seção seguinte.
Por que as dimensões 3072 mudam o tipo de índice no pgvector
O tipo vector de pgvector não permite construir um índice HNSW ou IVFFlat além de 2.000 dimensões. As dimensões 3072, portanto, excedem esse limite: nenhuma consulta de pesquisa vetorial em uma coluna vector(3072) pode contar com um índice aproximado, ela recorre a uma varredura sequencial completa, inutilizável na escala de um corpus RAG em produção.
O código Aurabase trata esse caso explicitamente: a coluna embedding_3072 é convertida em halfvec(3072) em cada inserção e consulta de pesquisa, um tipo que o pgvector pode indexar até 4.000 dimensões. As colunas 768 e 1536 permanecem nativas vector, não convertidas, pois não se aproximam do limite.
Este detalhe também explica por que uma dimensão de incorporação não listada em [768, 1536, 3072] falha explicitamente no lado do Aurabase, em vez de ser aceita e depois mal indexada: o nome da coluna sempre vem de uma lista de permissões fixa, nunca de um valor livre enviado pelo cliente. Para se aprofundar na construção de um índice HNSW no Postgres além deste caso específico, consulte nosso artigo Índice HNSW e pesquisa de vetor Postgres.
Reduzindo a dimensão sem perder tudo: truncamento Matryoshka da OpenAI
A partir de janeiro de 2024, a API Embeddings da OpenAI aceita um parâmetro dimensions que encurta o vetor retornado sem invocar novamente um modelo diferente. A técnica é chamada de Aprendizagem de Representação Matryoshka: o modelo é treinado para concentrar informações úteis nas primeiras dimensões do vetor, de modo que um truncamento perca precisão gradualmente, e não abruptamente.
A OpenAI ilustra a eficácia desta técnica com um exemplo específico em seu anúncio: text-embedding-3-large, truncado para apenas 256 dimensões, ainda excede a pontuação MTEB do antigo text-embedding-ada-002 usado em seu tamanho total de 1.536 dimensões (fonte: OpenAI, blog oficial, 25 de janeiro de 2024). Um vetor 12 vezes menor com desempenho melhor que um vetor completo neste benchmark específico.
Ponto importante, e muitas vezes mal compreendido: truncar não reduz o preço cobrado. A OpenAI cobra com base no modelo consultado, não no tamanho do vetor retornado, uma vez que o custo real é o cálculo realizado no texto de entrada. Solicitar 1.536 dimensões de text-embedding-3-large custa, portanto, o mesmo preço que suas 3.072 dimensões nativas (fonte: OpenAI, blog oficial, 25 de janeiro de 2024); apenas a velocidade de armazenamento e pesquisa muda.
Esta é justamente a escolha padrão do Aurabase, verificada em config/mod.rs: o modelo configurado por padrão é text-embedding-3-large, mas a dimensão de saída configurada por padrão é 1536, não 3072. O serviço, portanto, paga pela representação do modelo amplo, truncado para permanecer em uma coluna vector indexável em HNSW nativo, sem o cast halfvec necessário para 3072.
Qual dimensão escolher de acordo com seu caso de uso
As dimensões 1536 continuam sendo o ponto de partida razoável para a maioria dos projetos RAG ou de pesquisa semântica: a pontuação MTEB de text-embedding-3-small (62,3%) permanece próxima da do modelo grande, o armazenamento permanece leve e o tipo clássico vector de índices pgvector em HNSW sem qualquer configuração específica.
3.072 dimensões justifica-se quando o corpus é ambíguo ou técnico, onde a lacuna de qualidade entre 62,3% e 64,6% se traduz em resultados de pesquisa visivelmente melhores em suas próprias consultas, e não no benchmark geral OpenAI. Vários feedbacks da equipe registrados nas discussões da comunidade de desenvolvedores OpenAI apontam nesta direção: o ganho de 3.072 dimensões é medido caso a caso, não pode ser assumido.
As dimensões 768 são especialmente adequadas quando o volume tem precedência sobre as nuances: um corpus grande onde o orçamento de armazenamento ou cálculo é a restrição real, ou o uso de um modelo de incorporação legado já em dimensões nativas 768.
Não defina a dimensão antes de medir a qualidade da pesquisa em uma amostra representativa de seu próprio corpus, não apenas na pontuação geral do MTEB publicada pela OpenAI. O MTEB calcula a média de dezenas de tarefas heterogêneas; seu corpus RAG é apenas um.
Essa escolha de dimensão faz parte de uma pilha RAG maior, embeddings, índice HNSW, pesquisa híbrida, que nossa página Native AIdocumenta.
O que nos perguntam com mais frequência
A escolha certa não é a maior, é a melhor medida
As dimensões 768, 1536 e 3072 não são divididas em um único eixo. 3072 ganha na pontuação MTEB publicada pela OpenAI, mas deixa o suporte HNSW nativo do pgvector e paga o preço do modelo grande, qualquer que seja a dimensão solicitada. 1536 continua sendo o saldo padrão mais comum, inclusive na Aurabase. 768 atende casos em que o volume tem precedência sobre as nuances.
O parâmetro dimensions da OpenAI muda a questão a ser feita: não é mais “qual modelo escolher”, mas “qual truncamento aceitar, para qual ganho medido em meu corpus”. Antes de finalizar uma escolha na produção, teste a qualidade da pesquisa em uma amostra real, não apenas em um benchmark geral. Nosso guia pipeline RAG com pgvector detalha a configuração completa, desde a ingestão até a pesquisa híbrida.