Документация

Справочник по API

Полный справочник по HTTP API для эндпоинта оценки TypeSafe.

Оцените state по карте типизированных questions и получите структурированные answers, по одному на вопрос. Для вводного знакомства начните с примитивов.

Эндпоинт оценки

POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer <API_KEY>
Content-Type: application/json

Тело запроса

Форма верхнего уровня каждого запроса. Каждая запись в карте questions — это типизированный вопрос, которому вы задаёте имя.

statestring | object | array · required

Содержимое для оценки. Обычная строка для текста или структурированные данные (объект/массив) для таких вещей, как журналы чата, записи или текущее состояние вашего приложения. О форматах и лучших практиках см. Состояние.

modelstring · required

Модель, обрабатывающая запрос. Используйте "jev-latest" — флагманскую модель TypeSafe. Доступные модели и псевдонимы см. в разделе Модели.

questionsmap<string, Question> · required

Карта типизированных объектов Question. Вы выбираете каждый ключ; ответы возвращаются под теми же ключами.

записи карты

‹question id›Question

Ключ, который вы выбираете. Соответствующий Answer возвращается под этим же id. Ключ не отправляется в нижележащую модель и не используется при инференсе.

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "is_urgent": {
      "type": "noul",
      "instructions": "Does this convey urgency?"
    }
  }
}

Типы вопросов

Question бывает одного из трёх типов, задаваемых его полем type. Все три разделяют type и instructions; каждый добавляет свои criteria.

Свойство instructions может быть строкой, объектом или массивом. Длинный вопрос с дополнительным контекстом или данными, на которые нужно ссылаться, можно разбить на структурированный объект. Поместите вопрос в одно поле, а данные — в другие и ссылайтесь на поля данных по имени в обратных кавычках так же, как указываете вопрос на вложенное значение state:

"instructions": {
  "potential_duplicate": {
    "name": "John Smith",
    "location": "Oakland, California",
    "last_employer": "Google"
  },
  "question": "Is the resume for the same person as `potential_duplicate`?"
}

Подробнее см. Использование структуры в вопросах.

Noul

Вопрос «да/нет». Возвращает вероятность того, что ответ — «да».

type"noul" · required

instructionsstring | object | array · required

Вопрос «да/нет» для оценки. Объект может содержать вопрос в одном поле, а данные, на которые он ссылается, — в других; см. Использование структуры в вопросах.

criteriaobject

Необязательные описания того, что означают «да» и «нет».

свойства

truestring | object | array

Что означает «да» (значение около 1).

falsestring | object | array

Что означает «нет» (значение около 0).

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "is_urgent": {
      "type": "noul",
      "instructions": "Does this convey urgency?",
      "criteria": {
        "true": "Explicitly time-sensitive",
        "false": "No urgency expressed"
      }
    }
  }
}

Choice

Выбирает один вариант из заданного вами набора. Возвращает выбранный вариант и полное распределение вероятностей.

type"choice" · required

instructionsstring | object | array · required

Что должна решить модель. Объект может содержать вопрос в одном поле, а данные, на которые он ссылается, — в других; см. Структурированные инструкции и критерии.

criteriamap<string, string | object | array | null> · required

Карта соответствия варианта описанию по рубрике; используйте null, когда варианту не нужны дополнительные сведения. В одном Choice может быть не более 255 вариантов.

записи карты

‹option›string | object | array | null

Ключ, который вы выбираете. Описание этого варианта.

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this?",
      "criteria": {
        "billing": "Payments, invoicing, refunds",
        "technical": "Bugs, outages, integrations",
        "sales": "Pricing, upgrades, new accounts"
      }
    }
  }
}

Score

Оценивает состояние по заданной вами рубрике. Возвращает взвешенное по вероятностям значение по вашим уровням.

type"score" · required

instructionsstring | object | array · required

Что должна оценить модель. Объект может содержать вопрос в одном поле, а данные, на которые он ссылается, — в других; см. Использование структуры в вопросах.

criteriaarray<string | object | array> · required

Упорядоченный массив описаний уровней. У Score должно быть не менее двух уровней; API принимает максимум 10.

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "frustration": {
      "type": "score",
      "instructions": "How frustrated is the customer?",
      "criteria": ["Calm", "Frustrated", "Very angry"]
    }
  }
}

Тело ответа

По одному ответу на вопрос, возвращаемых под теми же id, которые вы указали.

modelstring · required

Модель, выполнившая оценку.

answersmap<string, Answer> · required

По одному Answer на вопрос, с ключами по тем же id, что вы использовали в questions.

записи карты

‹question id›Answer

Тот же id, который вы выбрали в questions.

usageobject · required

Использование токенов для запроса.

свойства

input_tokensinteger

output_tokensinteger

{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 296, "output_tokens": 20 }
}

Типы ответов

Каждый ответ несёт type, соответствующий своему вопросу. Ответы Choice и Score также несут confidence в диапазоне от 0 до 1, выведенную из распределения вероятностей ответа. См. Уверенность.

Ответ Noul

type"noul" · required

noulnumber · required

Ответ «да/нет» по шкале от 0 («нет») до 1 («да»).

{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 307, "output_tokens": 20 }
}

Ответ Choice

type"choice" · required

choicestring · required

Вариант с наибольшей вероятностью.

probabilitiesmap<string, number> · required

Каждый вариант, сопоставленный своей вероятности (числа с плавающей точкой, суммирующиеся в 1).

записи карты

‹option›number

Вариант, который вы определили в criteria.

confidencenumber · required

Насколько модель уверена; выводится из вероятностей.

{
  "model": "jev-1.13.0",
  "answers": {
    "department": {
      "type": "choice",
      "choice": "billing",
      "probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
      "confidence": 0.81
    }
  },
  "usage": { "input_tokens": 318, "output_tokens": 34 }
}

Ответ Score

type"score" · required

scorenumber · required

Взвешенный по вероятностям ответ по уровням; может попасть между уровнями.

legendmap<string, string> · required

Номер каждого уровня, сопоставленный его описанию.

probabilitiesmap<string, number> · required

Каждый уровень (строковый ключ), сопоставленный своей вероятности (числа с плавающей точкой, суммирующиеся в 1).

записи карты

‹level›number

Индекс уровня в виде строкового ключа, соответствующего legend.

confidencenumber · required

Насколько модель уверена; выводится из вероятностей.

{
  "model": "jev-1.13.0",
  "answers": {
    "frustration": {
      "type": "score",
      "score": 1.05,
      "legend": { "0": "Calm", "1": "Frustrated", "2": "Very angry" },
      "probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
      "confidence": 0.92
    }
  },
  "usage": { "input_tokens": 304, "output_tokens": 18 }
}

Ошибки

Ошибки используют стандартные коды состояния HTTP с телом JSON, описывающим, что пошло не так.

Статус Значение
401 Unauthorized Отсутствует или недействителен ключ API. Проверьте заголовок Authorization.
422 Unprocessable Entity Тело запроса не прошло проверку — например, отсутствует обязательное поле или вопрос сформирован неверно. В теле указано проблемное поле.
429 Too Many Requests Вы превысили ограничение скорости запросов. Сделайте паузу и повторите попытку через короткую задержку.
529 Overloaded TypeSafe временно перегружен. Повторите попытку через короткую задержку.

Обработка ограничений скорости

Когда вы получаете ответ 429 Too Many Requests или 529 Overloaded, повторяйте запрос с экспоненциальной задержкой, а не сразу. Наши клиентские SDK обрабатывают это автоматически, так что дополнительная обработка не нужна, если вы используете один из наших SDK с политикой повторов по умолчанию.