Работа с диалогами
JARV API позволяет вести сложные, контекстные диалоги. Это достигается за счет четкого разделения ролей между параметрами запроса. API является stateless (не хранит состояние), поэтому для поддержания контекста вы должны передавать историю с каждым новым запросом.
Ключевые параметры
Для управления диалогом используются три основных поля:
prompt: string
— Текущее сообщение пользователя. Это всегда последняя реплика, на которую модель должна ответить.messages: Array<Object>
— История диалога. Это массив, содержащий все предыдущие реплики, кроме самой последней.system_prompt: string
— Глобальная инструкция. Задает роль или общее поведение модели на протяжении всего диалога. Является необязательной.
Структура сообщения в messages
Массив messages
содержит объекты со следующей структурой. Важно отметить, что в этом массиве используются только роли user
и assistant
.
role
: Роль автора сообщения. Может быть только"user"
или"assistant"
.content
: Текстовое содержание сообщения.
Пример полного цикла диалога
Рассмотрим, как построить диалог шаг за шагом. Наша цель — вести беседу, в которой модель помнит предыдущие ответы.
Шаг 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: Продолжение диалога
Теперь пользователь задает уточняющий вопрос. Чтобы модель поняла контекст, мы должны:
- Поместить новый вопрос в поле
prompt
. - Поместить предыдущий вопрос (роль
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
для формирования своего ответа (отвечает как пират).