API

Ранжирование

Rerank переставляет документы по релевантности запросу. Обычно это второй шаг после эмбеддингов: векторный поиск достаёт кандидатов, rerank оставляет лучшие для RAG.

POST https://api.aitunnel.ru/v1/rerank. Стриминга нет. В OpenAI SDK отдельного метода нет — обычный HTTP.

Запрос

Обязательны model, query и непустой массив documents.

curl https://api.aitunnel.ru/v1/rerank \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-aitunnel-xxx" \
  -d '{
    "model": "rerank-4-pro",
    "query": "Что такое искусственный интеллект?",
    "documents": [
      "Искусственный интеллект — область компьютерных наук.",
      "Машинное обучение является подразделом ИИ.",
      "Нейронные сети — основа современного глубокого обучения.",
      "Python — популярный язык программирования."
    ],
    "top_n": 3
  }'
ПолеТипСмысл
modelstringId из каталога или слаг provider/model
querystringПоисковый запрос
documentsstring[]Документы для ранжирования
top_nnumberСколько лучших вернуть
return_documentsbooleanКласть текст документа в ответ
rank_fieldsstring[]По каким полям JSON-документов ранжировать

Ответ

index — позиция в исходном documents. relevance_score от 0 до 1, выше — ближе к запросу.

JSON
{
  "id": "...",
  "model": "rerank-4-pro",
  "results": [
    {
      "index": 0,
      "relevance_score": 0.9871,
      "document": {
        "text": "Искусственный интеллект — область компьютерных наук."
      }
    },
    {
      "index": 1,
      "relevance_score": 0.8234,
      "document": {
        "text": "Машинное обучение является подразделом ИИ."
      }
    }
  ],
  "usage": {
    "cost_rub": 0.24,
    "balance": 950.5
  }
}

В usagecost_rub и balance после списания.

RAG

  1. Векторный поиск (эмбеддинги) → 20–100 кандидатов
  2. Rerank → топ 3–5
  3. Этот топ — в контекст чата

Полный пайплайн с индексом, поиском и генерацией — руководство по RAG.

Python
import requests
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

candidates = [
    "Париж — столица Франции и крупнейший её город.",
    "Эйфелева башня построена в 1889 году.",
    "Лондон является столицей Великобритании.",
    "Франция — страна в Западной Европе.",
    "Берлин — столица Германии.",
]

rerank = requests.post(
    "https://api.aitunnel.ru/v1/rerank",
    headers={"Authorization": "Bearer sk-aitunnel-xxx"},
    json={
        "model": "rerank-4-pro",
        "query": "Какой город является столицей Франции?",
        "documents": candidates,
        "top_n": 2,
    },
).json()

top = [candidates[item["index"]] for item in rerank["results"]]
context = "\n".join(top)

answer = client.chat.completions.create(
    model="gpt-5-nano",
    messages=[
        {"role": "system", "content": f"Отвечай только по контексту:\n{context}"},
        {"role": "user", "content": "Какой город является столицей Франции?"},
    ],
)
print(answer.choices[0].message.content)

Модели

Актуальный список — группа rerank в каталоге и без ключа:

cURL
curl https://api.aitunnel.ru/public/aitunnel/models/rerank

Примеры имён: rerank-4-pro, rerank-4-fast, rerank-v3.5, rerank-2.5, qwen3-reranker-8b. Слаг provider/model OpenRouter.

Цена

У части моделей цена за запрос, у части — за токены входа. Смотрите карточку в каталоге. 402 до запроса считается по худшему сценарию (полный контекст у token-моделей).

Практика

  • В LLM отдавайте 3–5 лучших, не весь поиск.
  • Длинные тексты режьте на фрагменты ~200–500 слов.
  • Сначала дешёвый векторный отбор, потом rerank — так дешевле и точнее, чем один только embeddings.