모델 = (정확도 / 차원 / 비용 / latency) 트레이드오프. OpenAI text-embedding-3-small 이 baseline. Cohere embed-v3 (multilingual). 오픈소스 = BGE / Voyage. 차원 줄이기 (dimensions param) 로 비용 줄임.
// 차원 줄이기 (Matryoshka)
constr=awaitopenai.embeddings.create({model:'text-embedding-3-large',// 3072 base
input,dimensions: 256,// 256 으로 압축 — 정확도 90% 유지
});
Cohere (multilingual)
import{CohereClient}from'cohere-ai';constcohere=newCohereClient({token});constr=awaitcohere.v2.embed({model:'embed-multilingual-v3.0',inputType:'search_document',// 또는 search_query (asymmetric)
texts:['안녕하세요'],embeddingTypes:['float'],});
// 일부 모델은 query 와 doc 다른 prompt 사용
// BGE: "Represent this sentence for searching relevant passages: {query}"
constdocEmb=awaitembed('document content');constqueryEmb=awaitembed('Represent this sentence for searching relevant passages: '+query);
Batch embedding (대량)
constbatch=awaitopenai.embeddings.create({model:'text-embedding-3-small',input: texts,// up to 2048 inputs
});constembeddings=batch.data.map(d=>d.embedding);
또는 OpenAI batch API: 50% 할인, 24시간 내 처리.
Normalization
functionnormalize(v: number[]):number[]{constnorm=Math.sqrt(v.reduce((s,x)=>s+x*x,0));returnv.map(x=>x/norm);}// 정규화 후 cosine similarity = dot product