hubris

Маршрутизация обращений за копейку

Каждое входящее обращение сразу попадает в нужную очередь, срочные первыми, непонятные — человеку. Модель решений Jev, три вопроса и правила с порогами — 1 копейка и полсекунды на обращение.

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

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

Что понадобится: API-ключ Hubris и место, откуда можно отправить HTTP-запрос, когда приходит обращение: свой бэкенд, n8n или Make.

Шаг 1. Опишите очереди словами

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

"team": {
  "type": "choice",
  "instructions": "Какой команде передать обращение?",
  "criteria": {
    "billing": "Оплата, счета, возвраты, подписки",
    "tech": "Ошибки, сбои, приложение, интеграции",
    "sales": "Тарифы, покупка, условия до оплаты"
  }
}

Шаг 2. Добавьте два вопроса «да или нет»

Одного вопроса про очередь мало: модель всегда выбирает один из вариантов, даже когда выбирать не из чего. В нашем прогоне 7 октября обращение «Здравствуйте, у меня вопрос» модель уверенно отнесла к технике — 86 %. Вопрос «понятно ли, что нужно клиенту» ловит такие случаи: 0,10.

"urgent": { "type": "noul", "instructions": "Проблема мешает работать прямо сейчас?" },
"clear":  { "type": "noul", "instructions": "Понятно, что нужно клиенту?" }

Все три вопроса решаются за один запрос: платится текст обращения и вопросов, ответ модели бесплатный.

Шаг 3. Напишите правила

Модель отвечает вероятностями, маршрут выбирает ваш код:

import requests

QUESTIONS = {
    "team": {"type": "choice", "instructions": "Какой команде передать обращение?",
             "criteria": {"billing": "Оплата, счета, возвраты, подписки",
                          "tech": "Ошибки, сбои, приложение, интеграции",
                          "sales": "Тарифы, покупка, условия до оплаты"}},
    "urgent": {"type": "noul", "instructions": "Проблема мешает работать прямо сейчас?"},
    "clear": {"type": "noul", "instructions": "Понятно, что нужно клиенту?"},
}

def route(text):
    a = requests.post(
        "https://api.hubris.pw/v1/decisions",
        headers={"Authorization": "Bearer sk-gw-..."},
        json={"model": "typesafe/jev-1.13", "state": text, "questions": QUESTIONS},
    ).json()["answers"]
    if a["clear"]["noul"] < 0.5 or a["team"]["confidence"] < 0.4:
        return "human", False          # человеку: непонятно или модель сомневается
    return a["team"]["choice"], a["urgent"]["noul"] >= 0.75   # очередь и «первым»

В n8n и Make то же самое собирается из узла HTTP-запроса и ветвления по полям ответа.

Шаг 4. Подберите пороги на своих обращениях

Пороги выше подобраны под пять обращений из нашего прогона — вот что получилось:

ОбращениеОтвет моделиКуда ушло
Не проходят платежи, теряем заказы, срочнооплата 73 %, срочно 0,98Оплата, первым
Можно ли перейти на годовой тарифпродажи 54 %, оплата 46 %, уверенность 0,31Человеку
Приложение вылетает после обновлениятехника 100 %, срочно 0,50Техника
Списали деньги за отменённую подпискуоплата 100 %, срочно 0,79Оплата, первым
Здравствуйте, у меня вопроспонятно 0,10Человеку

На своих данных начните так:

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

Сколько стоит

Обращение с тремя вопросами — около 500 входных токенов, это 1 копейка. Тысяча обращений — около 10 ₽. Время ответа в нашем прогоне — 0,28–0,51 секунды. Каждый запрос с ценой виден в журнале запросов.

Что дальше

Обновлено: