For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegação principal

Orientação durante o turno

Envie atualizações do usuário enquanto uma resposta está em execução.

A orientação durante o turno permite que os usuários adicionem requisitos ou mudem de direção sem esperar que uma resposta termine.

A orientação durante o turno está disponível com o GPT-6 Astra (gpt-6-astra) por meio de uma conexão WebSocket com a Responses API. O GPT-5.6 e os modelos anteriores não oferecem suporte à orientação durante o turno.

A orientação durante o turno não reescreve saídas já enviadas ao seu aplicativo, não desfaz ações anteriores nem cancela ferramentas cuja execução já começou.

Para saber como configurar a conexão e entender o comportamento geral do transporte, consulte Modo WebSocket. Para as definições exatas dos eventos, consulte a referência de eventos WebSocket da Responses API.

Envie uma mensagem de orientação

Inicie uma resposta com response.create. Depois de receber o evento response.created dessa resposta, envie response.steer pela mesma conexão, usando o ID da resposta como previous_response_id:

{
  "type": "response.steer",
  "previous_response_id": "resp_1",
  "input": "Keep the scope small enough for one developer to finish in two weeks."
}

O evento aceita apenas type, previous_response_id e input. Defina input como uma string ou um array não vazio de mensagens do usuário com tipos de conteúdo compatíveis.

A API confirma a inclusão da entrada na fila com response.steer.accepted:

{
  "type": "response.steer.accepted",
  "sequence_number": 4,
  "steer": {
    "id": "steer_0123456789abcdef0123456789abcdef",
    "previous_response_id": "resp_1"
  }
}

A aceitação significa que a entrada está na fila, não que o modelo já agiu com base nela. A API cria automaticamente uma nova resposta com sua atualização, a menos que precise de um resultado de ferramenta ou aprovação do seu aplicativo.

Antes de criar essa continuação automática, o servidor conclui o item de saída atual e qualquer trabalho de ferramenta hospedada que já esteja em execução. Continue lendo os eventos para receber a resposta com sua atualização; não envie outro response.create.

Se a orientação interromper a resposta original, ela termina com response.incomplete e incomplete_details.reason: "steered". Se a resposta original terminar normalmente antes disso, ela mantém o status de concluída e ainda pode ter uma continuação com a orientação.

As continuações automáticas herdam as configurações da solicitação original. Os limites de tokens e de chamadas de ferramentas se aplicam separadamente a cada resposta.

Execute um exemplo completo

O SDK do .NET não oferece um cliente WebSocket para Responses, por isso não há uma versão deste exemplo com o SDK de C#.

Atualize um plano de projeto durante a execução
import asyncio

from openai import AsyncOpenAI


async def main():
    client = AsyncOpenAI()
    initial_response_id = None
    successor_response_id = None

    async with client.responses.connect() as connection, asyncio.timeout(120):
        await connection.response.create(
            model="gpt-6-astra",
            reasoning={"effort": "medium"},
            input="Draft a project plan for building a task-tracking app.",
        )
        async for event in connection:
            if event.type == "response.created":
                if initial_response_id is None:
                    initial_response_id = event.response.id
                    # Simulate a user adding instructions while the response runs.
                    await connection.response.steer(
                        previous_response_id=initial_response_id,
                        input="Keep the scope small enough for one developer to finish in two weeks.",
                    )
                else:
                    successor_response_id = event.response.id
            elif event.type in {"response.steer.failed", "response.failed", "error"}:
                raise RuntimeError(event.to_json())
            elif event.type == "response.incomplete":
                response = event.response
                if (
                    response.id != initial_response_id
                    or response.incomplete_details is None
                    or response.incomplete_details.reason != "steered"
                ):
                    raise RuntimeError(event.to_json())
            elif (
                event.type == "response.completed"
                and event.response.id == successor_response_id
            ):
                print(event.response.output_text)
                return
            # Acceptance only queues the input. Keep reading past the first response.
        raise RuntimeError("Connection closed before the steered response finished.")


asyncio.run(main())

O exemplo envia a atualização após o primeiro evento response.created. No seu aplicativo, envie-a quando um usuário fornecer uma atualização. Use o ID da continuação para enviar novas orientações assim que o evento response.created dela chegar.

Retorne resultados de ferramentas ou aprovação

Se a resposta precisar de um resultado de ferramenta do cliente ou de aprovação, a API mantém a orientação na fila. Continue seu fluxo normal de ferramentas ou aprovação na mesma conexão.

Por exemplo, a resposta original pode terminar com uma chamada a get_project_status. Os payloads a seguir mostram apenas os campos relevantes:

{
  "type": "response.completed",
  "response": {
    "id": "resp_1",
    "status": "completed",
    "output": [
      {
        "type": "function_call",
        "call_id": "call_project",
        "name": "get_project_status",
        "arguments": "{\"project\":\"task-tracker\"}"
      }
    ]
  }
}

Depois que a resposta original termina, a API envia response.steer.pending para uma orientação aceita que ainda precisa de entrada. O campo required_input desse evento identifica os resultados de ferramentas ou as aprovações de que a API precisa antes de aplicar a atualização:

{
  "type": "response.steer.pending",
  "sequence_number": 12,
  "steer": {
    "id": "steer_0123456789abcdef0123456789abcdef",
    "previous_response_id": "resp_1"
  },
  "reason": "waiting_for_required_input",
  "required_input": [
    {
      "type": "function_call_output",
      "call_id": "call_project",
      "name": "get_project_status"
    }
  ]
}

Retorne a entrada necessária com response.create pela mesma conexão, definindo previous_response_id como resp_1. Não repita a orientação aceita. Um response.create explícito usa suas próprias ferramentas, instruções e demais configurações.

Os comentários neste exemplo em JSONC mostram onde o servidor adiciona a atualização que está na fila:

{
  "type": "response.create",
  "model": "gpt-6-astra",
  "previous_response_id": "resp_1",
  "input": [
    // The server implicitly prepends your accepted steer here:
    // "Keep the scope small enough for one developer to finish in two weeks."
    {
      "type": "function_call_output",
      "call_id": "call_project",
      "output": "Design is complete. Development has not started.",
    },
    {
      "role": "user",
      "content": "Show me the updated plan before starting any work.",
    },
  ],
}

Você não precisa esperar por response.steer.pending para retornar resultados de ferramentas. Se o servidor já tiver recebido um response.create correspondente, poderá prosseguir sem enviar essa notificação antes.

Trate falhas e desconexões

response.steer.failed significa que a API não aplicou a entrada por meio da orientação e não a aplicará automaticamente depois. O evento retorna os valores originais de input e previous_response_id dentro de steer, com um objeto error que descreve a falha.

Acompanhe os envios aceitos por steer.id. Uma falha posterior usa o mesmo ID.

Códigos de erro comuns:

  • invalid_input: Use apenas os campos de evento compatíveis e mensagens do usuário como entrada.
  • steering_not_supported: O modelo, os parâmetros da solicitação ou ambos podem ser incompatíveis com a orientação durante o turno.
  • response_not_found: A resposta de destino ainda precisa estar disponível na mesma conexão WebSocket.
  • too_many_pending_steers: Há entradas de orientação pendentes demais. Retorne os resultados de ferramentas ou as aprovações necessários usando response.create; caso contrário, aguarde a continuação automática antes de enviar mais entradas. Não reenvie orientações já aceitas.

As entradas de orientação na fila existem apenas na conexão atual; elas não são armazenadas com a resposta original. Registre as entradas de orientação que você envia e compare-as com os eventos e o histórico de respostas antes de reenviá-las. Não presuma que as orientações pendentes foram preservadas após a desconexão. Consulte as orientações de recuperação de WebSocket.