API не помнит ничего
Claude API — stateless: сервер не хранит ваш диалог между запросами. Каждый вызов /v1/messages он обрабатывает с чистого листа. Если первым запросом ты спросил «как оформить возврат?», а вторым — «а сколько это займёт?», то во втором запросе модель не видит первого. Для неё «это» — пустота.
Значит, многоходовой диалог = ты сам собираешь историю и отправляешь её целиком в каждом новом запросе.
Как собрать историю
Добавляй и вопрос пользователя, и ответ ассистента в один и тот же массив messages, чередуя роли user и assistant:
from anthropic import Anthropic
client = Anthropic()
messages = [
{"role": "user", "content": "Как оформить возврат товара?"},
]
resp = client.messages.create(
model="claude-opus-4-8", max_tokens=1024, messages=messages
)
# кладём ответ обратно в историю
messages.append({"role": "assistant", "content": resp.content[0].text})
# следующий ход — снова шлём ВЕСЬ список
messages.append({"role": "user", "content": "А сколько это займёт?"})
resp2 = client.messages.create(
model="claude-opus-4-8", max_tokens=1024, messages=messages
)
Первое сообщение всегда user, дальше роли чередуются. Ответ модели лежит в resp.content — это массив блоков, текст берут из блока с type == "text", а не из content[0] вслепую.
Чем длиннее история, тем больше токенов на входе при каждом запросе — а значит дороже. Старые сообщения иногда обрезают или сжимают, чтобы не платить за весь диалог снова и снова.