Отправить запрос в фоновом режиме с помощью Responses API

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

В фоновом режиме Responses API в ответ на запрос не дожидается от модели результата генерации, а получает идентификатор задачи, после чего соединение разрывается. После этого вы можете с нужной вам периодичностью проверять статус задачи по ее идентификатору и, дождавшись выполнения, получить результат генерации.

Если у вас небольшой запрос, предусматривающий короткий ответ, отправьте базовый запрос. Если вы хотите, чтобы модель сохраняла контекст переписки, воспользуйтесь одним из способов управления контекстом.

Чтобы воспользоваться примером, вам понадобится сервисный аккаунт с ролью ai.languageModels.user и API-ключ с областью действия yc.ai.foundationModels.execute. API-ключ, который вы можете создать в AI Studio, имеет такие разрешения. Пример того, как настроить рабочее окружение, можно найти в разделе Начало работы.

import openai
        import time
        
        YANDEX_API_KEY = "<API-ключ>"
        YANDEX_FOLDER_ID = "<идентификатор_каталога>"
        YANDEX_MODEL = "yandexgpt"
        
        client = openai.OpenAI(
            api_key=YANDEX_API_KEY,
            base_url="https://ai.api.cloud.yandex.net/v1",
            project=YANDEX_FOLDER_ID,
        )
        
        # --- 1. Создаем ответ в фоне
        resp = client.responses.create(
            model=f"gpt://{YANDEX_FOLDER_ID}/{YANDEX_MODEL}",
            input="Сделай краткое резюме текста: 'На платформе Yandex AI Studio доступно более 20 развернутых в облаке моделей в разных режимах работы. Самыми популярными по потреблению остаются модели семейства YandexGPT — на них приходится 62,7% от общего трафика на облачной платформе. Такой высокий спрос позволил снизить цены на собственные модели компании, сделав их более доступными. На втором и третьем местах — опенсорсные модели Qwen3‑235b от Alibaba Group (30,9%) и GPT‑OSS от OpenAI (5,7%).'",
            background=True,  # запускаем в фоне
        )
        
        print("Задача отправлена:", resp.id)
        
        # --- 2. Опрашиваем статус
        while True:
            status = client.responses.retrieve(resp.id)
            print("Статус:", status.status)
            if status.status in ["completed", "failed", "cancelled"]:
                break
            time.sleep(2)
        
        # --- 3. Получаем результат
        if status.status == "completed":
            print("Готовый ответ:", status.output_text)
        else:
            print("Ошибка:", status.status)
        

Где:

  • YANDEX_API_KEYAPI-ключ для работы в AI Studio.

  • YANDEX_FOLDER_IDидентификатор каталога сервисного аккаунта.

  • YANDEX_MODEL — имя модели, которая будет обрабатывать запрос.

  • background — флаг фонового режима; при значении true запрос выполняется асинхронно, не ожидая завершения генерации.

  • resp — объект с результатами запроса на генерацию ответа.

    Возможные статусы результата генерации:

    • queued — задание находится в очереди на выполнение.
    • in_progress — задание выполняется.
    • failed — выполнение задания завершилось ошибкой.
    • cancelled — выполнение задания было отменено.
    • completed — задание успешно выполнено.

    Результат генерации сохранится в поле status.output_text при переходе в статус completed.

Пример результата:

Задача отправлена: 1e5ee267-2d01-49d7-abf9-94b9********
        Статус: queued
        Статус: completed
        Готовый ответ: В Yandex AI Studio доступно более 20 облачных моделей. Лидеры по популярности — модели YandexGPT (62,7% трафика), за ними следуют Qwen3‑235b (30,9%) и GPT‑OSS (5,7%). Высокий спрос на YandexGPT позволил снизить цены на модели компании.
        
import OpenAI from "openai";
        
        const YANDEX_API_KEY = "<API-ключ>";
        const YANDEX_FOLDER_ID = "<идентификатор_каталога>";
        const YANDEX_MODEL = "yandexgpt";
        
        const client = new OpenAI({
          apiKey: YANDEX_API_KEY,
          baseURL: "https://ai.api.cloud.yandex.net/v1",
          project: YANDEX_FOLDER_ID,
        });
        
        // 1. Создаем ответ в фоне
        const resp = await client.responses.create({
          model: `gpt://${YANDEX_FOLDER_ID}/${YANDEX_MODEL}`,
          input: "Сделай краткое резюме текста: 'На платформе Yandex AI Studio доступно более 20 развернутых в облаке моделей в разных режимах работы. Самыми популярными по потреблению остаются модели семейства YandexGPT — на них приходится 62,7% от общего трафика на облачной платформе. Такой высокий спрос позволил снизить цены на собственные модели компании, сделав их более доступными. На втором и третьем местах — опенсорсные модели Qwen3‑235b от Alibaba Group (30,9%) и GPT‑OSS от OpenAI (5,7%).'",
          background: true,
        });
        
        console.log("Задача отправлена:", resp.id);
        
        // 2. Опрашиваем статус
        let status;
        do {
          status = await client.responses.retrieve(resp.id);
          console.log("Статус:", status.status);
          if (!["completed", "failed", "cancelled"].includes(status.status)) {
            await new Promise((r) => setTimeout(r, 2000));
          }
        } while (!["completed", "failed", "cancelled"].includes(status.status));
        
        // 3. Получаем результат
        if (status.status === "completed") {
          console.log("Готовый ответ:", status.output_text);
        } else {
          console.log("Ошибка:", status.status);
        }
        

Где:

  • YANDEX_API_KEYAPI-ключ для работы в AI Studio.

  • YANDEX_FOLDER_IDидентификатор каталога сервисного аккаунта.

  • YANDEX_MODEL — имя модели, которая будет обрабатывать запрос.

  • background — флаг фонового режима; при значении true запрос выполняется асинхронно, не ожидая завершения генерации.

  • resp — объект с результатами запроса на генерацию ответа.

    Возможные статусы результата генерации:

    • queued — задание находится в очереди на выполнение.
    • in_progress — задание выполняется.
    • failed — выполнение задания завершилось ошибкой.
    • cancelled — выполнение задания было отменено.
    • completed — задание успешно выполнено.

    Результат генерации сохранится в поле output_text объекта status при переходе в статус completed.

Пример результата:

Задача отправлена: 1e5ee267-2d01-49d7-abf9-94b9********
        Статус: queued
        Статус: completed
        Готовый ответ: В Yandex AI Studio доступно более 20 облачных моделей. Лидеры по популярности — модели YandexGPT (62,7% трафика), за ними следуют Qwen3‑235b (30,9%) и GPT‑OSS (5,7%). Высокий спрос на YandexGPT позволил снизить цены на модели компании.
        
TASK_ID=$(curl -s -X POST https://ai.api.cloud.yandex.net/v1/responses \
          -H "Authorization: Api-Key ${YANDEX_API_KEY}" \
          -H "Content-Type: application/json" \
          -d '{
            "model": "gpt://'"${YANDEX_FOLDER_ID}"'/'"${YANDEX_MODEL}"'",
            "input": "Сделай краткое резюме текста: \"На платформе Yandex AI Studio доступно более 20 развернутых в облаке моделей в разных режимах работы. Самыми популярными по потреблению остаются модели семейства YandexGPT — на них приходится 62,7% от общего трафика на облачной платформе. Такой высокий спрос позволил снизить цены на собственные модели компании, сделав их более доступными. На втором и третьем местах — опенсорсные модели Qwen3‑235b от Alibaba Group (30,9%) и GPT‑OSS от OpenAI (5,7%).",
            "background": true
          }' | jq -r '.id')
        
        echo "Задача отправлена: $TASK_ID"
        
        # 2. Опрашиваем статус
        while true; do
          RESPONSE=$(curl -s https://ai.api.cloud.yandex.net/v1/responses/${TASK_ID} \
            -H "Authorization: Api-Key ${YANDEX_API_KEY}" \
            -H "x-project: ${YANDEX_FOLDER_ID}")
          STATUS=$(echo $RESPONSE | jq -r '.status')
          echo "Статус: $STATUS"
          if [[ "$STATUS" == "completed" || "$STATUS" == "failed" || "$STATUS" == "cancelled" ]]; then
            break
          fi
          sleep 2
        done
        
        # 3. Получаем результат
        echo $RESPONSE | jq .
        

Где:

  • YANDEX_API_KEYAPI-ключ для работы в AI Studio.

  • YANDEX_FOLDER_IDидентификатор каталога сервисного аккаунта.

  • YANDEX_MODEL — имя модели, которая будет обрабатывать запрос.

  • background: true — флаг фонового режима; запрос выполняется асинхронно, не ожидая завершения генерации.

  • TASK_ID — идентификатор фоновой задачи, извлеченный из ответа с помощью jq.

  • STATUS — текущий статус задачи, извлеченный из ответа с помощью jq.

    Возможные значения:

    • queued — задание находится в очереди на выполнение.
    • in_progress — задание выполняется.
    • failed — выполнение задания завершилось ошибкой.
    • cancelled — выполнение задания было отменено.
    • completed — задание успешно выполнено.

    При статусе completed поле output_text содержит результат генерации.

Пример результата:

{
          ...
              {
                "annotations": [],
                "text": "На платформе Yandex AI Studio доступно более 20 облачных моделей в разных режимах работы. Модели YandexGPT занимают 62,7% трафика, что позволило снизить их стоимость. На втором и третьем местах по популярности — модели Qwen3‑235b от Alibaba Group (30,9%) и GPT‑OSS от OpenAI (5,7%).",
                "type": "output_text",
                "logprobs": null,
                "valid": true
          ... }
        }
        
package main
        
        import (
          "context"
          "fmt"
          "log"
          "time"
        
          "github.com/openai/openai-go"
          "github.com/openai/openai-go/option"
          "github.com/openai/openai-go/responses"
        )
        
        const (
          YANDEX_API_KEY   = "<API-ключ>"
          YANDEX_FOLDER_ID = "<идентификатор_каталога>"
          YANDEX_MODEL     = "yandexgpt"
        )
        
        func main() {
          client := openai.NewClient(
            option.WithAPIKey(YANDEX_API_KEY),
            option.WithBaseURL("https://ai.api.cloud.yandex.net/v1"),
            option.WithProject(YANDEX_FOLDER_ID),
          )
        
          model := fmt.Sprintf("gpt://%s/%s", YANDEX_FOLDER_ID, YANDEX_MODEL)
        
          inputText := "Сделай краткое резюме текста: 'На платформе Yandex AI Studio доступно более 20 развернутых в облаке моделей в разных режимах работы. Самыми популярными по потреблению остаются модели семейства YandexGPT — на них приходится 62,7% от общего трафика на облачной платформе. Такой высокий спрос позволил снизить цены на собственные модели компании, сделав их более доступными. На втором и третьем местах — опенсорсные модели Qwen3‑235b от Alibaba Group (30,9%) и GPT‑OSS от OpenAI (5,7%).'"
        
          // --- 1. Создаем ответ в фоне
          resp, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
            Model: model,
            Input: responses.ResponseNewParamsInputUnion{
              OfString: openai.String(inputText),
            },
            Background: openai.Bool(true),
          })
          if err != nil {
            log.Fatalf("Ошибка при создании задачи: %v", err)
          }
        
          fmt.Println("Задача отправлена:", resp.ID)
        
          // --- 2. Опрашиваем статус
          var status *responses.Response
          for {
            status, err = client.Responses.Get(context.Background(), resp.ID, responses.ResponseGetParams{})
            if err != nil {
              log.Fatalf("Ошибка при получении статуса: %v", err)
            }
        
            fmt.Println("Статус:", status.Status)
        
            if status.Status == "completed" ||
              status.Status == "failed" ||
              status.Status == "cancelled" {
              break
            }
        
            time.Sleep(2 * time.Second)
          }
        
          // --- 3. Получаем результат
          if status.Status == "completed" {
            fmt.Println("Готовый ответ:", status.OutputText())
          } else {
            fmt.Println("Ошибка:", status.Status)
          }
        }
        

Где:

  • YANDEX_API_KEYAPI-ключ для работы в AI Studio.

  • YANDEX_FOLDER_IDидентификатор каталога сервисного аккаунта.

  • YANDEX_MODEL — имя модели, которая будет обрабатывать запрос.

  • background — флаг фонового режима; при значении true запрос выполняется асинхронно, не ожидая завершения генерации.

  • resp — объект с результатами запроса на генерацию ответа.

    Возможные статусы результата генерации:

    • queued — задание находится в очереди на выполнение.
    • in_progress — задание выполняется.
    • failed — выполнение задания завершилось ошибкой.
    • cancelled — выполнение задания было отменено.
    • completed — задание успешно выполнено.

    Результат генерации сохранится в поле status.output_text при переходе в статус completed.

Пример результата:

Задача отправлена: 1e5ee267-2d01-49d7-abf9-94b9********
        Статус: queued
        Статус: completed
        Готовый ответ: В Yandex AI Studio доступно более 20 облачных моделей. Лидеры по популярности — модели YandexGPT (62,7% трафика), за ними следуют Qwen3‑235b (30,9%) и GPT‑OSS (5,7%). Высокий спрос на YandexGPT позволил снизить цены на модели компании.
        

См. также