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

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

Средний
What you'll learn
  • Стримить ответы токен за токеном, чтобы пользователи сразу видели вывод
  • Понять, почему API не хранит состояние и как самостоятельно переносить историю диалога
  • Продолжать многоходовый диалог, повторно отправляя весь предыдущий обмен
  • Не давать длинным диалогам раздувать контекстное окно и стоимость

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

Стриминг

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

Pro tip
  • Используйте хелпер стриминга из SDK вместо ручного разбора сырых событий — он управляет жизненным циклом событий за вас.
with client.messages.stream(
model="claude-sonnet-5", 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 не имеет памяти между вызовами (почему). Чтобы продолжить диалог, каждый раз отправляйте обратно весь предыдущий обмен.

Guided walkthrough1 of 4
  1. Отправьте первое сообщение пользователя в списке messages.
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

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

По мере роста истории она съедает контекстное окно, и стоимость растёт. Стратегии, чтобы держать это под контролем:

  • Суммируйте/уплотняйте более старые ходы в короткую сводку, которую вы несёте дальше.
  • Обрезайте нерелевантные ранние ходы.
  • Сочетайте с кэшированием промптов, чтобы не платить повторно за стабильный префикс.
Watch out
  • Каждый вызов повторно отправляет всю историю — длинные диалоги стоят дороже и в итоге могут превысить контекстное окно, если вы никогда не уплотняете и не обрезаете её.
Key takeaways
  • Стримьте токены ради высокой воспринимаемой скорости; хелпер SDK управляет жизненным циклом событий.
  • API не хранит состояние — у него нет памяти между вызовами.
  • Продолжайте диалог, добавляя каждый ход и повторно отправляя полный список messages.
  • Уплотняйте, обрезайте и кэшируйте, чтобы контролировать стоимость и размер длинных диалогов.

Проверь себя

0/3
  1. Почему стриминг улучшает опыт работы с чатом?
  2. Как продолжить многоходовый диалог в этом API?
  3. Какая стратегия НЕ предлагается, чтобы длинные диалоги не заполняли контекстное окно?

Далее