Embeddings для RAG в 2026: hosted vs self-hosted, multilingual retrieval, query/document modes, storage cost и как выбирать модель без leaderboard-mania.
Embeddings в RAG в 2026 полезно понимать не как “ещё один leaderboard с самыми большими баллами”, а как retrieval representation layer. Именно embedding-модель решает, какие тексты будут казаться поиску похожими по смыслу, а какие нет. Если этот слой подобран плохо, ни reranking, ни сильная генеративная модель уже не спасут retrieval полностью.
Главный practical сдвиг: выбирать embeddings теперь лучше не по абстрактному “кто первый на MTEB”, а по четырём вопросам:
hosted или self-hosted;
multilingual или English-first;
cheap-and-fast или max-quality;
сколько реально стоят indexing и storage на вашем объёме данных.
Эмбеддинг можно представить как координаты текста в карте смыслов. Запрос и документ попадают в близкие точки, если говорят об одном и том же. Чем лучше карта, тем чаще поиск находит действительно нужные куски, а не просто слова “похожие на тему”.
Не выбирайте embeddings только по бенчмарку или размеру вектора. Для RAG важнее, как модель ведёт себя на ваших документах, в вашем языке и при вашем бюджете indexing + search.
более компактные vectors или hosted retrieval path
ПромптSemantic retrieval
Запрос: «как вернуть деньги за покупку»
Кандидаты:
1. «Возврат товара возможен в течение 14 дней»
2. «Поддерживаем карты, СБП и наличные»
3. «Как оформить refund на банковскую карту»
Ответ модели
Хорошая embedding-модель подтянет 1 и 3 как близкие по смыслу, даже если запрос не содержит слово refund или точную формулировку policy.
Для русского, смешанного RU/EN и вообще multi-lingual corpora ошибка выбора модели особенно болезненна. English-first embeddings могут выглядеть “нормально” на простых примерах, но разваливаться на:
падежах;
синонимах;
длинных русских формулировках;
transliteration / mixed-language docs;
support-кейсах с короткими пользовательскими вопросами.
Практически это значит:
если у вас много русского, не берите random English-only embedding by default;
multilingual модели обычно безопаснее;
quality надо мерить на ваших RU queries, а не по общему ощущению.
Без техники
{
"title": "Плохо",
"content": "Выбрали embedding по общему хайпу, а потом удивляемся, что запрос `как оформить возврат` не подтягивает документ `refund policy` и наоборот."
}
С техникой
{
"title": "Лучше",
"content": "Сначала собираем RU/EN test set, потом сравниваем 2-3 модели по retrieval recall и noise, и только после этого фиксируем embedding layer."
}
Люди часто смотрят на embedding dimension как на суррогат “мощности”. Это слишком грубо.
Что реально меняет размер вектора:
storage footprint;
стоимость vector DB;
память индекса;
latency nearest-neighbor search;
стоимость пересоздания индекса.
Больший vector не автоматически означает лучший retrieval для вашего домена. Иногда более компактная модель с лучшей multilingual/generalization profile оказывается operationally выгоднее.
from openai import OpenAI
client = OpenAI()
chunks = [
"Возврат товара возможен в течение 14 дней.",
"Для возврата нужен чек или номер заказа.",
]
response = client.embeddings.create(
model="text-embedding-3-small",
input=chunks,
)
vectors = [item.embedding for item in response.data]
print(len(vectors), len(vectors[0]))
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("intfloat/multilingual-e5-large")
docs = [
"passage: Возврат товара возможен в течение 14 дней.",
"passage: Для возврата нужен чек или номер заказа.",
]
query = "query: как вернуть покупку"
doc_vectors = model.encode(docs, normalize_embeddings=True)
query_vector = model.encode([query], normalize_embeddings=True)[0]
scores = doc_vectors @ query_vector
print(scores)