Три роли
- system — отдельный top-level параметр
system, не элемент массива messages. Задаёт инструкции и поведение.
- user — реплики пользователя.
- assistant — ответы модели. Их вы добавляете обратно в историю для следующего хода.
const res = await client.messages.create({
model: "claude-sonnet-4-5",
max_tokens: 1024,
system: "Ты лаконичный технический ассистент. Отвечай по делу.",
messages: [
{ role: "user", content: "Что такое идемпотентность?" },
],
});
Content может быть строкой или массивом блоков
Короткий вариант — строка. Полный — массив блоков (нужен для картинок, документов, кэширования):
messages: [
{
role: "user",
content: [
{ type: "text", text: "Что на картинке?" },
{
type: "image",
source: { type: "base64", media_type: "image/png", data: "<base64>" },
},
],
},
];
Многоходовый диалог
Messages API stateless — сервер не помнит историю. Вы сами передаёте весь массив на каждый запрос:
const history = [
{ role: "user", content: "Меня зовут Макс." },
{ role: "assistant", content: "Приятно познакомиться, Макс." },
{ role: "user", content: "Как меня зовут?" }, // модель ответит "Макс"
];
Правила: сообщения чередуются user/assistant, первое — всегда user, последнее обычно user. Два user-сообщения подряд недопустимы.
Префилл ответа ассистента
Можно «начать» ответ за модель, добавив assistant-сообщение в конец — Claude продолжит с этого места. Полезно для строгого JSON: префилл { заставляет сразу выдавать объект.