An embedding model converts text → a high-dimensional vector. Good embeddings mean similar meaning → similar vectors.
2025 picks by use case
| Use case | Recommended | Why |
|---|---|---|
| General English prose | text-embedding-3-small | Cheap, fast, 1536 dims, good enough for 90% of cases |
| Multilingual content | cohere-embed-multilingual-v3 | Native support for 100+ languages |
| Code search | voyage-code-3 | Trained on code, dramatically better than general models |
| Highest quality, cost no object | text-embedding-3-large or voyage-3-large | 3072 dims, top-of-leaderboard |
Code
import OpenAI from "openai";
const openai = new OpenAI();
async function embed(text: string): Promise<number[]> {
const r = await openai.embeddings.create({
model: "text-embedding-3-small",
input: text,
});
return r.data[0].embedding; // 1536-dim vector
}
// Cosine similarity
function similarity(a: number[], b: number[]): number {
let dot = 0, na = 0, nb = 0;
for (let i = 0; i < a.length; i++) {
dot += a[i] * b[i]; na += a[i] * a[i]; nb += b[i] * b[i];
}
return dot / (Math.sqrt(na) * Math.sqrt(nb));
}