Un agente es la unidad básica de un flujo de trabajo que usa el SDK. Reúne un modelo y sus instrucciones, y puede incorporar herramientas, mecanismos de protección, servidores MCP, transferencias de control y resultados estructurados para definir cómo se comporta durante la ejecución.
Qué configurar en un agente
Usa la configuración del agente para definir los aspectos propios de ese especialista.
| Propiedad | Para qué sirve | Dónde leer más |
|---|---|---|
name |
Identificar al agente con un nombre legible en las trazas y en las interfaces de herramientas y transferencias de control | Esta página |
instructions |
Definir la tarea, las restricciones y el estilo del agente | Esta página |
prompt |
Usar una configuración de prompt guardada en ejecuciones basadas en la API de Responses | Modelos y proveedores |
model y ajustes del modelo |
Elegir el modelo y ajustar su comportamiento | Modelos y proveedores |
tools |
Definir qué herramientas puede invocar directamente el agente | Uso de herramientas |
handoffDescription |
Indicar cuándo conviene que otro agente delegue una tarea en este especialista | Orquestación y transferencias de control |
handoffs |
Delegar una tarea en otro agente | Orquestación y transferencias de control |
outputType |
Devolver un resultado estructurado en lugar de texto sin formato | Esta página |
| Mecanismos de protección y aprobaciones | Configurar flujos de validación, bloqueo y revisión | Mecanismos de protección y revisión humana |
| Servidores MCP y herramientas MCP alojadas | Incorporar funciones basadas en MCP | Integraciones y observabilidad |
Empieza con un agente especializado
Define el agente más sencillo que pueda encargarse de una tarea concreta. Agrega más agentes solo cuando necesites separar responsabilidades, darles instrucciones distintas o usar diferentes interfaces de herramientas o políticas de aprobación.
import { Agent, tool } from "@openai/agents";
import { z } from "zod";
const getWeather = tool({
name: "get_weather",
description: "Return the weather for a given city.",
parameters: z.object({ city: z.string() }),
async execute({ city }) {
return `The weather in ${city} is sunny.`;
},
});
const agent = new Agent({
name: "Weather bot",
instructions: "You are a helpful weather bot.",
model: "gpt-6-astra",
tools: [getWeather],
});Define las instrucciones, las transferencias de control y los resultados
Presta especial atención a estas tres decisiones de configuración.
- Empieza con instrucciones estáticas en
instructions. Cuando las instrucciones dependan del usuario, del tenant o del contexto de la ejecución en curso, usa una función de callback que genere las instrucciones de forma dinámica en lugar de concatenar cadenas en el punto de llamada. - Escribe una descripción breve y concreta en
para que los agentes que distribuyen las tareas sepan cuándo elegir a este especialista.handoffDescription - Usa
cuando el código que procesa el resultado necesite datos tipados en lugar de texto libre.outputType
import { Agent, run } from "@openai/agents";
import { z } from "zod";
const calendarEvent = z.object({
name: z.string(),
date: z.string(),
participants: z.array(z.string()),
});
const agent = new Agent({
name: "Calendar extractor",
instructions: "Extract calendar events from text.",
outputType: calendarEvent,
});
const result = await run(agent, "Dinner with Priya and Sam on Friday.");
console.log(result.finalOutput);Usa prompt cuando quieras hacer referencia a una configuración de prompt guardada en la API de Responses en lugar de incluir todo el prompt del sistema en el código.
Separa el contexto local del contexto del modelo
El SDK te permite pasar el estado y las dependencias de la aplicación a una ejecución sin enviarlos al modelo. Usa el contexto local para pasar información del usuario autenticado, clientes de bases de datos, componentes de registro y funciones auxiliares.
import { Agent, run, tool } from "@openai/agents";
import { z } from "zod";
const fetchUserAge = tool({
name: "fetch_user_age",
description: "Return the age of the current user.",
parameters: z.object({}),
// TypeScript users can type this as RunContext<{ name: string; uid: number }>.
async execute(_args, runContext) {
return `User ${runContext?.context.name} is 47 years old`;
},
});
const agent = new Agent({
name: "Assistant",
tools: [fetchUserAge],
});
const result = await run(agent, "What is the age of the user?", {
context: { name: "John", uid: 123 },
});
console.log(result.finalOutput);Ten presente a qué información tiene acceso cada uno.
- El modelo ve el historial de la conversación.
- Tu código ve el contexto de la ejecución.
Si el modelo necesita un dato, inclúyelo en las instrucciones o en la entrada, o haz que esté disponible mediante la recuperación de información o una herramienta. Si solo lo necesita el entorno de ejecución, mantenlo en el contexto local.
Cuándo dividir un agente en varios
Divide un agente cuando un solo especialista no deba encargarse de toda la respuesta o cuando las funciones que cumple sean muy distintas entre sí. Estos son algunos motivos habituales.
- Un especialista necesita una interfaz de herramientas o de MCP diferente.
- Un especialista necesita una política de aprobación o un mecanismo de protección diferente.
- Una rama del flujo de trabajo necesita otro modelo u otro estilo de respuesta.
- Quieres que las trazas muestren explícitamente cómo se asignan las tareas en lugar de usar un solo prompt extenso.
Próximos pasos
Una vez que hayas definido bien al primer especialista, consulta la guía que responda a tu siguiente pregunta de diseño.
Elige los modelos, los valores predeterminados y la estrategia de transporte de este agente.
Agrega funciones que el agente pueda invocar directamente.
Decide cómo colaborarán los especialistas cuando un solo agente ya no sea suficiente.
Conoce el ciclo de ejecución, el estado y cómo funciona la transmisión de datos en tiempo real.