LLM API

Chat, embeddings и rerank — как OpenAI API

Тот же контракт, что у OpenAI: chat/completions, embeddings и rerank. Модели Qwen, BGE-M3 и другие — в облаке A5X.

Базовый URL

https://llm.a5x.pro/v1

Authorization: Bearer YOUR_API_KEY. Ключ — в кабинете A5X Cloud LLM.

Быстрый старт

curl -X POST "https://llm.a5x.pro/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen36-35b-a3b",
    "messages": [
      {
        "role": "system",
        "content": "Ты аналитик звонков. На вход — segments из Speech API (start, end, speaker, text). Верни JSON: summary, objections, commitments."
      },
      {
        "role": "user",
        "content": "{\"segments\":[{\"start\":0.0,\"end\":8.2,\"speaker\":\"SPEAKER_00\",\"text\":\"Добрый день, звоню по заявке на демо речевой аналитики.\"},{\"start\":8.4,\"end\":11.1,\"speaker\":\"SPEAKER_01\",\"text\":\"Да, слушаю.\"},{\"start\":11.3,\"end\":19.5,\"speaker\":\"SPEAKER_00\",\"text\":\"Интересовала транскрибация для колл-центра. Что приоритетнее — виджет или API?\"},{\"start\":19.7,\"end\":27.0,\"speaker\":\"SPEAKER_01\",\"text\":\"Скорее API, у нас 200 операторов. И нужна интеграция с CRM.\"},{\"start\":27.2,\"end\":34.8,\"speaker\":\"SPEAKER_00\",\"text\":\"Понял. Пришлю расчёт по минутам и кейс из ритейла сегодня до 18:00.\"},{\"start\":35.0,\"end\":37.2,\"speaker\":\"SPEAKER_01\",\"text\":\"Хорошо, жду на почту.\"}]}"
      }
    ],
    "temperature": 0.7,
    "chat_template_kwargs": { "enable_thinking": false }
  }'

Модели

ПолеТипОписание
qwen36-35b-a3bchatОсновная chat-модель.
bge-m3embeddingЭмбеддинги для поиска и RAG.
bge-m3-rrrerankРанжирование документов по запросу.
llama-3-* / mistral-*chatПо запросу на SMB / Enterprise.

Streaming

Добавьте "stream": true — ответ придёт как SSE (data: {...}), как в OpenAI.

Chat Completions

POSThttps://llm.a5x.pro/v1/chat/completions

Ответ модели по истории сообщений. Сегменты Speech (start, end, speaker, text) передавайте строкой в messages[].content — отдельного поля segments нет.

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

ПолеТипОписание
model*stringID модели, например qwen36-35b-a3b.
messages*object[]{ role, content } — role: system | user | assistant. Для анализа звонка: JSON segments из Speech API в content.
temperaturenumber0–2. Для Qwen instruct: 0.7 вместе с top_p=0.8, top_k=20, presence_penalty=1.5.
max_tokensintegerЛимит токенов ответа.
streambooleantrue — SSE-поток.
chat_template_kwargs.enable_thinkingbooleanfalse — без блока «размышлений» у reasoning-моделей.

Примеры запросов

curl -X POST "https://llm.a5x.pro/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen36-35b-a3b",
    "messages": [
      {
        "role": "system",
        "content": "Ты аналитик звонков. На вход — segments из Speech API (start, end, speaker, text). Верни JSON: summary, objections, commitments."
      },
      {
        "role": "user",
        "content": "{\"segments\":[{\"start\":0.0,\"end\":8.2,\"speaker\":\"SPEAKER_00\",\"text\":\"Добрый день, звоню по заявке на демо.\"},{\"start\":8.4,\"end\":11.1,\"speaker\":\"SPEAKER_01\",\"text\":\"Да, слушаю.\"},{\"start\":11.3,\"end\":19.5,\"speaker\":\"SPEAKER_00\",\"text\":\"Нужна транскрибация для колл-центра.\"}]}"
      }
    ],
    "temperature": 0.7,
    "chat_template_kwargs": { "enable_thinking": false }
  }'

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

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "model": "qwen36-35b-a3b",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "{\"summary\":\"Клиент интересуется API транскрибации для колл-центра на 200 операторов и интеграцией с CRM. Договорились прислать расчёт и кейс до 18:00.\",\"objections\":[],\"commitments\":[\"Отправить расчёт по минутам\",\"Приложить ритейл-кейс на e-mail\"]}"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 312,
    "completion_tokens": 86,
    "total_tokens": 398
  }
}

Коды ответов

HTTPerror.codeСитуация
200—Успех (или SSE при stream=true).
400invalid_request_errorНеверное тело или неизвестная model.
401invalid_api_keyНет ключа или он неверный.
429rate_limit_exceededЛимит запросов — повторите позже.
502api_errorВременная ошибка — повторите запрос.

Embeddings

POSThttps://llm.a5x.pro/v1/embeddings

Векторы текста

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

ПолеТипОписание
model*stringbge-m3 или другая embedding-модель.
input*string | string[]Один текст или массив строк.

Примеры запросов

curl -X POST "https://llm.a5x.pro/v1/embeddings" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bge-m3",
    "input": "Политика возврата товара"
  }'

200 OK

{
  "object": "list",
  "model": "bge-m3",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [0.012, -0.034, 0.089]
    }
  ],
  "usage": { "prompt_tokens": 12, "total_tokens": 12 }
}

Rerank

POSThttps://llm.a5x.pro/v1/rerank

Сортирует документы по релевантности запросу. До 1000 непустых строк в texts.

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

ПолеТипОписание
model*stringbge-m3-rr или другая rerank-модель.
query*stringПоисковый запрос.
texts*string[]Документы для ранжирования (1–1000).
raw_scoresbooleanВернуть сырые scores.
truncatebooleanОбрезать слишком длинные тексты.

Два кандидата

curl -X POST "https://llm.a5x.pro/v1/rerank" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bge-m3-rr",
    "query": "условия возврата",
    "texts": [
      "Возврат в течение 14 дней при сохранении чека",
      "Доставка по России 3–5 дней"
    ],
    "raw_scores": true
  }'

200 OK

[
  { "index": 0, "score": 0.98 },
  { "index": 1, "score": 0.12 }
]

Коды ответов

HTTPerror.codeСитуация
200—Массив `{ index, score }` или объект с results.
400invalid_request_errorНеверное тело, пустые texts или неизвестная model.
401invalid_api_keyНет ключа или он неверный.
429rate_limit_exceededЛимит запросов — повторите позже.
502api_errorВременная ошибка — повторите запрос.