임베딩
임베딩 (Embeddings)
임베딩은 단어·문장·이미지를 고차원 공간의 벡터로 표현하는 방법입니다. 이 공간에서 의미가 비슷한 대상은 가까이 위치하므로, 벡터 사이의 거리(유사도)로 의미적 유사성을 측정할 수 있습니다. RAG(검색증강생성)처럼 문서를 벡터 저장소에 넣고 의미 검색하려면 반드시 필요한 단계입니다.
출처: 공식문서
본문
단일 값 임베딩 — embed
embed 함수로 개별 값을 임베딩합니다. 유사 단어·구 찾기, 텍스트 클러스터링 등에 유용하며, 임베딩 모델을 함께 지정합니다 (예: openai/text-embedding-3-small).
import { embed } from 'ai';
const { embedding } = await embed({
model: 'openai/text-embedding-3-small',
value: 'sunny day at the beach',
});
여러 값 배치 임베딩 — embedMany
RAG용 데이터 스토어를 준비할 때는 여러 값을 한 번에 임베딩하는 것이 효율적입니다. embedMany의 embeddings는 입력 순서와 동일한 순서로 정렬되어 반환됩니다. 처리량 최적화를 위한 maxParallelCalls로 병렬 요청 수를 제한할 수도 있습니다.
import { embedMany } from 'ai';
const { embeddings } = await embedMany({
model: 'openai/text-embedding-3-small',
values: ['sunny day at the beach', 'rainy afternoon in the city'],
});
유사도 계산
임베딩 후 cosineSimilarity 함수로 벡터 간 코사인 유사도를 계산합니다. 데이터셋에서 의미상 유사한 항목을 찾거나, 관련 항목을 유사도 기준으로 정렬·필터링하는 데 씁니다.
import { cosineSimilarity, embedMany } from 'ai';
const { embeddings } = await embedMany({ model: 'openai/text-embedding-3-small',
values: ['sunny day at the beach', 'rainy afternoon in the city'] });
console.log(`cosine similarity: ${cosineSimilarity(embeddings[0], embeddings[1])}`);
토큰 사용량
임베딩은 토큰 기반 과금을 하는 provider가 많습니다. embed/embedMany 모두 결과의 usage 속성으로 토큰 사용량({ tokens })을 제공합니다.
설정
- Provider 옵션:
providerOptions로 provider별 파라미터를 지정합니다. 예를 들어 OpenAI의dimensions: 512로 차원을 줄이거나, Googlegemini-embedding-2의 멀티모달 임베딩 콘텐츠(providerOptions.google.content)를 지정할 수 있습니다. - 그 외:
maxRetries,abortSignal/타임아웃, 커스텀 헤더, 임베딩 미들웨어(Embedding Middleware), 응답 정보 접근을 지원합니다.
모델별 지원
대표적 임베딩 모델로 OpenAI text-embedding-3-small(1536차원), Google gemini-embedding-2(3072), Mistral mistral-embed(1024), Cohere의 embed-english-v3.0/embed-multilingual-v3.0(1024) 등이 있습니다. 모델과 차원은 provider 문서의 임베딩 모델 표를 참고합니다.
더 알아보기
- RAG 하이브리드 검색: RAG 하이브리드
- reranking: Reranking
- 함수 레퍼런스: embed · embedMany · cosineSimilarity