hubris

Классификация текста — модель решений или языковая модель

Тема, тональность и срочность по вашим категориям без обучения. Замер пяти моделей на одном обращении, когда брать модель решений, когда языковую, и как не переплатить за размышления.

Что получите: каждое письмо, отзыв или заявка получает категорию по вашему списку — тему, тональность, срочность. Обучать модель и размечать данные не нужно, категории описываются словами.

Сколько времени: 15 минут.

Что понадобится: API-ключ Hubris.

Шаг 1. Выберите способ

Через Hubris классифицировать можно двумя способами, одним ключом. Мы прогнали одно и то же обращение клиента с тремя вопросами (срочность, отдел, тональность) через пять моделей 7 октября 2026 года:

МодельСпособВремяЦена
Jev 1.13модель решений0,38 с1 коп.
DeepSeek V4 Flashязыковая, JSON по схеме2,9 с1 коп.
GPT-6 Lunaязыковая, JSON по схеме3,0 с1 коп.
Qwen 3.8 Flashязыковая, JSON по схеме9,0 с3 коп.
Gemini 3.8 Flashязыковая, JSON по схеме13,5 с59 коп.

Модель решений (Jev и другие) отвечает только вариантом из вашего списка и к каждому варианту даёт вероятность. Берите её, если текстов много и ответ нужен сразу, если сомнительные случаи нужно отдавать человеку по порогу уверенности и если категорий до нескольких десятков.

Языковая модель возвращает метку в JSON и при желании объяснение. Берите её, если нужна причина или выдержка из текста, если текст длинный (договор, переписка на десятки страниц) или если правила проще написать инструкцией, чем списком вариантов.

Шаг 2а. Модель решений

import requests

res = requests.post(
    "https://api.hubris.pw/v1/decisions",
    headers={"Authorization": "Bearer sk-gw-..."},
    json={
        "model": "typesafe/jev-1.13",
        "state": text,
        "questions": {
            "topic": {"type": "choice", "instructions": "Тема обращения",
                      "criteria": {"payment": "Оплата и счета", "delivery": "Доставка",
                                   "refund": "Возврат", "other": "Другое"}},
            "sentiment": {"type": "score", "instructions": "Тональность",
                          "criteria": ["негативная", "нейтральная", "позитивная"]},
        },
    },
)
answers = res.json()["answers"]
print(answers["topic"]["choice"], answers["topic"]["confidence"])

Добавляйте вариант «Другое»: модель всегда выбирает что-то из списка, и без запасного варианта чужой текст попадёт в ближайшую категорию.

Шаг 2б. Языковая модель

from openai import OpenAI

client = OpenAI(base_url="https://api.hubris.pw/v1", api_key="sk-gw-...")

res = client.chat.completions.create(
    model="deepseek/deepseek-v4-flash",
    reasoning_effort="none",
    messages=[
        {"role": "system", "content": "Определи тему обращения и тональность."},
        {"role": "user", "content": text},
    ],
    response_format={"type": "json_schema", "json_schema": {
        "name": "ticket", "strict": True, "schema": {
            "type": "object", "additionalProperties": False,
            "required": ["topic", "sentiment"],
            "properties": {
                "topic": {"type": "string", "enum": ["payment", "delivery", "refund", "other"]},
                "sentiment": {"type": "string", "enum": ["negative", "neutral", "positive"]},
            }}}},
)
print(res.choices[0].message.content)

enum в схеме не даёт модели придумать свою категорию. Подробно про схемы — в гайде по ответу JSON.

Шаг 3. Выключите размышления

Для выбора одной метки модели не нужно рассуждать, а размышления оплачиваются как выходные токены. В нашем замере Gemini 3.8 Flash потратила на размышления 1 192 токена и 59 копеек на одно обращение. С reasoning_effort: "none" на том же обращении:

МодельБез параметраС "none"
Qwen 3.8 Flash9,0 с, 3 коп.1,0 с, 1 коп.
DeepSeek V4 Flash2,9 с, 1 коп.1,8 с, 1 коп.

Не у всех моделей размышления выключаются: Gemini 3.8 Flash на "none" отвечает ошибкой, и "low" у неё в нашем замере стоил 3 копейки. Подробно — в гайде по размышлениям.

Шаг 4. Проверьте на своих текстах

  1. Возьмите 50–100 текстов, которые уже разобраны вручную.
  2. Прогоните их выбранным способом и сравните с ручной разметкой.
  3. Если ошибки похожи — уточните описания категорий. У модели решений посмотрите уверенность: тексты ниже порога можно отдавать человеку.

Что дальше

Обновлено: