Las herramientas de función permiten que un agente llame al código de tu aplicación. Tú defines la función y sus argumentos. El agente solicita una llamada, tu código devuelve un resultado y el arnés de ejecución continúa el turno.
Tu manejador puede ejecutarse en un servidor de aplicaciones, un worker o un entorno que controles. Asociar un entorno a una sesión no hace que las herramientas de función se ejecuten automáticamente allí.
Si usas llamadas a funciones en la API Responses, puedes reutilizar la implementación de tu función con el flujo de sesión que se describe aquí.
Define una función
Agrega una definición de función a agent.tools cuando configures el agente. Asígnale un nombre, una descripción y un esquema JSON Schema para sus argumentos:
{
"type": "function",
"name": "get_customer",
"description": "Look up a customer by ID.",
"parameters": {
"type": "object",
"properties": { "customer_id": { "type": "string" } },
"required": ["customer_id"],
"additionalProperties": false
}
}
Maneja las acciones requeridas
Cuando el agente necesita el resultado de una función, la sesión emite agent.session.requires_action. Lee las llamadas pendientes en event.session.required_actions. También puedes recuperar la sesión y leer session.required_actions sin transmisión continua.
Una entrada de función en required_actions tiene este aspecto:
{
"type": "function_call",
"turn_id": "turn_123",
"call_id": "call_123",
"name": "get_customer",
"arguments": { "customer_id": "123" }
}
Ejecuta la función indicada con los argumentos proporcionados. Usa required_actions para determinar qué llamadas necesitan resultados; un elemento function_call en el historial de la sesión no basta por sí solo para establecer que hay un resultado pendiente.
Devuelve el resultado
Envía agent.session.input.tool_result al punto de acceso de eventos de la sesión. Copia turn_id y call_id de la acción pendiente:
- Si la ejecución tiene éxito, establece
success: truey proporcionaoutputcomo una cadena o un arreglo de contenido compatible. Serializa los objetos JSON como cadenas. - Si ocurre un error, establece
success: falsey proporciona enerrorun mensaje que el agente pueda usar.
Para cada llamada pendiente a get_customer, realiza tu consulta y devuelve su resultado. Aquí, action es la entrada de required_actions:
const result = {
turn_id: action.turn_id,
call_id: action.call_id,
};
let outcome;
outcome = {
success: true,
output: JSON.stringify(getCustomer(action.arguments)),
};
await client.beta.agents.sessions.events.create(sessionId, {
events: [
{ type: "agent.session.input.tool_result", ...result, ...outcome },
],
});El arnés de ejecución continúa el turno después de recibir los resultados requeridos. Sigue los eventos y elementos de la sesión para comprobar el resultado del turno y recuperar su salida.
Recupérate de una desconexión
Recupera la sesión para encontrar las acciones pendientes. Si ya ejecutaste una función, envía su resultado guardado con los mismos valores de turn_id y call_id.
Para las funciones con efectos secundarios, almacena los resultados de forma persistente por sesión, turno e ID de llamada. Si la ejecución pudo haber tenido éxito, pero no se guardó ningún resultado, comprueba qué ocurrió antes de volver a ejecutar la función.
Carga funciones bajo demanda
De forma predeterminada, las funciones se cargan por adelantado. Para diferir la carga de una función, establece defer_loading: true en su definición e incluye { "type": "tool_search" } en agent.tools. Consulta Búsqueda de herramientas para ver un ejemplo completo.