As ferramentas de função permitem que um agente chame o código do seu aplicativo. Você define a função e seus argumentos. O agente solicita a chamada, seu código retorna o resultado e o harness dá continuidade ao turno.
O código que processa a chamada pode ser executado em um servidor de aplicação, em um worker ou em um ambiente que você controla. Vincular um ambiente a uma sessão não faz com que as ferramentas de função sejam executadas automaticamente nesse ambiente.
Se você usa a chamada de função na Responses API, pode reutilizar a implementação da sua função no fluxo de sessão descrito aqui.
Definir uma função
Adicione a definição da função a agent.tools ao configurar o agente. Especifique um nome, uma descrição e um JSON Schema para os argumentos da função.
{
"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
}
}
Processar as ações necessárias
Quando o agente precisa do resultado de uma função, a sessão emite o evento agent.session.requires_action. Consulte as chamadas pendentes em event.session.required_actions. Você também pode recuperar a sessão e consultar session.required_actions sem usar streaming.
Veja um exemplo de entrada de função em required_actions.
{
"type": "function_call",
"turn_id": "turn_123",
"call_id": "call_123",
"name": "get_customer",
"arguments": { "customer_id": "123" }
}
Execute a função indicada com os argumentos fornecidos. Use required_actions para identificar quais chamadas aguardam resultados. A presença de um item function_call no histórico da sessão, por si só, não indica que há um resultado pendente.
Retornar o resultado
Envie agent.session.input.tool_result ao endpoint de eventos da sessão. Copie turn_id e call_id da ação pendente.
- Se a execução for bem-sucedida, defina
success: truee forneçaoutputcomo uma string ou um array de conteúdo em um formato compatível. Serialize os objetos JSON como strings. - Se ocorrer um erro, defina
success: falsee forneça emerroruma mensagem que o agente possa usar.
Para cada chamada pendente de get_customer, consulte os dados do cliente e retorne o resultado. Neste exemplo, action é a 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 },
],
});O harness dá continuidade ao turno após receber os resultados necessários. Acompanhe os eventos e itens da sessão para verificar como o turno terminou e recuperar a saída gerada.
Tamanho do resultado
Se a API rejeitar o resultado de uma ferramenta por ser grande demais, reduza o tamanho para menos de 4 MiB (4.194.304 bytes), deixando uma pequena margem para os metadados da Agents API. Enquanto a chamada estiver pendente, tente enviar o resultado novamente com os mesmos valores de turn_id e call_id.
Retomar após uma desconexão
Recupere a sessão para identificar as ações pendentes. Se você já executou uma função, envie o resultado salvo com os mesmos valores de turn_id e call_id.
Para funções com efeitos colaterais, armazene os resultados de forma persistente usando os IDs da sessão, do turno e da chamada. Se houver a possibilidade de a execução ter sido bem-sucedida, mas nenhum resultado tiver sido salvo, verifique o que aconteceu antes de executar a função novamente.
Carregar funções sob demanda
Por padrão, as funções são carregadas de imediato. Para adiar o carregamento de uma função, defina defer_loading: true na definição da função e inclua { "type": "tool_search" } em agent.tools. Consulte Busca de ferramentas para ver um exemplo completo.