← Все инструкции

РУКОВОДСТВО · ОБНОВЛЕНО 2026-10-01

Responses API или Chat Completions: как перенести интеграцию

Замена адреса запроса недостаточна: два протокола по-разному представляют сообщения, вызовы функций и события потока. Разберём перенос на уровне контракта приложения.

Выбирайте протокол по поддержке конкретной модели, шлюза и клиента. Для переноса в Responses перепишите вход, чтение output, цикл функций и обработчик streaming. Проверьте хранение истории отдельно. Успешный текстовый ответ ещё не подтверждает совместимость инструментов.

1. Составьте карту текущего контракта

Запишите, что использует приложение: текстовый ответ, JSON по схеме, функции, изображения, история, поток. Рядом укажите модель и версию SDK. OpenAI рекомендует Responses для новых проектов, сохраняя поддержку Chat Completions; у другого сервиса набор возможностей может отличаться. Проверьте документацию фактического адреса API. Если клиент требует серверное продолжение диалога, а шлюз принимает только явно переданную историю, это отдельная несовместимость. Список требований помогает перенести один сценарий целиком и сохранить рабочий путь для остальных.

2. Перепишите вход и разбор результата

Chat Completions использует messages, а Responses — input и типизированные элементы. Вместо чтения только choices[0].message.content обработайте output: текст, вызовы функций и остальные разрешённые типы. Удобное поле output_text может быть свойством SDK, поэтому не предполагается в любом сыром HTTP-ответе. Проверьте пустой текст при наличии function_call: это запрос действия, а не обязательно сбой. Для структурированного результата меняется расположение настройки формата. Создайте отдельный адаптер протокола, чтобы интерфейс приложения получал прежнюю понятную структуру.

3. Проверьте полный цикл функции

В Responses описание функции размещается в tools, а результат приходит элементом function_call с call_id. Приложение проверяет имя, аргументы и права, выполняет разрешённую операцию и передаёт function_call_output с тем же call_id. Модель предлагает действие, но локальный код исполняет его. Для проверки используйте безопасную функцию чтения, например получение статуса тестового заказа. Проверьте несколько вызовов, неизвестную функцию, неверные аргументы и отказ в доступе. Ограничьте число шагов: бесконечное чередование модели и инструмента не должно исчерпать бюджет.

4. Разделите поток, историю и хранение

События Responses отличаются от chunks Chat Completions. Обработчик должен различать текстовые дельты, данные функции, завершение и ошибку. Не считайте закрытие соединения успешным окончанием задачи. Отдельно выясните, доступны ли store и previous_response_id, сколько хранится состояние и как оно удаляется. Эти параметры зависят от реализации и не возникают автоматически при смене endpoint. В stateless-сценарии приложение хранит нужные элементы истории самостоятельно. Не отбрасывайте возвращённые элементы, необходимые для продолжения, только потому, что пользователь не видит их в чате.

5. Переносите сценарии через проверяемые примеры

Подготовьте одинаковые входные данные для старого и нового адаптера: короткий вопрос, JSON, один инструмент, два последовательных шага, обрыв потока и ошибка сервиса. Сверьте смысл ответа, события, usage и отсутствие повторных действий. Сначала используйте fixtures без платной сети. Реальный контрольный вызов проводите только с согласованным бюджетом. В Tokenmost смотрите документацию конкретного метода и доступность модели в кабинете: карточка модели сама по себе не обещает web search, хранение файлов или любой иной инструмент OpenAI. После приёмки переключайте один пользовательский сценарий с возможностью отката.

Частые вопросы

Chat Completions больше не работает?

У OpenAI он остаётся поддерживаемым. Проверяйте статус конкретного сервиса и модели; рекомендации одного поставщика нельзя переносить на все шлюзы.

Достаточно заменить /chat/completions на /responses?

Нет. Меняются тело запроса, структура результата, функции и события потока. Нужен адаптер и проверка каждого используемого сценария.

Будет ли доступен встроенный веб-поиск?

Только если его поддерживает выбранный метод и сервис. Поддержка пользовательских функций не подтверждает поддержку встроенного web search.

Как проверить перенос без расхода на модели?

Начните с сохранённых ответов и fixture transport: проверьте разбор output, call_id, ограничения шагов и обработку ошибок без сетевой генерации.

Источники

Калькулятор стоимости →