Chat Completions → Responses
Перенесите Messages, Choices и потоковые приращения Chat в Responses Input, Output Items и события.
Chat Completions организует диалог через messages и choices; Responses выражает вход, вызовы инструментов и результаты через input, Typed Items и output. Помимо эндпоинта измените входную структуру, разбор ответа, цикл инструментов и потоковый автомат состояний.
Сначала подтвердите поддержку Responses моделью
Поддержка полей, событий и инструментов Responses зависит от целевой модели. Перед миграцией проверьте модель в каталоге моделей и выполните минимальный текстовый запрос.
Нужна ли миграция
Responses подходит, если:
- Новому проекту нужны единые Typed Input и Output Items;
- Нужно сохранять состояние между шагами диалога, например через
previous_response_id; - Нужны уже поддерживаемые встроенные инструменты Responses;
- Приложение готово обрабатывать текст, вызовы инструментов и другие выходы по типам Item.
Можно продолжить использовать Chat Completions, если:
- Существующее приложение стабильно опирается на
messages,choicesи Chat Delta; - Целевая модель или нужные инструменты поддерживают только Chat Completions;
- Пока нет достаточных регрессионных проверок инструментов, диалогов и Streaming;
- Выгода миграции не оправдывает затраты на изменение разбора ответа и управления состоянием.
Основные изменения
| Chat Completions | Responses | Действие при миграции |
|---|---|---|
POST /v1/chat/completions | POST /v1/responses | Замена метода Client или пути запроса |
messages | input / Input Items | Сохранение смысла ролей и содержимого в структуре входа Responses |
| Системное сообщение или сообщение разработчика | instructions или Typed Input | Определение границы между инструкциями и историей диалога |
max_completion_tokens | max_output_tokens | Замена названия поля |
response_format | text.format | Перенос настройки структурированного вывода |
choices[].message | output[] Items | Обход по типам Item и Content |
tool_calls | function_call Item | Сохранение имени функции, аргументов и ID вызова |
| Tool Message | function_call_output Item | Возврат результата с соответствующим call_id |
| Chat Delta | События response.* | Новый диспетчер потоковых событий |
prompt_tokens / completion_tokens | input_tokens / output_tokens | Обновление чтения Usage |
Минимальный запрос: Before / After
{
"model": "MODEL_ID",
"messages": [
{
"role": "system",
"content": "Отвечайте кратко и точно."
},
{
"role": "user",
"content": "Представьте AGTCloud в одном предложении."
}
]
}В OpenAI SDK Base URL Client остаётся https://api.agtcloud.cn/v1. Метод меняется с client.chat.completions.create(...) на client.responses.create(...). Инициализация Python и TypeScript описана в OpenAI SDK.
Миграция чтения ответа
Chat Completions обычно читает сообщение ассистента из первого Choice:
choices[0].message.contentResponses возвращает упорядоченный output[], который может содержать сообщения, вызовы функций, поиск и другие Items. output_text SDK даёт агрегированный текст, но для инструментов и других выходов обходите весь output.
response.output_text
response.output[]Не считайте output[0] всегда текстом
Инструмент или другой Item может идти перед текстовым сообщением. Обрабатывайте по type и оставляйте журналы или совместимую ветку для пока неизвестных Items.
Миграция состояния многошагового диалога
| Способ | Использование | Особенности |
|---|---|---|
| Воспроизведение на клиенте | Передача прежних Input и Output Items в следующий input | Приложение управляет хранением, сокращением и конфиденциальностью |
| Связь ответов | Передача previous_response_id в следующий запрос | Сначала подтвердите поддержку моделью и интерфейсом |
При использовании previous_response_id прежние instructions не наследуются автоматически. Задавайте инструкции заново на каждом шаге по потребностям приложения.
После миграции не передавайте одну и ту же историю полностью и одновременно через previous_response_id: контекст может продублироваться.
Миграция Function Calling
Определение инструментов
Chat Completions размещает определение функции в tools[].function:
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Получение погоды в городе",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}
}Responses размещает информацию о функции прямо в объекте Function Tool:
{
"type": "function",
"name": "get_weather",
"description": "Получение погоды в городе",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}Передача результата
- Chat: чтение вызовов из
assistant.tool_calls[]и добавление Tool Message сtool_call_id. - Responses: чтение из
output[]элементовfunction_callи отправкаfunction_call_outputсcall_id, совпадающим с исходным вызовом.
В обоих протоколах функции выполняет ваше приложение. Не выполняйте непроверенные аргументы и не выдавайте ошибку инструмента за нормальный результат.
Миграция Streaming
Chat Completions возвращает приращения через choices[].delta каждого Chunk и обычно заканчивается [DONE].
Responses использует именованные события, например:
response.created;response.output_item.added;response.content_part.added;response.output_text.delta;response.output_text.done;response.completed.
Вместо простого объединения текста создайте диспетчер событий: сначала обработайте тип, затем обновляйте соответствующее состояние по output_index, content_index, item_id и другим идентификаторам.
Обрыв потока не означает завершение
Отмечайте шаг успешным только после события завершения и проверки состояния ответа. Отдельно обрабатывайте обрывы соединения, события ошибок и неполные состояния.
Миграция Structured Outputs
Chat Completions задаёт формат вывода в response_format; Responses — в text.format. При миграции синхронно измените:
- Расположение полей запроса;
- Обёртку JSON Schema;
- Вспомогательные методы разбора SDK;
- Обработку отказов, неполных ответов и ошибок проверки Schema.
Подробные поля приведены в Chat Completions и OpenAI Responses.
Миграция Web Search
Интерфейсы поиска двух протоколов различаются:
- Chat Completions использует
web_search_optionsи требует модель с поддержкой поиска; - Responses включает поддерживаемый Web Search Tool в
toolsи может вернуть Item вызова поиска и ссылки.
Фильтры доменов, список источников, местоположение пользователя и доступ к актуальному интернету зависят от протокола и модели. Полные примеры приведены в OpenAI Web Search.
Usage, ошибки и прерывания
При миграции мониторинга и чтения биллинга как минимум измените:
| Chat Completions | Responses |
|---|---|
usage.prompt_tokens | usage.input_tokens |
usage.completion_tokens | usage.output_tokens |
usage.total_tokens | usage.total_tokens |
finish_reason | Состояние или ошибка Response, Item и содержимого |
Сохраняйте также HTTP-статус, объект ошибки и Request ID. Не ограничивайтесь текстом исключения SDK: журналы должны различать ошибку аутентификации, невидимую модель, ограничение частоты, сбой сервиса и обрыв соединения.
Поэтапная миграция
Минимальная текстовая цепочка
Сначала создавайте запрос и читайте текст, не включая Streaming, инструменты и состояние многошагового диалога.
Диспетчеризация Output Items
Поддерживайте сообщения и вызовы функций; обеспечивайте совместимость с неизвестными Items, не отбрасывая их напрямую.
Состояние и потоковые события
По отдельности проверяйте историю на клиенте, previous_response_id, текстовые приращения, приращения аргументов инструментов и события завершения.
Восстановление расширенных возможностей
По очереди включайте структурированный вывод, Web Search и мультимодальный ввод, сохраняя отдельные регрессионные сценарии для каждого.
Проверки регрессии и отката
- Обычный текст, пустой вывод, отказ, неполное состояние и ошибка;
- Один и несколько инструментов, ошибка инструмента и неверные аргументы;
- История без состояния и
previous_response_id; - Нормальное завершение Streaming, обрыв и повторные события;
- Ошибка проверки Structured Outputs;
- Usage, ошибки, Request ID, тайм-ауты и ограничение частоты;
- Возможность вернуться к Chat Completions, если модель не поддерживает нужную возможность Responses.
Перед переключением в рабочей среде сохраните отдельные настройки Chat и Responses и управляемый переключатель. Удаляйте старый разбор только после подтверждения стабильности метрик приложения, журналов и обработки ошибок.
Следующие шаги
- Настройте Python или TypeScript Client через OpenAI SDK;
- Изучите обычный процесс Responses в Текст и диалог;
- Проверьте полные поля и ответы в OpenAI Responses;
- При ошибках вызова прочитайте Ошибки и устранение неполадок.