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
Theme

Iniciar e continuar sessões

Inicie o trabalho, acompanhe o progresso e continue a conversa.

Uma sessão preserva a configuração do agente, a conversa e o trabalho salvo ao longo do tempo. Use a mesma sessão para enviar novas mensagens e dar continuidade ao trabalho.

Sessões e turnos

Um turno é um ciclo de trabalho dentro de uma sessão. Uma mensagem enviada a uma sessão ociosa inicia um novo turno. Quando há um turno em andamento, a mensagem orienta o agente nesse mesmo turno.

Os turnos são executados de forma assíncrona. Seu aplicativo pode acompanhar o progresso por meio de um fluxo de eventos ou receber notificações de mudanças no estado da sessão por meio de webhooks.

Use automações agendadas para iniciar o trabalho em um horário futuro ou em intervalos regulares. Uma automação pode criar uma sessão a cada execução ou continuar uma conversa existente.

Iniciar o trabalho

Crie uma sessão com a configuração do agente e os dados iniciais em input. Defina stream como true para receber os eventos do primeiro turno na mesma requisição.

Depois de configurar a chave de API e o SDK, execute este exemplo para criar e executar um script. A OpenAI gerencia o ambiente de execução do script.

Criar uma sessão e receber os eventos do primeiro turno em tempo real
from openai import OpenAI

with OpenAI() as client:
    with client.beta.agents.sessions.create(
        agent={
            "model": "gpt-6-astra",
            "instructions": "Write clean code, run it, and report the actual output.",
        },
        environment={"type": "openai_hosted"},
        input="Create tree.py, a Python script that prints a readable tree of the files in the current directory. Run it and show me the output.",
        stream=True,
    ).with_result_collection() as stream:
        for event in stream:
            print(event.to_json(indent=None), flush=True)
        result = stream.get_final_result()
    print(result.output_text)
    session_id = result.session_id

Armazene o session_id junto com o estado da conversa no aplicativo. Use esse identificador para enviar novas mensagens e recuperar o trabalho salvo nessa conversa.

Para ativar a revisão automática de ações, defina review como "auto_review" ao criar uma sessão elegível em um projeto em que a revisão automática já esteja ativada. Você pode alterar essa configuração quando a tarefa principal estiver ociosa e não houver mais envios de dados de entrada pendentes. Consulte Revisão automática para conhecer os modos de revisão, os pré-requisitos do ambiente e como funcionam as aprovações.

Consulte Configuração de agentes para conhecer as configurações reutilizáveis dos agentes e Arquitetura para conhecer as opções de ambiente. Sessões com environment.type: "none" exigem dados de entrada iniciais. A referência de criação de sessões lista os campos da requisição.

Se a sessão usar anexos da API de arquivos, a verificação dos arquivos poderá retornar o código HTTP 429 com o erro files_api_rate_limit_exceeded. Consulte Limites de taxa da API de arquivos para saber como retomar o trabalho.

Tamanho da entrada

O ambiente de execução do agente aceita requisições de até 4 MiB (4.194.304 bytes). Mantenha a soma dos tamanhos de input e do schema de saída (agent.text.format.schema) abaixo desse limite. Reserve espaço para os metadados que a API de agentes adiciona. Os arquivos enviados ao ambiente estão sujeitos a limites próprios.

Acompanhar o progresso e lidar com os resultados

Os eventos informam o que o agente produz e o que muda durante o trabalho. Verifique se o turno foi concluído, falhou ou foi cancelado. O fato de a sessão estar ociosa, por si só, não indica que o turno foi bem-sucedido.

Procure os eventos agent.session.turn.completed, agent.session.turn.failed ou agent.session.turn.cancelled. Examine também a saída do agente. A conclusão do turno não garante que todas as ferramentas tenham sido executadas com sucesso.

Se a sessão precisar do resultado de uma função ou de uma conexão com o ambiente, consulte a sessão e examine required_actions. Para que o trabalho continue, seu código precisa tratar a chamada de função ou conectar o ambiente.

Consulte Eventos e itens para conhecer os tipos de evento e os dados que cada um contém.

Continuar ou orientar o trabalho

Envie outra mensagem agent.session.input.message à mesma sessão. Se o agente estiver trabalhando, a mensagem orientará o agente no turno em andamento. Se a sessão estiver ociosa, a mensagem iniciará um novo turno na conversa existente.

O mesmo limite de tamanho da entrada se aplica às mensagens seguintes.

As atualizações de um agente salvo se aplicam apenas a novas sessões. Para alterar o modelo, o esforço de raciocínio ou o nível de serviço nos próximos turnos desta sessão, atualize as configurações da sessão.

Use o ID da sessão associada à conversa para enviar os dados de entrada. Inscreva-se no fluxo de eventos da sessão antes de enviar a mensagem para que seu aplicativo receba os primeiros eventos do turno.

Crie uma chave de idempotência para cada operação de envio de mensagem. Antes de enviar os dados de entrada, salve a chave junto com a mensagem. Use a chave salva ao enviar a mensagem.

Enviar uma nova mensagem na mesma conversa
from uuid import uuid4


# Reuse the same submission key when retrying this message.
def send_message(
    client: OpenAI, session_id: str, text: str, submission_key: str
) -> None:
    client.beta.agents.sessions.events.create(
        session_id,
        idempotency_key=submission_key,
        events=[
            {
                "type": "agent.session.input.message",
                "input": [
                    {
                        "role": "user",
                        "content": [
                            {
                                "type": "input_text",
                                "text": text,
                            }
                        ],
                    }
                ],
            }
        ],
    )


submission_key = str(uuid4())
# Save this key with the message before submitting it.

Envie a chave no cabeçalho Idempotency-Key e reutilize-a nas tentativas automáticas de reenvio. Se o aplicativo tentar novamente após o tempo limite expirar ou a resposta se perder, use a mesma chave, o mesmo ID de sessão e a mesma mensagem. Gere uma chave diferente para cada operação de envio distinta, mesmo que o texto da mensagem seja idêntico.

Para ver um exemplo que combina o envio de uma mensagem com o recebimento de eventos em tempo real, consulte Eventos e itens.

Recuperar o trabalho salvo

Os eventos mostram o progresso em tempo real. Os itens são registros salvos das mensagens e chamadas de ferramentas, incluindo as respostas concluídas. Recupere os itens para exibir o trabalho anterior ou examinar os resultados após o término de um turno.

Recuperar os itens da sessão
# Pass your saved session ID to this helper.
def list_items(client: OpenAI, session_id: str):
    return client.beta.agents.sessions.items.list(session_id, order="asc", limit=100)

Consulte Gerenciamento de sessões para verificar o estado da sessão e os resultados dos turnos. Para recuperar arquivos, siga as instruções em Arquivos e artefatos.

O fluxo não retransmite eventos perdidos. Se a conexão cair, recupere a sessão e os itens salvos para recuperar o trabalho já realizado. Consulte Recuperar um fluxo após a desconexão para saber como restabelecer a conexão.

Cancelar um turno em andamento

Cancele o turno atual quando quiser que o agente pare. A sessão e o trabalho realizado anteriormente continuam disponíveis.

Cancelar o turno em andamento
# Pass your saved session ID to this helper.
def cancel_turn(client: OpenAI, session_id: str) -> None:
    client.beta.agents.sessions.events.create(
        session_id, events=[{"type": "agent.session.input.cancel"}]
    )