For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegación principal
Theme

Iniciar y continuar sesiones

Inicia el trabajo, sigue el progreso y continúa la conversación.

Una sesión conserva la configuración del agente, la conversación y el trabajo guardado a lo largo del tiempo. Usa la misma sesión para enviar mensajes de seguimiento y continuar el trabajo.

Sesiones y turnos

Un turno es un ciclo de trabajo dentro de una sesión. Si envías un mensaje a una sesión inactiva, se inicia un nuevo turno. Si lo envías durante un turno activo, el mensaje guía al agente durante ese turno.

Los turnos se ejecutan de forma asíncrona. Tu aplicación puede seguir el progreso mediante una transmisión de eventos o recibir notificaciones de los cambios de estado de la sesión mediante webhooks.

Usa automatizaciones programadas para iniciar el trabajo en un momento futuro o a intervalos regulares. Una automatización puede crear una sesión nueva en cada ejecución o continuar una conversación existente.

Iniciar el trabajo

Crea una sesión con la configuración del agente y una entrada inicial en input. Establece stream en true para recibir los eventos del primer turno en la misma solicitud.

Una vez que configures tu clave de API y el SDK, ejecuta este ejemplo para crear y ejecutar un script. OpenAI administra el entorno en el que se ejecuta.

Crear una sesión y recibir los eventos del primer turno en tiempo 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

Guarda el session_id junto con el estado de la conversación en tu aplicación. Úsalo para enviar mensajes de seguimiento y recuperar el trabajo guardado de esa conversación.

Para activar la revisión automática de acciones, establece review en "auto_review" al crear una sesión que cumpla los requisitos en un proyecto que tenga habilitada la revisión automática. Puedes cambiar este ajuste cuando la tarea principal esté inactiva y ya no haya envíos de datos de entrada en curso. Consulta Revisión automática para conocer los modos de revisión, los requisitos previos del entorno y cómo funcionan las aprobaciones.

Consulta Configuración de agentes para conocer los ajustes reutilizables de los agentes y Arquitectura para conocer las opciones de entorno. Las sesiones con environment.type: "none" requieren una entrada inicial. La referencia de creación de sesiones enumera los campos de la solicitud.

Si la sesión usa archivos adjuntos de la API de archivos, la verificación de los archivos puede devolver el código HTTP 429 con files_api_rate_limit_exceeded. Consulta Límites de solicitudes de la API de archivos para saber cómo recuperarte del error.

Tamaño de la entrada

El entorno de ejecución del agente acepta solicitudes de hasta 4 MiB (4 194 304 bytes). Mantén el tamaño combinado de input y del esquema de salida (agent.text.format.schema) por debajo de ese límite. Deja espacio para los metadatos que agrega la API de agentes. Los archivos que subes al entorno están sujetos a límites de archivos independientes.

Seguir el progreso y gestionar los resultados

Los eventos muestran la salida del agente y los cambios que se producen mientras trabaja. Comprueba si el turno se completó, falló o se canceló. El hecho de que la sesión esté inactiva no basta para saber si el turno se completó correctamente.

Busca agent.session.turn.completed, agent.session.turn.failed o agent.session.turn.cancelled. Revisa también la salida del agente. Que el turno se haya completado no garantiza que todas las herramientas se hayan ejecutado correctamente.

Si la sesión necesita el resultado de una función o una conexión con el entorno, recupera la sesión y revisa required_actions. Tu código debe gestionar la llamada a la función o conectar el entorno para que el trabajo pueda continuar.

Consulta Eventos y elementos para conocer los tipos de eventos y los datos que contiene cada uno.

Continuar o guiar el trabajo

Envía otro agent.session.input.message a la misma sesión. Si el agente está trabajando, el mensaje lo guía durante el turno activo. Si la sesión está inactiva, el mensaje inicia un nuevo turno en la conversación existente.

El mismo límite de tamaño de la entrada se aplica a los mensajes de seguimiento.

Los cambios en un agente guardado solo se aplican a las sesiones nuevas. Para cambiar el modelo, el esfuerzo de razonamiento o el nivel de servicio en los turnos posteriores de esta sesión, actualiza la configuración de la sesión.

Usa el ID de sesión de la conversación para enviar la entrada. Suscríbete a su flujo de eventos antes de enviar el mensaje para que tu aplicación reciba los primeros eventos del turno.

Crea una clave de idempotencia para cada envío lógico de un mensaje. Guárdala junto con el mensaje antes de enviar la entrada. Usa la clave guardada al enviar el mensaje.

Enviar un mensaje de seguimiento
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.

Envía la clave en el encabezado Idempotency-Key y reutilízala en los reintentos automáticos. Si tu aplicación vuelve a intentarlo porque se agotó el tiempo de espera o se perdió la respuesta, usa la misma clave, el mismo ID de sesión y el mismo mensaje. Genera una clave diferente para cada envío independiente, incluso si el texto del mensaje es idéntico.

Para ver un ejemplo que combina el envío de un mensaje con la recepción de eventos en tiempo real, consulta Eventos y elementos.

Recuperar el trabajo guardado

Los eventos muestran el progreso en tiempo real. Los elementos son los mensajes y las llamadas a herramientas que se guardaron, incluidas las respuestas completas. Recupéralos para mostrar el trabajo anterior o revisar los resultados cuando termine un turno.

Recuperar los elementos de la sesión
# 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)

Consulta Gestión de sesiones para revisar el estado de la sesión y los resultados de los turnos. Para recuperar archivos, sigue las instrucciones de Archivos y artefactos.

Los flujos de eventos no vuelven a transmitir los eventos que tu aplicación no recibió. Si se interrumpe la conexión, recupera el trabajo consultando la sesión y sus elementos guardados. Consulta Recuperar un flujo de eventos tras una desconexión para saber cómo volver a conectarte.

Cancelar un turno activo

Cancela el turno actual cuando quieras que el agente se detenga. La sesión y el trabajo anterior siguen disponibles.

Cancelar el turno activo
# 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"}]
    )