PROD주권 유럽 BaaS 플랫폼대시보드 열기 →

네이티브 AI · 7분 읽음

임베딩 크기: 768, 1536 또는 3072 차원?

Affane Daylami · Fondateur · 2026년 4월 3일

블로그로 돌아가기

768, 1536, 3072 치수 중에서 선택하는 것은 외관상 조정이 아닙니다. 벡터 데이터베이스의 저장 용량, 사용할 수 있는 인덱스 유형, 각 API 호출에 대해 지불하는 가격을 설정합니다. OpenAI 자체는 두 가지 현재 모델 간의 품질 격차를 문서화합니다. 1536 기본 크기의 text-embedding-3-small은 MTEB 벤치마크에서 62.3%에 도달한 반면, 3072 기본 크기의 text-embedding-3-large는 64.6%에 도달했습니다. 실제 이득이지만 생각보다 다른 곳에서 비용이 지불됩니다.

이 영어 텍스트는 프랑스어 원본에서 자동으로 생성되었으며 아직 검토되지 않았습니다.
이 페이지는 자동으로 번역되었습니다. 영어 버전은 권위가 있습니다.

이 기사는 OpenAI에서 게시한 공식 문서, OpenAI 개발자 커뮤니티 토론에서 수집된 팀 피드백, 이러한 3차원 클래스를 3개의 개별 벡터 열로 기본적으로 라우팅하는 Aurabase 코드에서 확인된 동작을 기반으로 합니다. 각 외부 수치에는 날짜와 출처가 기재되어 있습니다. 자체 측정에 적용하는 방법론은 벤치마크 방법론 기반을 참조하세요.

필수사항
  • 1536 차원은 pgVector의 기본 HNSW 지원에서 벗어나지 않으면서 기본 텍스트 포함-3-소형 또는 잘린 텍스트 포함-3-대형 등 대부분의 경우 가장 균형 잡힌 선택으로 남아 있습니다.
  • 3072 차원(text-embedding-3-large)은 OpenAI에서 게시한 가장 높은 MTEB 점수(64.6% 대 62.3%)를 제공하지만 pgVector의 vector 유형의 2000 차원 제한을 초과합니다. HNSW 인덱스에는 halfvec에 대한 캐스트가 필요합니다.
  • OpenAI dimensions 매개변수(Matryoshka 기술)를 통해 임베딩을 자르면 저장 공간이 줄어들고 검색 속도가 빨라지지만 가격은 낮아지지 않습니다. 이는 반환된 벡터의 크기가 아니라 쿼리된 모델에 따라 달라집니다.
  • halfvec 스토리지(차원당 2바이트) 덕분에 3072차원 벡터는 Aurabase에서 클래식 vector(차원당 4바이트)의 1536 벡터와 동일한 원시 디스크 공간(약 6KB)을 차지합니다.
  • Aurabase는 기본적으로 정확히 3개의 차원 클래스인 768, 1536 및 3072를 지원하며 각각 자체 열( aura-ai/src/embeddings/mod.rs에서 확인됨)에서 사용 가능 차원 필드가 없습니다.
#
개요

768, 1536 또는 3072: 각 레벨이 실제로 변경하는 사항

분명히 text-embedding-3-small과 text-embedding-3-large 중에서 먼저 선택하는 것은 잘림에 대해 이야기하기도 전에 기본 크기 1536에서 3072 사이를 선택하는 것과 같습니다. 아래 표에는 pgVector가 인덱싱 측면에서 기본적으로 인식하는 세 가지 수준과 해당 Aurabase 경로에 대한 검증 가능한 사실이 요약되어 있습니다.

기준768 차원1536차원3072 차원
관련 모델OpenAI 잘림 또는 레거시/오픈 소스(네이티브) 모델text-embedding-3-small(기본) 또는 잘린 3-large텍스트 임베딩-3-대형(기본)
평균 MTEB 점수OpenAI에서는 이 크기로 기본적으로 출시되지 않았습니다.62,3 %64,6 %
OpenAI 가격 표시 / 토큰 100만개크기가 아니라 문의한 모델에 따라 다릅니다.$0.02(소형) 또는 $0.13(대형 잘림)$0.13(텍스트 삽입-3-대형)
총 저장 중량/벡터3KB(float32)6KB(float32)12KB(벡터) 또는 6KB(halfvec, Aurabase)
네이티브 HNSW pgVector 인덱스응응아니오: 캐스트 halfvec 필요(>2000 희미)
Aurabase 컬럼(인증코드)임베딩_768embedding_1536embedding_3072

출처: OpenAI, 공식 블로그 “새로운 임베딩 모델 및 API 업데이트”, 2024년 1월 25일(MTEB 점수 및 출시 가격, 사용하기 전에 현재 가격 페이지에서 확인) aura-ai/src/embeddings/mod.rs, Aurabase(열 및 인덱스 지원, 2026년 8월 24일 확인).

#
저장

스토리지에 미치는 영향: 모든 것을 변화시키는 계산

임베딩은 부동 소수점 숫자 배열처럼 저장됩니다. pgVector에서 클래식 vector 유형은 각 차원을 4바이트(float32)로 인코딩합니다. 따라서 pgVector 헤더와 Postgres 페이지 오버헤드를 계산하기 전에도 768개 차원은 벡터당 약 3KB의 원시 데이터, 1536개 차원은 약 6KB, 3072개 차원은 약 12KB입니다.

여기에서 각 차원을 4가 아닌 2바이트(float16)로 인코딩하는 halfvec 유형의 pgVector가 사용됩니다. halfvec에 저장된 3072차원 벡터의 무게는 약 6KB입니다. 이는 정확히 클래식 vector에 저장된 1536차원 벡터의 무게입니다.

3KB
768 태양
벡터, float32(4바이트/dim)
6KB
1536년 태양
벡터, float32: halfvec 단위로 3072와 동일한 가중치
12KB
3072 태양
클래식 벡터, float32(halfvec 캐스팅 전)

직접적이고 비직관적인 결과: Aurabase에서는 embedding_3072 열이 halfvec캐스트를 통해 쿼리되기 때문에 1536차원에서 3072차원으로 이동해도 디스크의 실제 저장 공간이 두 배가 되지 않습니다. 따라서 3072 차원의 실제 추가 비용은 주로 디스크가 아닙니다. 이는 관련 OpenAI 모델의 가격과 다음 섹션에서 자세히 설명하는 vector유형의 기본 인덱스 지원 출력입니다.

#
pg벡터 / HNSW

3072 차원이 pgVector에서 인덱스 유형을 변경하는 이유

vector 유형의 pgVector는 2000차원을 초과하는 HNSW 또는 IVFFlat 인덱스 구축을 허용하지 않습니다. 따라서 3072 차원은 이 제한을 초과합니다. vector(3072) 열의 벡터 검색 쿼리는 대략적인 인덱스에 의존할 수 없으며 프로덕션에서 RAG 코퍼스 규모에서는 사용할 수 없는 완전한 순차 스캔으로 대체됩니다.

Aurabase 코드는 이 경우를 명시적으로 처리합니다. embedding_3072 열은 각 삽입 및 검색 쿼리에서 halfvec(3072)로 캐스팅됩니다. 이 유형은 pgVector가 최대 4000개 차원을 인덱싱할 수 있는 유형입니다. 열 768 및 1536은 제한에 접근하지 않기 때문에 캐스팅되지 않은 기본 vector상태로 유지됩니다.

embeddings/mod.rs (extrait simplifié)rust
// 3072(>2000)의 경우 HNSW는 '벡터' 유형을 인덱스하지 않고 → halfvec를 캐스팅합니다.
fn vec_query_parts(dims: usize) -> AuraResult<(&'static str, &'static str, &'static str)> {
    match dims {
        768  => Ok(("embedding_768",  "", "::vector")),
        1536 => Ok(("embedding_1536", "", "::vector")),
        3072 => Ok(("embedding_3072", "::halfvec(3072)", "::halfvec(3072)")),
        other => Err(...), // 지원되지 않는 측정기준
    }
}

이 세부 정보는 또한 [768, 1536, 3072]에 나열되지 않은 임베딩 차원이 승인되어 제대로 인덱싱되지 않고 Aurabase 측에서 명시적으로 실패하는 이유를 설명합니다. 열 이름은 항상 클라이언트가 전송한 무료 값이 아니라 항상 고정 허용 목록에서 옵니다. 이 특정 사례를 넘어서 Postgres에서 HNSW 인덱스를 구축하는 방법에 대해 더 자세히 알아보려면 HNSW 인덱스 및 Postgres 벡터 검색문서를 참조하세요.

#
API 비용

모든 것을 잃지 않고 차원 줄이기: OpenAI의 Matryoshka 잘림

2024년 1월부터 OpenAI의 Embeddings API는 다른 모델을 다시 호출하지 않고 반환된 벡터를 줄이는 dimensions 매개 변수를 허용합니다. 이 기술을 Matryoshka 표현 학습이라고 합니다. 모델은 유용한 정보를 벡터의 첫 번째 차원에 집중하도록 훈련되어 잘림이 갑자기 발생하기보다는 점차적으로 정밀도를 잃습니다.

OpenAI는 발표에서 구체적인 예를 통해 이 기술의 효과를 보여줍니다. text-embedding-3-large는 256차원으로만 잘렸지만 전체 크기인 1536차원에서 사용된 이전 text-embedding-ada-002의 MTEB 점수를 여전히 초과합니다(출처: OpenAI, 공식 블로그, 2024년 1월 25일). 이 특정 벤치마크에서 전체 벡터보다 성능이 더 좋은 12배 작은 벡터입니다.

llm/openai.rs (extrait, requête d'embedding)rust
let body = json!({
    "model": self.embed_model,       // 예를 들어 "텍스트 삽입-3-대형"
    "input": text,
    "dimensions": self.embed_dimensions, // 3072를 자릅니다. → 구성된 값
});

중요한 점이며 종종 오해되기도 합니다. 잘라도 청구된 가격이 줄어들지 않습니다. OpenAI는 반환된 벡터의 크기가 아닌 쿼리된 모델을 기준으로 요금을 청구합니다. 실제 비용은 입력 텍스트에 대해 수행된 계산이기 때문입니다. 따라서 text-embedding-3-large에서 1536개 차원을 요청하면 3072개 기본 차원과 동일한 비용이 듭니다(출처: OpenAI, 공식 블로그, 2024년 1월 25일). 저장 속도와 검색 속도만 변경됩니다.

이는 정확히 config/mod.rs에서 확인된 Aurabase의 기본 선택입니다. 기본적으로 구성된 모델은 text-embedding-3-large이지만 기본적으로 구성된 출력 차원은 3072가 아닌 1536입니다. 따라서 서비스는 halfvec 캐스트가 필요하지 않고 네이티브 HNSW의 인덱싱 가능한 vector 열에 유지되도록 잘린 와이드 모델의 표현에 대한 비용을 지불합니다. 3072.

#
결정

사용 사례에 따라 선택할 차원

1536 차원은 대부분의 RAG 또는 의미 체계 검색 프로젝트의 합리적인 시작점으로 남아 있습니다. 텍스트 임베딩-3-소형(62.3%)의 MTEB 점수는 대형 모델의 점수에 가깝고, 저장 용량은 여전히 가벼우며, 특별한 구성 없이 HNSW의 고전적인 vector 유형의 pgVector 인덱스입니다.

3072 차원은 코퍼스가 모호하거나 기술적일 때 정당화됩니다. 여기서 62.3%와 64.6% 사이의 품질 격차는 일반적인 OpenAI 벤치마크가 아닌 사용자의 쿼리에 대해 눈에 띄게 더 나은 검색 결과로 변환됩니다. OpenAI 개발자 커뮤니티 토론에 기록된 여러 팀 피드백은 이 방향을 지적합니다. 3072 차원의 이득은 사례별로 측정되므로 가정할 수 없습니다.

768 차원은 볼륨이 뉘앙스보다 우선할 때 특히 적합합니다. 즉, 저장 또는 계산 예산이 실제 제약인 대규모 코퍼스 또는 이미 768 기본 차원에 레거시 임베딩 모델을 사용하는 경우입니다.

결정하기 전의 간단한 규칙

OpenAI에서 게시한 일반 MTEB 점수뿐만 아니라 자신의 코퍼스의 대표 샘플에 대한 검색 품질을 측정할 때까지 차원을 설정하지 마십시오. MTEB는 수십 개의 이기종 작업을 평균화합니다. 귀하의 RAG 코퍼스는 단지 하나입니다.

이러한 차원 선택은 페이지 네이티브 AI문서에 포함된 더 큰 RAG 스택, 임베딩, HNSW 인덱스, 하이브리드 검색의 일부입니다.

#
자주 묻는 질문

우리가 가장 자주 묻는 질문

모든 항목을 다시 색인화하지 않고 이미 색인화된 자료의 크기를 변경할 수 있습니까?+
아니요. Aurabase는 정확한 모델과 차원(embedding_model 열 + 차원 전용 열)을 기준으로 각 의미 체계 검색을 필터링합니다. 1536 차원에서 색인화된 말뭉치는 3072에서 수행된 검색에 보이지 않게 되며 그 반대의 경우도 마찬가지입니다. 차원을 변경하려면 새 클래스 아래에서 말뭉치를 다시 색인화해야 합니다.
Gemini를 사용하면 3072차원 이상으로 이동할 수 있나요?+
아니요. Aurabase의 Gemini 클라이언트는 명시적으로 차원을 3072(outputDimensionality)로 제한합니다. 3072는 모든 공급업체를 합친 Aurabase가 지원하는 세 가지 클래스에 공통된 한도입니다.
최상의 결과를 얻으려면 항상 3072 차원을 선택해야 합니까?+
반드시 그런 것은 아닙니다. 1536과 3072 사이의 MTEB 점수 차이(OpenAI에 따르면 62.3% 대 64.6%)는 3072가 암시하는 아키텍처 변경(vector유형의 기본 HNSW 지원 릴리스, 필수 halfvec 캐스트 및 와이드 모델 가격)에도 불구하고 그다지 크지 않습니다. 이 비용을 정당화하기 전에 코퍼스에서 이득을 확인해야 합니다.
프로덕션 중인 RAG 프로젝트의 경우 text-embedding-3-small 또는 text-embedding-3-large?+
이는 보편적인 규칙이 아닌 예산과 말뭉치의 성격에 따라 다릅니다. Text-embedding-3-small(1536 기본 크기)은 저렴한 비용으로 대부분의 경우를 처리합니다. text-embedding-3-large는 일반 MTEB 점수뿐만 아니라 자체 테스트 쿼리에서 정밀도 향상이 구체적으로 측정되는 모호한 자료에서 정당화됩니다.
#
요약하면

올바른 선택은 가장 위대한 것이 아니라 가장 잘 측정된 것입니다

768, 1536 및 3072 치수는 단일 축으로 분할되지 않습니다. 3072는 OpenAI가 게시한 MTEB 점수에서 이득을 얻었지만 pgVector의 기본 HNSW 지원을 떠나 차원이 궁극적으로 요청한 것과 상관없이 대형 모델의 가격을 지불합니다. 1536은 Aurabase를 포함하여 가장 일반적인 기본 잔액으로 남아 있습니다. 768은 뉘앙스보다 볼륨이 우선하는 경우를 제공합니다.

OpenAI's dimensions parameter changes the question to ask: it is no longer "which model to choose", but "which truncation to accept, for what gain measured on my corpus". Before finalizing a choice in production, test the search quality on a real sample, not just on a general benchmark. Our guide RAG pipeline with pgvector details the complete setup, from ingestion to hybrid search.

배포할 준비가 되셨나요?

5분 만에 백엔드를 완성하세요.

신용카드 불필요 · 500MB 무료 · 50,000 MAU