Chat Completions
POST /v1/chat/completions — единственный эндпоинт, который делает всё: однократные вопросы, многоходовые диалоги, вызов инструментов и ввод изображений, в блокирующем или потоковом режиме.
Запрос
POST https://api.artfical.com/v1/chat/completions
Authorization: Bearer tai-sk-...
Content-Type: application/json
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
| model | string | Да | Один из идентификаторов моделей, перечисленных на странице Модели, например "tai-4.1". Нераспознанное значение отклоняется с кодом 400 ещё до начала генерации. |
| messages | array | Да | Диалог целиком, от самого старого сообщения к новому. Формат каждой записи см. в разделе Сообщения ниже. |
| stream | boolean | Нет | По умолчанию false. При значении true ответ представляет собой поток server-sent events вместо единого тела JSON; см. Потоковая передача. |
| tools | array | Нет | Определения инструментов-функций в формате OpenAI, которые модель может решить вызвать. См. Вызов инструментов. |
| temperature, top_p, presence_penalty, frequency_penalty, seed, stop | разные | Нет | Параметры сэмплирования, передаются как есть. Допустимые диапазоны см. в разделе Параметры сэмплирования. |
Сообщения
Каждая запись в messages имеет role и content. Распознаются четыре роли:
| Роль | Значение |
|---|---|
| system | Фоновые инструкции для диалога. Если присутствует несколько сообщений system, они объединяются по порядку. Системное сообщение никогда не переопределяет базовую идентичность и правила поведения tAI; оно дополняет контекст диалога, а не то, чем tAI является по своей сути. |
| user | То, что говорит человек (или ваше приложение от его имени). |
| assistant | Предыдущий ответ модели. Включайте предыдущие сообщения assistant при отправке истории диалога, чтобы модель видела весь обмен репликами, а не только последнее сообщение пользователя. Сообщение assistant также может нести tool_calls; см. Вызов инструментов. |
| tool | Результат вызова инструмента, выполненного вашим кодом, привязанный к вызову через tool_call_id. См. Вызов инструментов. |
Для обычной текстовой реплики content — это просто строка:
{"role": "user", "content": "İstanbul'da bugün hava nasıl olur sence?"}
Чтобы включить изображение вместе с текстом, content становится массивом типизированных частей вместо простой строки; точный формат и то, какие модели его принимают, см. в разделе Изображения.
Ответ (без потоковой передачи)
При "stream": false (значение по умолчанию) ответ представляет собой единый объект JSON, возвращаемый по завершении генерации:
{
"id": "chatcmpl-817c002145ac47feb83a0006c58ff43b",
"object": "chat.completion",
"created": 1788961617,
"model": "tai-4.1",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Merhaba! Ben tAI, size nasıl yardımcı olabilirim?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1303,
"completion_tokens": 232,
"total_tokens": 1535
}
}
| Поле | Описание |
|---|---|
| id | Уникальный идентификатор этого завершения, с префиксом chatcmpl-. |
| choices | Всегда ровно одна запись (индекс 0). tAI не поддерживает запрос нескольких вариантов завершения в одном запросе. |
| choices[].finish_reason | "stop" для обычного завершённого ответа или "tool_calls", когда модель запрашивает вызов одного или нескольких инструментов вместо прямого ответа. См. Вызов инструментов. |
| usage | Количество токенов для этого запроса. completion_tokens отражает то, что модель фактически сгенерировала, независимо от любого ограничения вроде max_tokens. |
Полный диалог
Включайте всю историю в каждый запрос; API не хранит состояние и не помнит предыдущие вызовы самостоятельно. Каждый запрос самодостаточен и опирается ровно на тот контекст, который вы в него передали.
{
"model": "tai-4.1",
"messages": [
{"role": "system", "content": "Kısa ve net cevaplar ver."},
{"role": "user", "content": "3 çarpı 4 kaç eder?"},
{"role": "assistant", "content": "12."},
{"role": "user", "content": "Peki onu 2'ye böl."}
]
}
Длина ответа
В настоящее время нет настраиваемого клиентом ограничения на количество токенов в ответе; у каждой модели есть собственный внутренний предел, настроенный именно для неё. Если нужно, чтобы запрос быстро завершался с ошибкой, а не выполнялся долго, самый надёжный рычаг — последовательности stop (см. Параметры сэмплирования) или просто указание в самом запросе на краткость ответа.