Многораундовый диалог
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。