Все статьи
Статья
17 августа 2026 г.8 мин

Как выбрать модель эмбеддингов для RAG и семантического поиска

BGE-M3 и Qwen3 Embedding — чем отличаются, как влияет размерность вектора и почему для русского важна многоязычность.

Никита Барсуков


Как выбрать модель эмбеддингов для RAG и семантического поиска

Эмбеддинг превращает текст в вектор — набор чисел, где близкие по смыслу тексты оказываются рядом в пространстве. На этом стоит всё: семантический поиск, RAG, кластеризация, дедупликация, рекомендации. Модель тут выбирают один раз и надолго — сменить её потом больно, потому что придётся переиндексировать всю базу. Поэтому выбирать стоит внимательно.

Что вообще есть в каталоге

  • BGE-M3 (bge-m3, BAAI) — многоязычная, хорошо работает с русским, разумная размерность, открытая. Выбор по умолчанию, если сомневаетесь.
  • Qwen3 Embedding 8B (qwen3-embedding-8b) — сильная многоязычная модель, когда нужна максимальная точность.
  • Qwen3 Embedding 4B (qwen3-embedding-4b) — та же линейка, легче.

Все три — с открытыми весами. Закрытых моделей эмбеддингов (text-embedding-3 от OpenAI, Gemini Embedding от Google) в каталоге Yenisei нет.

Размерность вектора: за что вы платите

Размерность — это длина вектора (например, 1024 или 3072 числа). Больше — как правило, точнее, но:

  • Память и скорость. Векторов в базе миллионы; каждое лишнее измерение — это память в хранилище и время на поиск.
  • Стоимость индекса. Векторные БД считают ресурсы примерно линейно от размерности.

Некоторые модели обучены так, что вектор можно усечь — взять только первые измерения, почти не потеряв в качестве. Если пользуетесь этим, решение принимайте по замеру: посчитайте качество на полной длине, потом на усечённой, и сравните.

Многоязычность: для русского это обязательно

Главная ловушка русскоязычных проектов — взять модель, обученную в основном на английском. На английском бенчмарке она блистает, а на русском поиск проседает: близкие по смыслу русские фразы оказываются в пространстве дальше, чем должны. Для русской базы берите заведомо многоязычную модель — BGE-M3 или Qwen3 Embedding. От этого зависит, будет ли поиск работать вообще.

Как считать эмбеддинги

Через стандартный эндпоинт /v1/embeddings:

curl https://api.yenisei.ru/v1/embeddings \
-H "Authorization: Bearer $YENISEI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bge-m3",
"input": ["первый фрагмент текста", "второй фрагмент текста"]
}'

На Python — пачками, чтобы не гонять по одному:

from openai import OpenAI
client = OpenAI(base_url="https://api.yenisei.ru/v1", api_key="YENISEI_KEY")
def embed(texts, model="bge-m3"):
r = client.embeddings.create(model=model, input=texts)
return [d.embedding for d in r.data]
# batch по 64-256 текстов за запрос — так дешевле и быстрее
vectors = embed(chunks_batch)

Правила, которые сэкономят вам переиндексацию

  • Одна модель на индекс и на запрос. Вектор запроса и векторы базы обязаны считаться одной и той же моделью — иначе они несопоставимы, и поиск ломается молча.
  • Нормализуйте и меряйте косинус. Для большинства эмбеддингов косинусное сходство — правильная метрика близости.
  • Не смешивайте версии. Обновили модель эмбеддингов — переиндексируйте всё, а не половину.
  • Тестируйте на своих данных. Соберите 30–50 пар «запрос — правильный документ» и посмотрите, на какой позиции находится нужное. Это честнее любого внешнего бенчмарка.

Что брать по умолчанию

Для русскоязычного RAG начните с BGE-M3: многоязычная, открытая, предсказуемая, без сюрпризов по цене. Нужна точность повыше — попробуйте Qwen3 Embedding 8B и сравните с BGE-M3 на своих 30 парах. Нужна модель полегче на большом объёме — Qwen3 Embedding 4B. Окончательный выбор делайте по замеру на своих данных, а не по бенчмаркам.