Гайд · TNWS AI
Как сохранять контекст диалога в OpenAI Responses API без повторной отправки истории
Диалог через previous_response_id: хранение цепочки, инструкции, ветвление, контроль владельца и тест на смешивание пользователей.
Сохраните ID предыдущего response и передайте его как previous_response_id в следующем ходе. Это связывает контекст, но не освобождает приложение от хранения структуры бесед и проверки владельца. Инструкции предыдущего запроса могут не переноситься так, как ожидает разработчик, поэтому постоянные правила задавайте на каждом ходе или используйте предназначенный механизм Conversation.
Рабочий пример
const first = await client.responses.create({
model: "gpt-5",
instructions: "Отвечай по-русски и не выдумывай отсутствующие данные.",
input: "Меня интересует заказ 5412"
});
const next = await client.responses.create({
model: "gpt-5",
previous_response_id: first.id,
instructions: "Отвечай по-русски и не выдумывай отсутствующие данные.",
input: "Какой номер я назвал?"
});
console.log(next.output_text);
Конкретные факты и поля
previous_response_idстроит цепочку между ответами. Для ветвления несколько новых запросов могут ссылаться на одного предка.- Response ID нельзя принимать от клиента без проверки: он должен принадлежать текущей беседе и пользователю.
- Постоянные инструкции лучше хранить в версии конфигурации приложения и передавать предсказуемо.
- Контекст API не является вашей системой аудита: важные решения, tool calls и пользовательские подтверждения сохраняются отдельно.
Как внедрить
- Создайте таблицу conversations: owner_id, last_response_id, instruction_version и status.
- Проверьте владельца перед каждым продолжением.
- Обновляйте last_response_id транзакционно, чтобы параллельные сообщения не перемешались.
- Для «изменить ответ» создавайте ветку от нужного предка и показывайте её отдельно.
- При удалении беседы выполняйте локальную очистку и предусмотренные API операции.
Как проверить результат
В беседе A задайте контрольное число, в B — другое. Попробуйте отправить response ID из A через аккаунт B: backend обязан вернуть отказ до вызова OpenAI. Параллельно отправьте два сообщения в одну ветку и проверьте порядок.
Ограничения
Сохранение состояния имеет последствия для приватности и срока хранения. Политика API зависит от режима и договора аккаунта. Не храните единственную копию пользовательского документа только внутри цепочки responses.
Чего не делать
- Не используйте response ID как секретный токен авторизации.
- Не предполагайте автоматическое наследование всех инструкций.
- Не перезаписывайте ветки параллельными запросами без контроля версии.
FAQ
Можно ли копировать пример как есть?
Для прототипа — да. В production добавьте таймаут, обработку ошибок, лимиты, журнал request ID и защиту ключа.
Где хранить API-ключ?
В секретах серверной среды. Не в браузере, мобильном приложении, репозитории или тексте статьи.
Как проверить, что функция реально сработала?
Разбирать структурированные поля ответа и проводить контрольный тест, а не судить по убедительности текста.
Почему пример не фиксирует цену?
Тарифы и набор поддерживаемых моделей меняются; актуальные значения проверяются на официальной странице Pricing перед запуском.
Официальный источник
Документация OpenAI, проверена 11 сентября 2026 года: https://platform.openai.com/docs/guides/conversation-state
Читайте также
Как настроить streaming в OpenAI Responses API и правильно собрать ответ
Потоковая выдача OpenAI: stream:true, типы SSE-событий, text delta, завершение, tool calls и восстановление после обрыва.
Как подключить удалённый MCP-сервер к OpenAI API и проверить его инструменты
Remote MCP в Responses API: адрес сервера, список инструментов, approvals, проверка аргументов и защита от prompt injection.
Как подключить веб-поиск к OpenAI Responses API и получить проверяемые источники
Рабочий web_search в Responses API: вызов инструмента, доменные ограничения, чтение URL-цитат и проверка актуальности ответа.
Комментарии
Пока тихо. Скажите первое слово