Работа с диалогами

JARV API позволяет вести сложные, контекстные диалоги. Это достигается за счет четкого разделения ролей между параметрами запроса. API является stateless (не хранит состояние), поэтому для поддержания контекста вы должны передавать историю с каждым новым запросом.

Ключевые параметры

Для управления диалогом используются три основных поля:

Структура сообщения в messages

Массив messages содержит объекты со следующей структурой. Важно отметить, что в этом массиве используются только роли user и assistant.

Пример полного цикла диалога

Рассмотрим, как построить диалог шаг за шагом. Наша цель — вести беседу, в которой модель помнит предыдущие ответы.

Шаг 1: Первый запрос

На этом шаге история пуста. Мы передаем только prompt.

# ЗАПРОС 1
curl ... -d '{
  "prompt": "Какой язык программирования лучше всего подходит для старта в веб-разработке в 2025 году?",
  "model": "gpt-4.1-mini",
  "user_id": "YOUR_USER_ID"
}'
Ответ модели
{
  "response": { "text": "Для старта в веб-разработке в 2025 году я бы настоятельно рекомендовал JavaScript. Он универсален, используется как для фронтенда (React, Vue), так и для бэкенда (Node.js), и имеет огромное сообщество." }, ...
}

Шаг 2: Продолжение диалога

Теперь пользователь задает уточняющий вопрос. Чтобы модель поняла контекст, мы должны:

  1. Поместить новый вопрос в поле prompt.
  2. Поместить предыдущий вопрос (роль user) и ответ модели (роль assistant) в массив messages.
# ЗАПРОС 2
curl ... -d '{
  "prompt": "А что насчет Python? Я слышал, он тоже популярен.",
  "model": "gpt-4.1-mini",
  "user_id": "YOUR_USER_ID",
  "messages": [
    {
      "role": "user",
      "content": "Какой язык программирования лучше всего подходит для старта в веб-разработке в 2025 году?"
    },
    {
      "role": "assistant",
      "content": "Для старта в веб-разработке в 2025 году я бы настоятельно рекомендовал JavaScript..."
    }
  ]
}'

Совмещение с system_prompt

Параметр system_prompt задает модели "личность" или инструкцию, которой она будет следовать во всех своих ответах, в дополнение к контексту из messages.

В этом примере мы дадим модели роль сварливого пирата и продолжим диалог.

# ЗАПРОС c system_prompt и messages
curl ... -d '{
  "prompt": "Капитан, что мне теперь с этой картой делать?",
  "model": "claude-3-haiku",
  "user_id": "YOUR_USER_ID",
  "system_prompt": "Ты — старый, вечно недовольный пират. Все твои ответы пропитаны морским жаргоном, жалобами на жизнь и скептицизмом.",
  "messages": [
    {
      "role": "user",
      "content": "Капитан, я нашел карту сокровищ!"
    },
    {
      "role": "assistant",
      "content": "Тысяча чертей! Небось очередная подделка. Давай сюда свою бумажку."
    }
  ]
}'
Ответ модели (в роли пирата и с учетом контекста)
{
  "response": { 
    "text": "Что делать, спрашиваешь, салага? А что тут сделаешь! Тащи свой зад на корабль, будем снаряжать экспедицию. И молись морскому дьяволу, чтобы на этой карте было хоть что-то, кроме разочарования, а не то я пущу тебя на корм акулам!" 
  }, ...
}

Как видите, модель использует массив messages, чтобы понять контекст беседы (речь идет о карте), и одновременно применяет глобальную инструкцию из system_prompt для формирования своего ответа (отвечает как пират).