Сценарий

Decisions API для маршрутизации запросов

Маршрутизация — это конечное решение: какая очередь, какой приоритет, человек или автоматика. Вызов решения возвращает выбор и вероятность каждого варианта — уверенные кейсы назначайте автоматически, остальные отправляйте на триаж.

Обновлено

Почему маршрутизация подходит идеально

Маршрутизация задаёт конечный вопрос — какая из моих очередей за это отвечает — и именно на него эндпоинт решений отвечает нативно. Не нужно вытаскивать имя очереди из сгенерированного текста или промпт-инженерить против пятой выдуманной очереди.

Один вызов может нести несколько вопросов по одному тикету: очередь, срочность и флаг «нужен человек» решаются за один round trip за 1 кредит.

  • Назначение очереди: billing, platform, account, other
  • Приоритет: упорядоченный score от низкого до блокирующего
  • Эскалация: noul-проверка, должен ли человек посмотреть первым

Пишите criteria как описания очередей

Каждый вариант вопроса choice несёт короткое описание того, что туда относится. Пишите их как бриф новому аналитику триажа — эти описания и есть ваша политика маршрутизации.

Всегда добавляйте вариант 'other' или 'unclear'. Честный выход не даёт неоднозначным тикетам уверенно попадать не в ту очередь.

Один вызов: очередь плюс срочность

Отправьте текст тикета как state и задайте два вопроса: choice за ответственную команду и score за срочность. В ответе будут answers.team.choice, answers.urgency.score и вероятность каждого варианта в обоих.

Choice + score в одном запросе

// Route a ticket: ask for team + urgency in one call,
// then gate the automation on confidence.
const res = await fetch("https://decisions-api.net/api/v1/decisions", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "decisions-1",
    state: "Payments fail with a 500 since your last deploy. Enterprise plan customer.",
    questions: {
      team: {
        type: "choice",
        instructions: "Which queue should handle this request?",
        criteria: {
          payments: "Billing, charges, or payment failures.",
          platform: "Deploys, infrastructure, or API errors.",
          account: "Login, SSO, or permissions.",
          other: "Unclear or out of scope.",
        },
      },
      urgency: {
        type: "score",
        instructions: "How urgent is this for the customer?",
        criteria: ["can wait", "normal queue", "needs attention today", "blocking revenue"],
      },
    },
  }),
});
const { answers } = await res.json();

// Illustrative response: answers.team -> { choice: "payments", confidence: 0.84 }
//                        answers.urgency -> { score: 3, confidence: 0.79 } (0 = lowest level)
if (answers.team.confidence >= 0.8 && answers.team.choice !== "other") {
  assignToQueue(answers.team.choice, { priority: answers.urgency.score });
} else {
  assignToQueue("human_triage", { note: "low confidence" });
}

Автоназначение только при высокой confidence

Распределение вероятностей делает автоматизацию маршрутизации безопасной. Рабочее начальное значение: применяйте маршрутизацию при confidence от 0,8, остальное — в очередь ручного триажа.

Порог подбирайте по своей истории тикетов — правильное значение зависит от цены ошибочной маршрутизации относительно задержанной.

Маршрутизация запросов между моделями

Тот же приём выбирает, какая модель должна ответить. Задайте вопрос choice с вариантами вроде fast_model (короткие фактические или форматирующие запросы), strong_model (многошаговые рассуждения, код, длинный контекст) и human (юридические вопросы, возвраты или всё, что модель не должна решать в одиночку). Каждый вариант возвращается с вероятностью — видно, насколько спорным был выбор.

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

Стоимость и объёмы

Один успешный вызов стоит 1 кредит независимо от того, 1 или 6 вопросов в нём. Для бэклога исторических тикетов batch-инструмент в панели прогонит ту же форму запроса по CSV или JSONL.

Частые вопросы

На сколько очередей можно маршрутизировать?

Вопрос choice принимает от 2 до 8 вариантов. Если очередей больше, разбейте решение: первый вызов выбирает департамент, второй — команду внутри него.

Можно ли оценить срочность в том же вызове?

Да — добавьте вопрос score с упорядоченными описаниями уровней. В одном вызове до 6 вопросов, так что очередь, срочность и флаг эскалации решаются вместе.

Что с пограничным тикетом?

Ответ содержит вероятность каждого варианта. Когда два первых близки — скажем, 0,45 против 0,42 — считайте тикет неоднозначным и отправляйте на ручной триаж, а не доверяйте победителю.

Работает ли с тикетами не на английском?

Пишите state и описания вариантов на языке ваших тикетов, а ключи вариантов оставляйте в ASCII — код маршрутизации останется читаемым.

Может ли он выбирать, какой LLM отвечает на запрос?

Да — сделайте модели вариантами вопроса choice и опишите, в чём сильна каждая. Случаи с низкой уверенностью маршрутизируйте в более сильную модель.

Маршрутизируйте тикет сейчас

Одно бесплатное пробное решение для новых посетителей — вставьте настоящий тикет в песочницу и посмотрите вероятности.