Команда AI for Devs подготовила перевод статьи о новом API /v1/responses от OpenAI, который объединяет простоту Chat Completions и мощь Assistants, и при этом сохраняет состояние рассуждений, мультимодальность и встроенные инструменты. Это шаг к агентам будущего — и, похоже, к новому стандарту работы с моделями OpenAI.


GPT-5 уже вышел, и мы хотим подробнее рассказать о наилучших способах его интеграции, об API Responses и о том, почему Responses идеально подходит для моделей рассуждения и для будущего, ориентированного на программных агентов.

Каждое поколение API OpenAI создавалось вокруг одного и того же вопроса: как разработчикам максимально просто и эффективно взаимодействовать с моделями?

При разработке нашего API мы всегда ориентировались на принципы работы самих моделей. Самый первый эндпойнт /v1/completions был простым, но ограниченным: вы давали модели подсказку, и она просто завершала вашу мысль. С помощью таких техник, как few-shot prompting, разработчики пытались направить модель на выполнение таких задач, как вывод JSON и ответы на вопросы, но эти модели были гораздо менее функциональными, чем те, к которым мы привыкли сегодня.

Затем появились RLHF, ChatGPT и эпоха пост-обучения. Внезапно модели стали не просто дописывать вашу незаконченную прозу — они отвечали как собеседник. Чтобы соответствовать этим изменениям, мы создали /v1/chat/completions (как известно, это было сделано за одни выходные). Предоставляя такие роли, как systemuserassistant, мы создали основу для быстрого построения чат-интерфейсов с пользовательскими инструкциями и контекстом.

Наши модели продолжали совершенствоваться. Вскоре они начали видеть, слышать и говорить. Вызов функций в конце 2023 года стал одной из самых востребованных возможностей. Примерно в то же время мы запустили бета-версию Assistants API: нашу первую попытку создать полностью агентный интерфейс с такими инструментами, как интерпретатор кода и поиск файлов. Некоторым разработчикам это понравилось, но API не получило широкого распространения из-за его ограниченного и сложного в освоении дизайна по сравнению с Chat Completions.

К концу 2024 года стало очевидно, что нам нужна унификация: что-то такое же доступное, как Chat Completions, такое же мощное, как Assistants, но также специально созданное для мультимодальных моделей и моделей рассуждения. Так появился /v1/responses.

/v1/responses — это агентный цикл

Chat Completions предоставлял простой пошаговый чат-интерфейс. Responses же предлагает структурированный цикл для рассуждения и действия. Представьте себе работу с детективом: вы даете ему улики, он проводит расследование, может консультироваться с экспертами (инструментами) и, наконец, отчитывается. Детектив хранит свои личные записи (состояние рассуждения) между шагами, но никогда не передает их клиенту.

И вот здесь модели рассуждения действительно проявляют себя: Responses сохраняет состояние рассуждения модели между этими шагами. В Chat Completions рассуждения теряются между вызовами, как если бы детектив забывал улики каждый раз, когда выходит из комнаты. Responses держит блокнот открытым; пошаговые мыслительные процессы фактически сохраняются для следующего шага. Это видно по бенчмаркам (TAUBench +5%) и по более эффективному использованию кэша и снижению задержки.

Ответы также могут содержать несколько элементов вывода: не только то, что модель сказала, но и то, что она сделала. Вы получаете подтверждения — вызовы инструментов, структурированные выводы, промежуточные шаги. Это похоже на получение как готового эссе, так и черновика с вычислениями. Полезно для отладки, аудита и создания более многофункциональных пользовательских интерфейсов.

{
  "message": {
    "role": "assistant",
    "content": "I'm going to use the get_weather tool to find the weather.",
    "tool_calls": [
      {
        "id": "call_88O3ElkW2RrSdRTNeeP1PZkm",
        "type": "function",
        "function": {
          "name": "get_weather",
          "arguments": "{\"location\":\"New York, NY\",\"unit\":\"f\"}"
        }
      }
    ],
    "refusal": null,
    "annotations": []
  }
}

Завершение чата выдаёт одно сообщение на запрос. Структура сообщения имеет ограничения: что было первым — сообщение или вызов функции?

 {
    "id": "rs_6888f6d0606c819aa8205ecee386963f0e683233d39188e7",
    "type": "reasoning",
    "summary": [
      {
        "type": "summary_text",
        "text": "**Determining weather response**\n\nI need to answer the user's question about the weather in San Francisco. ...."
      },
  },
  {
    "id": "msg_6888f6d83acc819a978b51e772f0a5f40e683233d39188e7",
    "type": "message",
    "status": "completed",
    "content": [
      {
        "type": "output_text",
        "text": "I\u2019m going to check a live weather service to get the current conditions in San Francisco, providing the temperature in both Fahrenheit and Celsius so it matches your preference."
      }
    ],
    "role": "assistant"
  },
  {
    "id": "fc_6888f6d86e28819aaaa1ba69cca766b70e683233d39188e7",
    "type": "function_call",
    "status": "completed",
    "arguments": "{\"location\":\"San Francisco, CA\",\"unit\":\"f\"}",
    "call_id": "call_XOnF4B9DvB8EJVB3JvWnGg83",
    "name": "get_weather"
  },

Responses выдаёт список полиморфных элементов. Порядок действий, выполненных моделью, очевиден. Как разработчик, вы можете выбрать, какие из них отображать, регистрировать или полностью игнорировать.

Продвижение вверх по стеку с помощью хостинговых инструментов

На ранних этапах вызова функций мы заметили ключевую закономерность: разработчики использовали модель как для вызова API, так и для поиска в хранилищах документов с целью получения внешних источников данных — теперь это называется RAG. Но если вы разработчик, только начинающий работу, создание конвейера извлечения данных с нуля — это сложная и дорогостоящая задача. С Assistants мы представили наши первые хостинговые инструменты: file_search и code_interpreter, позволяющие модели выполнять RAG и писать код для решения поставленных задач. В Responses мы пошли ещё дальше, добавив веб-поиск, генерацию изображений и MCP. А поскольку выполнение инструментов происходит на стороне сервера через хостинговые инструменты, такие как code_interpreter или MCP, вам не нужно каждый вызов отправлять обратно через свой собственный бэкэнд, что обеспечивает лучшую задержку и снижает затраты на цикл обмена данными.

Безопасное сохранение логики рассуждений

Так зачем же идти на все эти ухищрения, чтобы скрыть необработанную цепочку рассуждений (CoT) модели? Не проще ли было бы просто предоставить CoT и позволить клиентам обрабатывать её так же, как и другие выводы модели? Короткий ответ заключается в том, что предоставление необработанной CoT несёт ряд рисков: таких как галлюцинации, вредоносный контент, который не был бы сгенерирован в окончательном ответе, и, для OpenAI, создаёт конкурентные риски.

Когда в конце прошлого года мы выпустили o1-preview, наш главный научный сотрудник Якуб Пачоцки написал в нашем блоге следующее:

Мы считаем, что скрытая цепочка рассуждений представляет собой уникальную возможность для мониторинга моделей. Если она точна и понятна, скрытая цепочка рассуждений позволяет нам «читать мысли» модели и понимать ход её мыслей. Например, в будущем мы можем захотеть отслеживать цепочку рассуждений на предмет признаков манипулирования пользователем. Однако для этого модель должна иметь свободу выражать свои мысли в неизменном виде, поэтому мы не можем обучать цепочку рассуждений какой-либо политике соответствия или пользовательским предпочтениям. Мы также не хотим делать несовместимую цепочку рассуждений напрямую видимой для пользователей.

Responses решает эту проблему следующим образом:

  • Сохраняет рассуждения внутри, в зашифрованном и скрытом от клиента виде.

  • Позволяет безопасно продолжать работу через previous_response_id или элементы рассуждений, не раскрывая необработанные CoT.

Почему /v1/responses — лучший способ разработки

Мы разработали Responses так, чтобы он был с сохранением состояния, мультимодальным и эффективным.

  • Использование агентных инструментов: API Responses упрощает расширение возможностей агентных рабочих процессов с помощью таких инструментов, как File Search, Image Gen, Code Interpreter и MCP.

  • Сохранение состояния по умолчанию. Разговоры и состояние инструментов отслеживаются автоматически. Это значительно упрощает рассуждения и многоходовые рабочие процессы. GPT-5, интегрированный через Responses, показывает на 5% лучшие результаты на TAUBench по сравнению с Chat Completions, исключительно за счёт использования сохранённых рассуждений.

  • Мультимодальность с самого начала. Текст, изображения, аудио, вызовы функций — все это первоклассные сущности. Мы не прикручивали модальности к текстовому API; мы изначально спроектировали «дом» с достаточным количеством «спален».

  • Снижение затрат, повышение производительности. Внутренние тесты показывают на 40–80% лучшее использование кэша по сравнению с Chat Completions. Это означает меньшую задержку и более низкие затраты.

  • Улучшенный дизайн: Мы многому научились как на Chat Completions, так и на Assistants API и внесли ряд небольших улучшений качества жизни в ResponsesAPI и SDK, включая

    • Семантические потоковые события.

    • Внутренне помеченный полиморфизм. 

    • Вспомогательные функции output_text в SDK (больше никаких choices.[0].message.content).

    • Лучшая организация мультимодальных и рассуждающих параметров.

А что насчёт Chat Completions?

Chat Completions никуда не денется. Если он вам подходит, продолжайте им пользоваться. Но если вы хотите, чтобы рассуждения сохранялись, мультимодальные взаимодействия ощущались естественно, а агентный цикл не требовал «изоленты» — Responses — это путь вперёд.

Заглядывая вперёд

Подобно тому, как Chat Completions заменил Completions, мы ожидаем, что Responses станет стандартным способом для разработчиков создавать приложения с моделями OpenAI. Он прост, когда это необходимо, мощен, когда вы этого хотите, и достаточно гибок, чтобы справиться со всем, что принесёт следующая парадигма.

Это API, на котором мы будем строить в ближайшие годы.

Русскоязычное сообщество про AI в разработке

Друзья! Эту новость подготовила команда ТГК «AI for Devs» — канала, где мы рассказываем про AI-ассистентов, плагины для IDE, делимся практическими кейсами и свежими новостями из мира ИИ. Подписывайтесь, чтобы быть в курсе и ничего не упустить!

Комментарии (1)


  1. janvarev
    01.10.2025 16:02

    Все: скопировали chat/completions как общеупотребительный формат абстракции от OpenAI и сделали OpenAI-compatible API.

    OpenAI: не, ну я так не играю, скрывать рассуждения от пользователя не получится, и тарифицировать их как мне вздумается, тоже, и вообще, vendor lock не прокатит. Введу-ка я responses, у которой нет четкой спецификации. И previous_response_id - чтобы что-то хранить на сервере, а что - непонятно.

    А так chat/completions прекрасно справляется и с мультимодальностью (картинки в нем передается в base64), и с вызовом tools.