Справочник HTTP API
Full HTTP API reference for the TypeSafe evaluation endpoint.
Полный справочник по HTTP API для эндпоинта оценки TypeSafe.
Оценивайте state по набору типизированных вопросов questions и получайте структурированные ответы answers (по одному на каждый вопрос). Для вводного руководства начните с раздела Примитивы (Primitives).
Эндпоинт оценки
POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer <API_KEY>
Content-Type: application/json
Тело запроса (Request body)
Структура верхнего уровня каждого запроса. Каждая запись в словаре questions представляет собой типизированный вопрос с присвоенным вами идентификатором.
{
"state": "Help! My payouts have been failing for 3 days.",
"model": "jev-latest",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this convey urgency?"
}
}
}
Типы вопросов (Question types)
Каждый вопрос 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
Вопрос типа «да/нет». Возвращает вероятность того, что ответ положительный (да).
<ParamField body="false" type="string | object | array">
Что означает «нет» (значение близко к 0).
</ParamField>
{
"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
Выбирает один вариант из определенного вами набора. Возвращает выбранный вариант и полное распределение вероятностей.
{
"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
Оценивает состояние по определенной вами рубрике. Возвращает взвешенное по вероятностям значение по шкале ваших уровней.
{
"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"]
}
}
}
Тело ответа (Response body)
По одному ответу на каждый вопрос, возвращаемые под теми же идентификаторами, которые вы указали в запросе.
<ResponseField name="output_tokens" type="integer" />
{
"model": "jev-1.13.0",
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": { "input_tokens": 296, "output_tokens": 20 }
}
Типы ответов (Answer types)
Каждый ответ содержит поле type, соответствующее типу вопроса. Ответы на вопросы Choice и Score также содержат поле confidence от 0 до 1, рассчитанное на основе распределения вероятностей ответа. См. раздел Уверенность (Confidence).
Ответ Noul
{
"model": "jev-1.13.0",
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": { "input_tokens": 307, "output_tokens": 20 }
}
Ответ Choice
{
"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
{
"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 }
}
Ошибки (Errors)
Ошибки используют стандартные коды состояния HTTP с телом в формате JSON, описывающим возникшую проблему.
| Код | Описание |
|---|---|
401 Unauthorized |
Отсутствует или недействителен API-ключ. Проверьте заголовок Authorization. |
422 Unprocessable Entity |
Тело запроса не прошло валидацию — например, отсутствует обязательное поле или некорректно сформирован вопрос. В теле ответа указано проблемное поле. |
429 Too Many Requests |
Превышен лимит частоты запросов. Приостановите отправку и повторите попытку через небольшую паузу. |
529 Overloaded |
Сервис TypeSafe временно перегружен. Повторите попытку через небольшую паузу. |
Обработка лимитов частоты запросов (Rate limits)
При получении ответа 429 Too Many Requests или 529 Overloaded повторите запрос с экспоненциальной задержкой (exponential backoff) вместо немедленной повторной попытки. Клиентские SDK TypeSafe обрабатывают эту ситуацию автоматически, поэтому при использовании любого из наших SDK с политикой повторов по умолчанию никаких дополнительных действий не требуется.