Гайд · TNWS AI

Как сохранять контекст диалога в OpenAI Responses API без повторной отправки истории

2 мин

Диалог через 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 и пользовательские подтверждения сохраняются отдельно.

Как внедрить

  1. Создайте таблицу conversations: owner_id, last_response_id, instruction_version и status.
  2. Проверьте владельца перед каждым продолжением.
  3. Обновляйте last_response_id транзакционно, чтобы параллельные сообщения не перемешались.
  4. Для «изменить ответ» создавайте ветку от нужного предка и показывайте её отдельно.
  5. При удалении беседы выполняйте локальную очистку и предусмотренные 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

Читайте также

Комментарии

Пока тихо. Скажите первое слово