Artfical AI / API
Получить API-ключ Открыть tAI
Начало работы

Chat Completions

POST /v1/chat/completions — единственный эндпоинт, который делает всё: однократные вопросы, многоходовые диалоги, вызов инструментов и ввод изображений, в блокирующем или потоковом режиме.

Запрос

POST https://api.artfical.com/v1/chat/completions
Authorization: Bearer tai-sk-...
Content-Type: application/json
ПолеТипОбязательноОписание
modelstringДаОдин из идентификаторов моделей, перечисленных на странице Модели, например "tai-4.1". Нераспознанное значение отклоняется с кодом 400 ещё до начала генерации.
messagesarrayДаДиалог целиком, от самого старого сообщения к новому. Формат каждой записи см. в разделе Сообщения ниже.
streambooleanНетПо умолчанию false. При значении true ответ представляет собой поток server-sent events вместо единого тела JSON; см. Потоковая передача.
toolsarrayНетОпределения инструментов-функций в формате 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 (см. Параметры сэмплирования) или просто указание в самом запросе на краткость ответа.