Перейти к содержимому
Основной сайт Новости Консоль

Многораундовый диалог

Chat Completions — это интерфейс без состояния: модель не запоминает предыдущий запрос. Принцип многораундового диалога таков —
каждый раз при запросе полностью передавать всю историю сообщений.

Основное использование

messages = [
{"role": "system", "content": "你是一个简洁的中文助手。"},
{"role": "user", "content": "什么是向量数据库?"},
]
r1 = client.chat.completions.create(model="gpt-5.5", messages=messages)
messages.append({"role": "assistant", "content": r1.choices[0].message.content})
messages.append({"role": "user", "content": "它和 Elasticsearch 有什么区别?"})
r2 = client.chat.completions.create(model="gpt-5.5", messages=messages)

На втором раунде модель понимает, к чему относится «оно», потому что вся полная история уже находится в messages.

Управление контекстом

Чем длиннее история, тем больше входных токенов, выше стоимость и тем выше риск превысить лимит контекста модели. Распространённые стратегии:

СтратегияКак делатьПодходит для
Скользящее окноОставлять только последние N раундов + systemПоддержка клиентов, непринуждённый чат
Сжатие в摘要Старую историю сжимать в摘要 с помощью дешёвой моделиДолгие диалоги с ассистентом
Поисковое дополнениеЗагружать историю в векторную базу и по необходимости извлекать релевантные фрагментыПриложения на основе знаний

Важные замечания

  • Сообщение system рекомендуется всегда оставлять первым и использовать кешированное тарифицирование для снижения повторяющихся затрат;
  • При обрезке истории удаляйте её по «раундам» (парами user+assistant), не обрывайте посередине;
  • При переключении между моделями (например, с GPT на Claude) формат истории менять не нужно — достаточно просто заменить model