·5 мин. чтения

Embeddings API в России: модели для RAG и поиска

Какие модели эмбеддингов доступны через PlusVibe API: размер вектора, длина входа, цены в рублях, модели на серверах в РФ и пример RAG на Python.

Embeddings API в России: модели для RAG и поиска

Эмбеддинг — это текст, превращённый в вектор из нескольких сотен или тысяч чисел. Тексты, близкие по смыслу, дают близкие векторы, даже если в них нет общих слов. На этом держатся семантический поиск, RAG (ответы модели по вашей базе знаний), поиск дублей, кластеризация обращений и рекомендации.

В PlusVibe эмбеддинги доступны через OpenAI-совместимый /v1/embeddings: тот же ключ, что и для чат-моделей, оплата в рублях. Ниже — какие модели есть, чем они отличаются и как собрать простой RAG.

Какие модели доступны

Размер вектора каждой модели мы проверили живым вызовом перед публикацией. Максимальную длину входа отдаёт GET /v1/model-capabilities.

id в API Размер вектора Максимум на вход Серверы в России qwen3-embedding-8b409632 768 токенов— qwen3-embedding-4b256032 768 токеновда qwen3-embedding-0.6b102432 768 токенов— jina-embeddings-v4204832 768 токеновда text-embedding-3-small153632 768 токенов— nemotron-embed-vl204810 240 токенов— bge-m310248192 токена— giga-embeddings20484096 токеновда embeddinggemma-300m7682048 токенов— frida1536512 токеновда multilingual-e5-large1024512 токенов—

Прочерк в последней колонке значит, что подтверждённых данных о размещении в России у нас нет, а не что модель точно работает за рубежом. Четыре модели с отметкой «да» можно отобрать фильтром «Только серверы в РФ» на вкладке «Эмбеддинги» в каталоге. Среди них две модели российской разработки — FRIDA и Giga-Embeddings. Как с ними работать и зачем им префиксы, мы подробно разобрали в статье «Модели на серверах в России».

Цены

У эмбеддингов оплачивается только входящий текст — выходных токенов нет. Цены за 1 млн токенов:

МодельВходВыход
qwen3-embedding-8b5 ₽/1M0 ₽/1M
qwen3-embedding-4b7 ₽/1M0 ₽/1M
qwen3-embedding-0.6b3 ₽/1M0 ₽/1M
jina-embeddings-v47 ₽/1M0 ₽/1M
text-embedding-3-small5 ₽/1M0 ₽/1M
nemotron-embed-vl8 ₽/1M0 ₽/1M
bge-m35 ₽/1M0 ₽/1M
giga-embeddings7 ₽/1M0 ₽/1M
embeddinggemma-300m2 ₽/1M0 ₽/1M
frida4 ₽/1M0 ₽/1M
multilingual-e5-large5 ₽/1M0 ₽/1M

Цены подставляются из каталога в момент открытия страницы.

Как выбрать модель

  • Длина фрагментов. Если вы режете документы на крупные куски или индексируете целые страницы, берите модели с входом 32 768 токенов. У frida и multilingual-e5-large всего 512 токенов — это примерно абзац, длинный текст придётся резать мельче.
  • Размер вектора. Чем он больше, тем больше места занимает индекс и тем медленнее поиск по нему. Для базы на миллионы фрагментов разница между 768 и 4096 числами на фрагмент заметна и в памяти, и в деньгах за хранилище.
  • Где обрабатываются данные. Если в текстах есть данные клиентов или внутренние документы, выбирайте модели на серверах в России.
  • Цена. Индексация базы — разовая, но объёмная операция, а запросы пользователей идут постоянно. Сравните цены из таблицы выше на своём объёме.

Надёжнее всего — прогнать 20–30 реальных вопросов ваших пользователей на двух-трёх моделях и посмотреть, какая чаще находит правильный фрагмент. Это недорого: оплачивается только вход, а тестовый набор из нескольких десятков вопросов и фрагментов — это тысячи токенов, а не миллионы.

Запрос

curl https://plusvibeapi.ru/v1/embeddings \
  -H "Authorization: Bearer $PLUSVIBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3-embedding-4b",
    "input": ["первый текст", "второй текст"]
  }'

В input можно передать строку или массив строк — массив векторизуется одним запросом, и это быстрее, чем слать тексты по одному. Векторы приходят в data[i].embedding в том же порядке, что и тексты. Параметр encoding_format: "base64" возвращает вектор в base64 вместо списка чисел. Параметр dimensions у text-embedding-3-small принимает только значение 1536 — на 512 мы получили ошибку 400.

Простой RAG на Python

Минимальная схема: векторизуем базу знаний, находим фрагмент, ближайший к вопросу, и отдаём его чат-модели вместе с вопросом. Этот код мы запустили перед публикацией без изменений:

import math
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://plusvibeapi.ru/v1",
    api_key=os.environ["PLUSVIBE_API_KEY"],
)
EMBED_MODEL = "qwen3-embedding-4b"

docs = [
    "Возврат товара возможен в течение 14 дней при сохранении чека.",
    "Доставка по Москве занимает один-два рабочих дня.",
    "Оплатить заказ можно картой или по счёту для юрлиц.",
]

def embed(texts):
    resp = client.embeddings.create(model=EMBED_MODEL, input=texts)
    return [item.embedding for item in resp.data]

def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    return dot / (math.sqrt(sum(x * x for x in a)) * math.sqrt(sum(y * y for y in b)))

doc_vectors = embed(docs)  # один запрос на весь список

question = "Можно ли вернуть покупку через неделю?"
q_vector = embed([question])[0]

best = max(range(len(docs)), key=lambda i: cosine(q_vector, doc_vectors[i]))
print("найдено:", docs[best])

answer = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[
        {"role": "system", "content": "Отвечай только по справке. Если ответа в ней нет, так и скажи."},
        {"role": "user", "content": f"Справка: {docs[best]}\n\nВопрос: {question}"},
    ],
)
print(answer.choices[0].message.content)

В вопросе нет слов «возврат» и «товар», но поиск нашёл именно фрагмент про возврат, а модель ответила, что вернуть покупку можно — в течение 14 дней при сохранённом чеке.

В реальном проекте векторы хранят не в списке, а в векторной базе — pgvector в PostgreSQL, Qdrant, Chroma и подобных, — и вместо одного фрагмента берут три-пять ближайших. Готовые обвязки для этого есть в LangChain: как подключить его к PlusVibe, рассказано в статье про LangChain в России.

Частые ошибки

Смешали векторы разных моделей. Векторы разных моделей несовместимы: у них разная длина и разное пространство. Запрос и документы нужно векторизовать одной моделью, а смена модели означает переиндексацию всей базы. Колонку в векторной БД заводите под размер из таблицы выше.

Слишком длинные фрагменты. Не отправляйте текст длиннее максимума на вход из таблицы. Режьте документы на фрагменты с запасом по длине — так и поиск точнее: один фрагмент отвечает на один вопрос.

Эмбеддинг-модель вызвали через /v1/chat/completions. Для эмбеддингов нужен /v1/embeddings.

403 «Модель недоступна для этого API-ключа». У ключа задан список разрешённых моделей. Добавьте модель эмбеддингов в этот список в кабинете.

Итог

Через PlusVibe доступны одиннадцать моделей эмбеддингов, четыре из них работают на серверах в России. Все вызываются одним OpenAI-совместимым запросом и тем же ключом, что и чат-модели. Формат запроса — в документации. Если нужны свежие данные из интернета, а не из вашей базы, посмотрите статью про веб-поиск в LLM по API. Компании могут работать по договору.

Эмбеддинги для RAG и поиска

Одиннадцать моделей, включая модели на серверах в России. Оплата в рублях.

Получить ключ →
embeddings apiembeddings api россияэмбеддинги для ragвекторный поисксемантический поиск APIqwen3-embeddingtext-embedding-3-smallFRIDA

Попробуйте PlusVibe API

OpenAI-совместимый API: GPT, Claude, Gemini, видео и изображения — один рублёвый ключ. Работает из России без VPN, оплата рублями.

Читайте также

Embeddings API в России: модели для RAG и поиска