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

Ejecución de agentes

Conoce el ciclo del agente, las estrategias de continuación y la transmisión en tiempo real.

Definir un agente es solo el primer paso. Al ejecutarlo, necesitas saber qué ocurre en cada ejecución, cómo continúa la conversación en el siguiente turno y qué sucede cuando el flujo de trabajo se pausa en espera de una aprobación o del resultado de una herramienta.

El ciclo del agente

Cada ejecución del SDK corresponde a un turno de la aplicación. El ejecutor repite este ciclo hasta que se cumple una condición de parada:

  1. Llama al modelo del agente actual con la entrada preparada.
  2. Examina la salida del modelo.
  3. Si el modelo generó llamadas a herramientas, las ejecuta y continúa.
  4. Si el modelo transfirió el control a otro especialista, cambia de agente y continúa.
  5. Si el modelo generó una respuesta final y no quedan llamadas a herramientas por ejecutar, devuelve un resultado.

Este ciclo es la base del SDK. Las herramientas, las transferencias entre agentes, las aprobaciones y la transmisión en tiempo real se apoyan en él sin sustituirlo.

Elige una estrategia para la conversación

Hay cuatro formas habituales de conservar el estado de un turno al siguiente:

Estrategia Dónde se guarda el estado Cuándo conviene usarla Qué pasas en el siguiente turno
result.history En tu aplicación Para ciclos de chat pequeños en los que quieres el máximo control El historial listo para volver a enviarlo
session En tu almacenamiento, con ayuda del SDK Para conservar el estado del chat, reanudar ejecuciones y controlar el almacenamiento La misma sesión
conversationId En la API de Conversations de OpenAI Para que varios procesos de trabajo o servicios compartan el estado que administra el servidor El mismo ID de conversación y solo el turno nuevo
previousResponseId En la API de Responses de OpenAI Para continuar de una respuesta a la siguiente con la opción más ligera que ofrece el servidor El ID de la última respuesta y solo el turno nuevo

En la mayoría de las aplicaciones, elige una sola estrategia por conversación. Si vuelves a enviar el historial local y a la vez usas el estado que administra el servidor, puedes duplicar el contexto, a menos que concilies explícitamente ambas capas.

Conserva el estado entre turnos con sesiones
import { Agent, MemorySession, run } from "@openai/agents";

const agent = new Agent({
  name: "Tour guide",
  instructions: "Answer with compact travel facts.",
});

const session = new MemorySession();

const firstTurn = await run(agent, "What city is the Golden Gate Bridge in?", {
  session,
});
console.log(firstTurn.finalOutput);

const secondTurn = await run(agent, "What state is it in?", { session });
console.log(secondTurn.finalOutput);

Las sesiones son la mejor opción predeterminada si necesitas memoria persistente, flujos de aprobación que puedas reanudar o almacenamiento que controle tu aplicación.

Continúa con el estado que administra el servidor
import { Agent, run } from "@openai/agents";
import OpenAI from "openai";

const agent = new Agent({
  name: "Assistant",
  instructions: "Reply very concisely.",
});

const client = new OpenAI();
const { id: conversationId } = await client.conversations.create({});

const first = await run(agent, "What city is the Golden Gate Bridge in?", {
  conversationId,
});
console.log(first.finalOutput);

const second = await run(agent, "What state is it in?", {
  conversationId,
});
console.log(second.finalOutput);

Usa conversationId cuando varios sistemas deban compartir una misma conversación con nombre. Usa previousResponseId si quieres la opción de menor costo para continuar de una respuesta a la siguiente.

Recibe eventos a medida que avanza la ejecución

La transmisión en tiempo real usa el mismo ciclo del agente y las mismas estrategias para conservar el estado. La única diferencia es que consumes los eventos mientras la ejecución sigue en curso.

Recibe el texto de la ejecución a medida que llega
import { Agent, run } from "@openai/agents";

const agent = new Agent({
  name: "Planet guide",
  instructions: "Answer with short facts.",
});

const stream = await run(agent, "Give me three short facts about Saturn.", {
  stream: true,
});

for await (const event of stream) {
  if (
    event.type === "raw_model_stream_event" &&
    event.data.type === "output_text_delta"
  ) {
    process.stdout.write(event.data.delta);
  }
}

await stream.completed;
console.log("\nFinal:", stream.finalOutput);

Ten en cuenta estas tres reglas:

  • Espera a que termine la transmisión antes de dar por concluida la ejecución.
  • Si la ejecución se pausa para solicitar aprobación, resuelve interruptions y reanuda la ejecución desde state en lugar de iniciar un nuevo turno de usuario.
  • Si cancelas la transmisión a mitad de un turno y quieres continuarlo más adelante, reanuda el turno pendiente desde state.

Gestiona las pausas y los errores

Cuando la ejecución se aparta de su curso habitual, distingue entre dos tipos de situaciones:

  • Errores de ejecución o de validación, por ejemplo, cuando se alcanza el límite de turnos, un mecanismo de protección genera una excepción o falla una herramienta.
  • Pausas previstas, como las solicitudes de aprobación humana, en las que la ejecución se interrumpe de forma intencional y debe reanudarse más adelante desde el mismo estado.

Trata las solicitudes de aprobación como pausas en la ejecución, sin iniciar turnos nuevos. Así mantienes la coherencia entre el recuento de turnos, el historial y los ID de continuación que administra el servidor.

Próximos pasos

Una vez que entiendas el ciclo de ejecución, consulta la guía que corresponda al siguiente aspecto del flujo de trabajo que necesites diseñar.