Embeddings & Reranking
ЦАРЬ ROUTER поддерживает эмбеддинги и реранкинг через стандартные OpenAI-совместимые endpoints.
POST /v1/embeddings
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | Да | Модель эмбеддингов (см. таблицу ниже) |
input | string / array | Да | Текст или массив текстов для векторизации |
Модели эмбеддингов
| Модель | Размерность | Контекст | Цена (₽/1M) |
|---|---|---|---|
yandex/text-search-doc | 256 | — | 10.2 |
yandex/text-search-query | 256 | — | 10.2 |
Qwen/Qwen3-Embedding-0.6B | 1024 | — | 0.854 |
BAAI/bge-m3 | 1024 | — | от 0.6 |
sber/gigachat-embeddings | 1024 | 512 | 14 |
sber/gigachat-embeddings-2 | 1024 | 512 | 14 |
sber/gigaembeddings-3b | 2048 | 4096 | 14 |
sber/embeddings-gigar | 2560 | 4096 | 14 |
Пример
from openai import OpenAI
client = OpenAI(
base_url="https://api.tsarrouter.ru/v1",
api_key="sk-tsar-ваш-ключ",
)
response = client.embeddings.create(
model="BAAI/bge-m3",
input=["Первый документ", "Второй документ"],
)
for item in response.data:
print(f"[{item.index}] вектор размерности {len(item.embedding)}")Гибридный поиск (Yandex)
Yandex предлагает раздельные модели для документов и запросов:
# Индексация: yandex/text-search-doc
doc_embeddings = client.embeddings.create(model="yandex/text-search-doc", input=documents)
# Поиск: yandex/text-search-query
query_embedding = client.embeddings.create(model="yandex/text-search-query", input="запрос")Для остальных моделей используйте одну модель для обоих случаев.
Какую модель выбрать? Самая дешёвая:
BAAI/bge-m3(от 0.6₽/1M, мульти-провайдер). Универсальная:Qwen/Qwen3-Embedding-0.6B. Максимальная размерность:sber/embeddings-gigar(2560d). Длинные тексты:sber/gigaembeddings-3b(4K контекст).
POST /v1/rerank
Переранжирование документов по релевантности. Используется для повышения качества RAG-пайплайнов после первичного поиска по эмбеддингам.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | Да | Qwen/Qwen3-Reranker-0.6B или BAAI/bge-reranker-v2-m3 |
query | string | Да | Поисковый запрос |
documents | array | Да | Массив текстов для ранжирования |
top_n | integer | Нет | Вернуть только top-N результатов |
Модели реранкеров
| Модель | Контекст | Цена (₽/1M) |
|---|---|---|
Qwen/Qwen3-Reranker-0.6B | 32K | 0.854 |
BAAI/bge-reranker-v2-m3 | 8K | 0.244 |
Пример
import httpx
response = httpx.post(
"https://api.tsarrouter.ru/v1/rerank",
headers={"Authorization": "Bearer sk-tsar-ваш-ключ"},
json={
"model": "Qwen/Qwen3-Reranker-0.6B",
"query": "столица России",
"documents": [
"Москва - столица Российской Федерации",
"Париж - столица Франции",
"Россия - крупнейшая страна мира"
],
"top_n": 2
},
)
for result in response.json()["results"]:
print(f"[{result['index']}] score={result['relevance_score']:.3f}")Пример ответа
{
"model": "Qwen/Qwen3-Reranker-0.6B",
"results": [
{"index": 2, "relevance_score": 0.95, "document": {"text": "Самый релевантный"}},
{"index": 0, "relevance_score": 0.72, "document": {"text": "Средне релевантный"}}
],
"usage": {"prompt_tokens": 42, "total_tokens": 42}
}RAG-пайплайн
# 1. Поиск по эмбеддингам (recall)
candidates = vector_search(query, top_k=50)
# 2. Реранкинг (precision)
reranked = httpx.post("https://api.tsarrouter.ru/v1/rerank", ..., json={
"model": "Qwen/Qwen3-Reranker-0.6B",
"query": query,
"documents": [doc.text for doc in candidates],
"top_n": 5,
}).json()["results"]
# 3. Топ-5 в контекст LLM
context = "\n\n".join(r["document"]["text"] for r in reranked)