Перейти к основному содержимому

Стриминг и многоходовые диалоги

Средний

Две практические реалии создания чат-подобных решений на API: стримьте, чтобы пользователи сразу видели вывод, и управляйте историей сами, потому что API не сохраняет состояние.

Стриминг

Без стриминга пользователь ждёт весь ответ целиком. Со стримингом токены приходят по мере их генерации — гораздо лучшая воспринимаемая скорость. Используйте помощник стриминга из SDK:

with client.messages.stream(
model="claude-sonnet-4-6", max_tokens=1024,
messages=[{"role": "user", "content": "Explain RAG in two sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)

Многоходовость: историю держите вы

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

messages = [{"role": "user", "content": "Hi, I'm planning a trip."}]
# ... get assistant reply, then append both turns:
messages.append({"role": "assistant", "content": assistant_text})
messages.append({"role": "user", "content": "Make it 3 days."})
# send the full `messages` list again

Длинные диалоги заполняют окно

По мере роста истории она съедает контекстное окно, и стоимость растёт. Стратегии:

  • Суммируйте/уплотняйте более старые ходы в короткую сводку, которую вы несёте дальше.
  • Обрезайте нерелевантные ранние ходы.
  • Сочетайте с кэшированием промптов, чтобы не платить повторно за стабильный префикс.

Далее