Rerank (ранжирование документов)

Переранжирование списка документов по релевантности к поисковому запросу. Базовый URL: https://api.ru-openrouter.ru/v1/

Rerank — это переупорядочивание списка документов по их релевантности к заданному поисковому запросу. В отличие от поиска, который возвращает документы в исходном порядке, rerank использует модель для оценки, насколько каждый документ соответствует запросу, и возвращает их отсортированными по убыванию релевантности.

Для чего используется Rerank

  • RAG (Retrieval-Augmented Generation): второй этап пайплайна — после быстрого поиска (например, по эмбеддингам) rerank уточняет порядок кандидатов перед передачей в LLM
  • Семантический поиск: повышение точности выдачи за счёт глубокой оценки релевантности
  • Фильтрация шума: отсечение нерелевантных документов из предварительно отобранного множества
  • Анализ документов: ранжирование фрагментов текста по соответствию запросу

Эндпоинты

Эндпоинт Метод Описание
/v1/rerank POST Переранжирование документов
/v1/rerank/models GET Список rerank-моделей
/v1/models?filter=rerank GET Альтернативный способ получения списка rerank-моделей

Аутентификация

Authorization: Bearer sk_ваш_api_ключ

POST /v1/rerank

Переранжирование списка документов по релевантности к запросу.

Параметры запроса

Поле Тип Обязательное Описание
model string ID rerank-модели (например, cohere/rerank-v3.5, cohere/rerank-4-pro)
query string Поисковый запрос, относительно которого оценивается релевантность
documents (string | object)[] Список документов для ранжирования. Минимум 1 элемент
top_n integer Количество наиболее релевантных документов в ответе (≥ 1). По умолчанию возвращаются все
provider object | null Настройки маршрутизации провайдера

Параметр documents

Документы могут быть:

Простой строкой — обычный текст документа:

"Paris is the capital of France."

Структурированным объектом — для мультимодальных моделей, с полями text и/или image. Должно быть указано хотя бы одно из них:

{
  "text": "Описание изображения",
  "image": "https://example.com/image.png"
}

Поле image принимает удалённый URL (http/https) или data-URI в base64 (data:image/...).

Параметр provider

Настройки маршрутизации провайдера для данного запроса. Все параметры необязательные.

Поле Тип Описание
allow_fallbacks boolean | null true (по умолчанию) — при недоступности основного провайдера использовать резервные. false — использовать только указанный провайдер и вернуть ошибку, если он недоступен
order string[] | null Упорядоченный список провайдеров. Роутер пробует первого в списке, затем следующего при недоступности
only string[] | null Разрешить только указанных провайдеров
ignore string[] | null Игнорировать указанных провайдеров
sort string Стратегия сортировки: price, throughput, latency, exacto. При задании этого параметра балансировка нагрузки не выполняется
max_price object Максимальная цена за запрос (в USD)
preferred_max_latency number | object Предпочтительная максимальная задержка в секундах (p50 или перцентильные границы)
preferred_min_throughput number | object Предпочтительная минимальная пропускная способность (токенов/сек)
quantizations string[] | null Фильтр по уровню квантизации (например, fp16, int8)
require_parameters boolean | null Использовать только провайдеров, поддерживающих переданные параметры
data_collection string | null allow (по умолчанию) или deny — политика обработки данных провайдером
zdr boolean | null Ограничить маршрутизацию только ZDR-эндпоинтами (Zero Data Retention)
enforce_distillable_text boolean | null Использовать только модели, разрешающие дистилляцию текста

Базовый запрос (cURL)

curl https://api.ru-openrouter.ru/v1/rerank \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_ваш_api_ключ" \
  -d '{
    "model": "cohere/rerank-v3.5",
    "query": "What is the capital of France?",
    "documents": [
      "Paris is the capital of France.",
      "Berlin is the capital of Germany."
    ],
    "top_n": 3
  }'

Пример на Python

import requests

response = requests.post(
    "https://api.ru-openrouter.ru/v1/rerank",
    headers={
        "Authorization": "Bearer sk_ваш_api_ключ",
        "Content-Type": "application/json",
    },
    json={
        "model": "cohere/rerank-v3.5",
        "query": "What is the capital of France?",
        "documents": [
            "Paris is the capital of France.",
            "Berlin is the capital of Germany."
        ],
        "top_n": 3,
    }
)

data = response.json()
for result in data["results"]:
    print(f"{result['index']}: {result['document']['text']} (score: {result['relevance_score']})")

Пример на Node.js

const response = await fetch("https://api.ru-openrouter.ru/v1/rerank", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk_ваш_api_ключ",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "cohere/rerank-v3.5",
    query: "What is the capital of France?",
    documents: [
      "Paris is the capital of France.",
      "Berlin is the capital of Germany."
    ],
    top_n: 3,
  }),
});

const data = await response.json();
console.log(data.results);

Пример на PHP

$ch = curl_init("https://api.ru-openrouter.ru/v1/rerank");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer sk_ваш_api_ключ",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "model" => "cohere/rerank-v3.5",
        "query" => "What is the capital of France?",
        "documents" => [
            "Paris is the capital of France.",
            "Berlin is the capital of Germany."
        ],
        "top_n" => 3,
    ]),
]);
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));

Пример ответа

{
  "id": "gen-rerank-1782124967-sYTtu1JdgYUQ6uHj4kvL",
  "model": "cohere/rerank-v3.5",
  "results": [
    {
      "document": {
        "text": "Paris is the capital of France."
      },
      "index": 0,
      "relevance_score": 0.98
    },
    {
      "document": {
        "text": "Berlin is the capital of Germany."
      },
      "index": 1,
      "relevance_score": 0.12
    }
  ],
  "usage": {
    "search_units": 1,
    "total_tokens": 150,
    "cost_rub": 0.015
  }
}

Поля ответа

Поле Тип Описание
id string Уникальный ID генерации (ORID-формат, начинается с gen-rerank-)
model string Модель, использованная для ранжирования
provider string Провайдер, обработавший запрос (присутствует, если доступен)
results object[] Список результатов, отсортированных по убыванию релевантности
results[].index integer Индекс документа в исходном списке documents
results[].relevance_score number Оценка релевантности документа запросу (0–1)
results[].document.text string Текст документа
results[].document.image string Изображение документа (URL или data-URI), если было передано
usage.search_units integer Количество использованных search units (биллинг Cohere)
usage.total_tokens integer Общее количество использованных токенов
usage.cost_rub number Стоимость запроса в рублях

GET /v1/rerank/models

Возвращает список моделей, поддерживающих ранжирование документов (rerank).

curl https://api.ru-openrouter.ru/v1/rerank/models \
  -H "Authorization: Bearer sk_ваш_api_ключ"

Пример ответа

{
  "object": "list",
  "data": [
    {
      "id": "cohere/rerank-v3.5",
      "object": "model",
      "created": 1709012345,
      "owned_by": "cohere",
      "pricing": {
        "prompt": "0.000015000",
        "currency": "RUB",
        "pricing_type": "per_request"
      },
      "description": "Cohere: Rerank v3.5"
    }
  ]
}

Поля ответа

Поле Тип Описание
object string Всегда "list"
data object[] Список rerank-моделей
data[].id string ID модели
data[].object string Всегда "model"
data[].created integer Unix-время последнего обновления
data[].owned_by string Провайдер-владелец модели
data[].pricing.prompt string Стоимость запроса в рублях
data[].pricing.currency string Валюта (RUB)
data[].pricing.pricing_type string Тип тарификации (per_request)
data[].description string Описание модели

Также список rerank-моделей можно получить через /v1/models?filter=rerank.

Ограничения

  • Нет streaming: rerank возвращается полным ответом, потоковая передача не поддерживается
  • Минимум документов: массив documents должен содержать как минимум 1 элемент
  • Модель должна поддерживать rerank: запрос к модели без поддержки rerank вернёт ошибку
  • Детерминированный порядок: результаты всегда отсортированы по убыванию relevance_score

Коды ошибок

HTTP Код Описание
400 missing_model Не указана модель
400 missing_query Не указан запрос
400 missing_documents Не указан или некорректен documents (должен быть непустым массивом)
400 model_not_found Модель не найдена или неактивна
400 model_not_rerank Модель не поддерживает rerank
401 invalid_api_key Неверный API-ключ
402 insufficient_balance Недостаточно средств на балансе
429 limit_exceeded Превышен лимит API-ключа
429 rate_limit_exceeded Превышен лимит запросов
502 empty_response Пустой ответ от провайдера
502 openrouter_error Ошибка провайдера (код и сообщение пробрасываются из ответа)