Your RAG has an achilles’ heel : The embedding model nobody really chooses
Everyone is talking about RAG. Guides on chunking, re-ranking, and vector databases keep multiplying. Yet one decision is consistently glossed over: the choice of embedding model. And it happens to be the most irreversible decision in your RAG pipeline.
The bad news fits in a single sentence: changing your embedding model after you’ve indexed your documents means deleting everything and starting over. No migration, no partial compatibility, just a full recompute. This article covers what you actually pay, how the two billing moments work, and which models to choose for your usage profile. With pricing verified in March 2026.
What an Embedding Is, and Why Two Models Don’t Mix
An embedding model turns text into a numerical vector: a list of numbers that encodes the meaning of the text in a space of several hundred or several thousand dimensions. This is the vector your vector database stores, and it’s the comparison between vectors that lets the retriever find the passages relevant to your question.
Here’s the critical point, and one few guides spell out: each embedding model projects language into its own vector space. Voyage AI, OpenAI, and Google don’t share the same space. A vector produced by text-embedding-3-large and a vector produced by voyage-4 simply aren’t comparable; mathematically, they bear no relation to each other.
The most accurate analogy: picture two different GPS coordinate systems built on distinct reference meridians. Your old positions become wrong the moment you switch reference frames. Mixing vectors from different models in the same database is exactly that: your similarity searches return nothing but noise.
What You Actually Pay: The Economic Mechanics
Tokens and Characters: The Same Convention as LLMs
Embedding models bill by the token, exactly like large language models. The rule of thumb is identical: 1 token ≈ 4 characters in English, 3 to 3.5 characters in French. French generally produces more tokens than English for equivalent text: it’s wordier, its words run longer on average, and its morphology (agreement, conjugation, prepositions) multiplies the sub-words a BPE tokenizer generates. No surprise there: it’s the same mechanism at work when you run Claude or GPT on French text.
A 50-page PDF amounts to roughly 25,000 to 35,000 tokens, depending on how text-dense it is. Keep that figure in mind for the calculations below.
The Fundamental Asymmetry: Embedding vs. LLM
Here’s the number no one puts side by side, and it deserves to be stated plainly: an embedding token costs between 25 and 150 times less than an input LLM token.
A concrete example with current pricing:
- 1 million tokens with Voyage
voyage-4→ $0.06 - 1 million tokens with Voyage
voyage-4-large→ $0.12 - 1 million input tokens with Claude Sonnet 4.6 → $3.00
The ratio ranges from 25× (Sonnet vs. voyage-4-large) to 150× (Sonnet vs. voyage-4-lite at $0.02/MTok). It’s structural: embedding models are encoder-only architectures, lighter and trained for a single task, with no generation.
A point that often gets overlooked: embeddings bill for input only. There are no output tokens, unlike LLMs, which bill for both input AND output, where output is usually 5 to 15 times more expensive than input. In a complete RAG pipeline, the dominant cost therefore remains the inference LLM, not the embedding. But embedding recurs on every interaction, creating a line item that adds up at high volume.
The Two Billing Moments

Phase 1: Indexing (one-shot)
This is the visible phase. You send in your PDFs, your web pages, your internal documentation. The embedding model “reads” them to build your knowledge base: each chunk of text is turned into a vector and stored.
Here you pay for the tokens contained in your original documents. Frequency: once per document, unless you change the content or, and this is where it hurts, you switch embedding models.
Phase 2: Querying (recurring and invisible)
This is the phase no one pictures right away. When a user asks a question, that question must itself be turned into an embedding using the same model that indexed your documents: that’s the strict precondition for the similarity comparison to mean anything.
So you pay for the tokens in every question asked. In production RAG, a query typically runs 50 to 150 tokens. Short questions are rare once you fold in conversational history or query rewriting. At 10,000 questions a month averaging 100 tokens each with voyage-4, the query cost comes to about $0.06, a trivial amount. Initial indexing therefore almost always makes up the dominant share of the embedding budget.
The Golden Rule, and Its Painful Corollary
Changing your embedding model after indexing your documents isn’t a migration: it’s a rebuild. You have to delete every existing vector and regenerate it with the new model.
A concrete case: you’ve indexed 500,000 pages with text-embedding-3-large. You decide to move to Voyage to improve consistency with Claude. The re-indexing cost alone:
500,000 pages × 500 tokens/page = 250M tokens 250M tokens × $0.06/MTok = $15
That’s not the main problem. The real problem is the service disruption, the recompute time, and having to invalidate every vector in production.
Choose your embedding model before you index the first line of content. It’s the least spectacular and most important rule in this guide.
Four Profiles, Four Answers
🎯 Maximum Consistency with Claude → Voyage AI voyage-4
Voyage AI is Anthropic’s official embedding partner: it’s the provider recommended in Anthropic’s RAG architecture guides, and field reports show better retrieval performance than generic models when Claude is the inference LLM. The exact nature of that optimization isn’t publicly documented; what is established is the commercial partnership, the technical recommendation, and the retrieval benchmarks that put the voyage-4 family at the top for document-search tasks.
For a complete pipeline built around Voyage AI (embedding), a vector database, and an LLM, this step-by-step tutorial is especially useful:
On cosine-similarity retrieval benchmarks paired with an external reranker (BGE-reranker-v2.5 or voyage-rerank-2.5), the gap with OpenAI narrowed slightly in 2026: it now sits around 3% to 5% on neutral datasets. Voyage keeps a clear edge on domain-specific corpora and high-volume asynchronous tasks.
The Voyage 4 Family: A Shared Embedding Space (January 2026)
The real novelty of the voyage-4 family is the shared embedding space across all its members: voyage-4-large, voyage-4, voyage-4-lite, and the open-weight voyage-4-nano. All four produce vectors in the same 1,024-dimension space: they’re directly interchangeable, with no re-indexing.
What this changes in practice: you can now do asymmetric retrieval. Index your documents once with voyage-4-large ($0.12/MTok) for maximum representation quality, then embed your queries on the fly with voyage-4-lite ($0.02/MTok) or even voyage-4-nano (open-weight, compute cost only): six times cheaper, latency cut by the same factor, with no loss of vector consistency and without touching your index.

This is Voyage’s major systems argument in 2026, especially in high-query-volume settings. Over 10,000 questions a month, the query line item drops from $0.12 (all voyage-4-large) to $0.02 (queries on voyage-4-lite), an 83% saving on that item at near-identical retrieval quality.
Shared space + Matryoshka: the entire voyage-4 family produces 1,024-dimension embeddings by default and shares the same vector space, which is what makes asymmetric retrieval possible. Through the output_dimension parameter, you can go up to 2,048 dimensions (maximum precision) or down to 512 or 256 (Matryoshka, no recompute). The two mechanisms stack: index with voyage-4-large at 2,048 dimensions, query with voyage-4-nano at 512; vector footprint divided by 4, query cost divided by 6, index unchanged.
Reranker: voyage-rerank-2.5 is the natural companion to the voyage-4 family. On a recall@60 → rerank → top-5 pipeline, it recovers a meaningful fraction of the initial retriever’s errors, and it’s especially effective on the long or ambiguous queries Claude fields in production.
Pricing: voyage-4-large $0.12/MTok · voyage-4 $0.06/MTok · voyage-4-lite $0.02/MTok · voyage-4-nano open-weight, free. 200M free tokens to start on every API model.
If you use Claude as your inference LLM, Voyage is the rational default. Not a preference: an architectural fit, reinforced in 2026 by the flexibility of the shared embedding space.
🔬 Maximum Precision at Large Scale → OpenAI text-embedding-3-large
3,072 dimensions and solid resistance to semantic collapse on very large corpora (several tens of thousands of documents). Distance concentration in high dimensions is a real phenomenon whose threshold depends on corpus density, chunking, and index type, and higher-dimensional models tolerate it better.
That said, let’s be honest about where it stands in 2026: text-embedding-3-large is no longer “the” choice for raw absolute precision on the MTEB/RTEB leaderboard. Gemini Embedding 001 edges it out on English retrieval (67.71 vs. ~65), and open-weights like NV-Embed-v2 (72.31 MTEB overall) or Qwen3-Embedding-8B (70.58 MTEB multilingual) trounce it on general benchmarks. It remains top-tier within the OpenAI ecosystem (maximum consistency with GPT-4/GPT-4o, frictionless integration, a commercial SLA) and on massive English corpora where operational reliability matters more than the last benchmark point.
text-embedding-3-large also supports Matryoshka dimension reduction (down to 256 dimensions), which offers welcome flexibility on very large corpora without re-indexing.
Price: $0.13/MTok. Justified if you’re in the OpenAI ecosystem or if operational reliability matters more than raw absolute performance.
💰 Best Value for Money → OpenAI text-embedding-3-small or Mistral Embed
For prototyping, for a base under 20,000 documents, or simply to keep costs in check without sacrificing the essentials, two options stand out.
text-embedding-3-small at $0.02/MTok offers 1,536 dimensions and solid performance across the vast majority of use cases. It’s the Swiss Army knife for the developer who doesn’t want to overthink it on a small budget. For 10,000 documents of 500 tokens each (5M tokens), full indexing comes to $0.10. Literally ten cents.
mistral-embed at $0.01/MTok is the cheapest on the commercial market, and a sovereign European option if you’re already in the Mistral ecosystem. Lower quality than 3-small on general benchmarks, but good enough for internal use cases or prototypes.
🌍 Robust Multilingual Alternative → gemini-embedding-001, BGE-M3, or Qwen3-Embedding-8B
If your corpus heavily mixes several languages (FR/EN/DE documentation, an international knowledge base, multilingual customer support), generalist models start to show their limits.
- Google’s
gemini-embedding-001still leads the MTEB English retrieval ranking (67.71 NDCG@10, March 2026). Available free through AI Studio up to 1,500 requests/day, which is enough for the initial indexing of most bases. The paid tier,Gemini Embedding 2(multimodal, preview), bills $0.20/MTok. Main constraint: reduced consistency if your LLM isn’t Gemini, plus a dependency on the Google ecosystem. Qwen3-Embedding-8B(Alibaba, Apache 2.0): #1 on the multilingual MTEB leaderboard with a score of 70.58, supports 100+ languages including French, a 32K-token context, and flexible dimensions from 32 to 4,096. Today it’s the best open-source choice for an intensely multilingual corpus: self-hostable on an A100, compute cost only once it’s installed.BGE-M3(BAAI) remains a solid reference for multilingual on-prem: dense, sparse, and multi-vector retrieval in a single model, excellent on French and European languages, and very well supported by the common RAG frameworks.multilingual-e5-large(Microsoft Research) is still a valid option, but Qwen3 and BGE-M3 have caught up with it on the 2026 benchmarks. It keeps the advantage of being lightweight (560M parameters vs. 8B) for setups constrained by GPU memory.
Vector Dimensions: The Forgotten Economic Variable
A vector’s dimension count isn’t just a precision metric: it’s a direct storage cost in your vector database (Pinecone, Weaviate, pgvector, Qdrant). Each indexed document takes up dimensions × 4 bytes in float32.
| Model | Dimensions | Storage for 1M docs (float32) |
|---|---|---|
voyage-4 / voyage-4-lite | 1,024 | ~4 GB |
text-embedding-3-small | 1,536 | ~6 GB |
text-embedding-3-large | 3,072 | ~12 GB |
On a 10-million-document corpus, text-embedding-3-large requires 3× more vector storage than voyage-4, with a direct impact on Pinecone costs or Qdrant RAM. Matryoshka dimension reduction (available on voyage-4 and 3-large) lets you drop to 512 or 256 dimensions without re-indexing, cutting the footprint by a factor of 2 to 4 with a recall loss usually under 2%.
A practical rule of thumb by corpus size:
- Fewer than 10,000 documents → 768 to 1,024 dimensions are plenty
- 10,000 to 100,000 documents → 1,024 to 1,536 dimensions
- More than 100,000 documents → 1,536 to 3,072 dimensions (or Matryoshka on a high-dimension model)
The Modern Retrieval Pipeline: Embedding + Hybrid Search + Reranker
In 2026, pure vector-similarity retrieval is rarely enough in production. The standard pattern has become:

Hybrid dense + sparse search combines the embedding model’s semantic understanding (bi-encoder) with the lexical precision of BM25, which is especially useful on corpora full of technical terms, precise references (SKUs, codes, proper nouns), or morphologically rich languages like French. It’s natively supported by Vespa, Weaviate hybrid, Qdrant BM42, and Elasticsearch.
For a hands-on demonstration of hybrid dense+sparse search and reranking in RAG (in French):
The reranker is a cross-encoder: it encodes the (query, document) pair in a single forward pass and computes a joint relevance score, far more precise than a bi-encoder (which encodes query and documents separately, then compares the resulting vectors). That precision comes at a cost: the cross-encoder is too slow to run across the entire corpus. Hence the split between broad recall (bi-encoder) → fine reranking (cross-encoder), now indispensable for reaching a satisfactory recall@5 on heterogeneous corpora.
Parent-Document Retrieval: The Best of Both Worlds
With large chunks (800–2,000 tokens), the vectors capture a passage’s overall context better, but the retriever loses precision on short queries. The 2026 solution: Parent-Document Retrieval. You index small chunks (200–400 tokens) for search (maximum retriever precision), but you pass the LLM the large parent chunk (800–2,000 tokens) that contains them. Claude thus receives the full context it needs to answer, without the retriever having sacrificed any precision. This pattern is natively supported by LangChain (ParentDocumentRetriever) and LlamaIndex (NodeParser + IndexStore).
| Priority | Model | Price/MTok | Claude Consistency | Best For |
|---|---|---|---|---|
| Consistency with Claude (docs) | Voyage voyage-4-large | $0.12 | ★★★★★ | Indexing, max quality |
| Consistency with Claude (queries) | Voyage voyage-4-lite | $0.02 | ★★★★★ | Asym. queries on a voyage-4-large index |
| Quality/cost balance with Claude | Voyage voyage-4 | $0.06 | ★★★★★ | Symmetric use, recommended default |
| Local / Voyage prototyping | Voyage voyage-4-nano | Compute only | ★★★★★ | Open-weight, compatible with shared space |
| OpenAI ecosystem, large volumes | OpenAI 3-large | $0.13 | ★★★ | GPT stack, corpus >50k docs |
| Value for money | OpenAI 3-small | $0.02 | ★★★ | Prototyping, corpus <20k docs |
| Tight budget / EU sovereign | Mistral Embed | $0.01 | ★★ | Mistral stack, minimal cost |
| Multilingual API | Gemini embedding-001 | Free* | ★★ | English/multilingual retrieval |
| Open-source multilingual (SOTA) | Qwen3-Embedding-8B | Compute only | ★★ | On-prem, 100+ languages, #1 MTEB multilingual |
| Versatile on-prem multilingual | BGE-M3 | Compute only | ★★ | Dense+sparse+multi-vector |
*Free up to 1,500 requests/day via AI Studio; Gemini Embedding 2 (multimodal): $0.20/MTok.
Decision Matrix
- Your LLM is Claude, moderate volumes → Voyage
voyage-4, symmetric. - Your LLM is Claude, high query volume → Index with
voyage-4-large+ query withvoyage-4-liteorvoyage-4-nano. - Corpus >50k documents, OpenAI stack →
text-embedding-3-large. - Prototyping or constrained budget →
text-embedding-3-small. - Intensely multilingual corpus, API → Gemini
embedding-001. - Multilingual corpus, on-prem, SOTA performance →
Qwen3-Embedding-8B. - Full sovereignty, limited GPU resources →
BGE-M3.
What the MTEB (and RTEB) Benchmarks Don’t Tell You
MTEB (the Massive Text Embedding Benchmark) is the field’s longstanding reference, and its successor RTEB (the Retrieval Text Embedding Benchmark, 29 datasets) is now the most relevant measure for RAG pipelines. Both deserve to be read with caution.
To learn how to read the MTEB leaderboard and tie it back to your own data, this video makes a good companion:
First trap: the overall score can mask real performance on your task. NV-Embed-v2 posts a 72.31 overall MTEB average, but its specific retrieval score (62.65) is lower than Gemini Embedding 001’s (67.71). If retrieval is your main use case, it’s the retrieval score that counts, not the general average.
Second reality to absorb in 2026: open-weights now dominate the leaderboards. Qwen3-Embedding-8B, NV-Embed-v2, and BGE-M3 trounce the commercial APIs on general benchmarks. That wasn’t true 18 months ago. The question is no longer “are open-weights competitive?” (they are), but “do you have the infrastructure to run them?”
Third constant: MTEB doesn’t measure performance on your domain, your documents, with your LLM. Your real recall can differ from the benchmark score by 10 points or more. A model that’s excellent on generic legal text may underperform on your WooCommerce catalog, and vice versa.
Before committing to a model for a 100,000-document base: 500 representative documents, 50 questions from your actual users, recall@5 measured across the two or three candidate models. It’s a day’s work that can spare you several months of disappointing performance.
Conclusion: The Least Reversible Choice in Your Stack
The embedding model isn’t a config setting you tweak along the way. It’s a foundation: once your documents are indexed, your entire pipeline rests on it, from the retriever to the quality of the answers, all the way to your users’ trust in the system.
Total Cost Over 3 Years: 100k-Document Corpus, 10k Queries/Month
To make the decision concrete, here’s an estimate over 36 months (one-time indexing + 36 months × 10k questions × ~50 tokens/question = 18M query tokens):
voyage-4symmetric: (100k × 500 tok × $0.06) + (18M × $0.06) = $3 + $1.08 = ~$4voyage-4-largedocs +voyage-4-litequeries: (100k × 500 tok × $0.12) + (18M × $0.02) = $6 + $0.36 = ~$6.4text-embedding-3-large: (50M × $0.13) + (18M × $0.13) = $6.5 + $2.34 = ~$8.8text-embedding-3-small: (50M × $0.02) + (18M × $0.02) = $1 + $0.36 = ~$1.4
The lesson: at this corpus size, embedding is a negligible cost; the inference LLM dominates by far. The selection criterion isn’t price, it’s retrieval quality and architectural fit with your LLM.
What You Can Actually Adjust Along the Way
Re-ranking, similarity thresholds, prompt engineering, and your hybrid retrieval strategy can all be changed without touching your vectors. Chunk size, on the other hand, is tied to your indexing: going from 500 to 2,000 tokens per chunk forces a full re-indexing. In 2026, with long-context embedding models (32K tokens on voyage-4, 128K on Qwen3-Embedding-8B), more and more teams are adopting large chunks (800–2,000 tokens) paired with parent-document retrieval, which makes this choice even more structural. The embedding model and chunk size together form the foundation. Lock both down before you build on top.
Three decisions shape a RAG pipeline for the next two years: the inference LLM, the chunk size, and the embedding model. The first two get all the debate. The third is the one no one documents seriously, until it hurts. You now have what you need to stay out of that group.
To go further on complete RAG architecture: