Manejar llamadas a herramientas
Analiza bloques tool_use, formatea respuestas tool_result y maneja errores con is_error.
Esta página cubre el ciclo de vida de las llamadas a herramientas: leer bloques tool_use de la respuesta de Claude, formatear bloques tool_result en tu respuesta y señalar errores. Para la abstracción del SDK que maneja esto automáticamente, consulta Tool Runner.
La respuesta de Claude difiere según si usa una herramienta de cliente o de servidor.
Manejo de resultados de herramientas de cliente
La respuesta tendrá un stop_reason de tool_use y uno o más bloques de contenido tool_use que incluyen:
id: Un identificador único para este bloque de uso de herramientas en particular. Se usará para hacer coincidir los resultados de la herramienta más adelante.name: El nombre de la herramienta que se está usando.input: Un objeto que contiene la entrada que se pasa a la herramienta, conforme alinput_schemade la herramienta.
Un bloque tool_use para un miembro del conjunto de herramientas de uso de computadora o uso de navegador también lleva un campo toolset_name ("computer" o "browser"). Su name es la herramienta miembro que Claude está llamando, como screenshot o navigate, así que despacha esos bloques según ambos campos.
{
"id": "msg_01Aq9w938a90dw8q",
"model": "claude-opus-5",
"stop_reason": "tool_use",
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll check the current weather in San Francisco for you."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": { "location": "San Francisco, CA", "unit": "celsius" }
}
]
}Cuando recibas una respuesta de uso de herramientas para una herramienta de cliente, debes:
- Extraer el
name,ideinputdel bloquetool_use. - Ejecutar la herramienta real en tu base de código correspondiente a ese nombre de herramienta, pasándole el
inputde la herramienta. - Continuar la conversación enviando un nuevo mensaje con el
roledeusery un bloquecontentque contenga el tipotool_resulty la siguiente información:tool_use_id: Elidde la solicitud de uso de herramientas para la cual este es un resultado.content(opcional): El resultado de la herramienta, como una cadena (por ejemplo,"content": "15 degrees"), una lista de bloques de contenido anidados (por ejemplo,"content": [{"type": "text", "text": "15 degrees"}]) o una lista de bloques de documento (por ejemplo,"content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}]). Estos bloques de contenido pueden usar los tipostext,image,documentosearch_result.is_error(opcional): Establécelo entruesi la ejecución de la herramienta resultó en un error.
Un tool_result que responde a un bloque miembro de uso de computadora o uso de navegador también debe repetir el mismo valor de toolset_name que el bloque tool_use; un resultado de miembro que lo omita es rechazado. Su content también es más restringido: un resultado de miembro puede contener solo bloques text e image, y un resultado de uso de navegador puede agregar un bloque browser_state (los miembros de gestión de pestañas devuelven solo ese bloque).
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "15 degrees"
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": [
{ "type": "text", "text": "15 degrees" },
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQSkZJRg..."
}
}
]
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9"
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": [
{ "type": "text", "text": "The weather is" },
{
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": "15 degrees"
}
}
]
}
]
}Después de recibir el resultado de la herramienta, Claude usará esa información para continuar generando una respuesta al prompt original del usuario.
Manejo de resultados de herramientas de servidor
Claude ejecuta la herramienta internamente e incorpora los resultados directamente en su respuesta sin requerir interacción adicional del usuario.
Manejo de errores con is_error
Hay algunos tipos diferentes de errores que pueden ocurrir al usar herramientas con Claude:
Si la herramienta misma lanza un error durante la ejecución (por ejemplo, un error de red al obtener datos del clima), puedes devolver el mensaje de error en el content junto con "is_error": true:
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "ConnectionError: the weather service API is not available (HTTP 500)",
"is_error": true
}
]
}Claude entonces incorporará este error en su respuesta al usuario. Por ejemplo: "Lo siento, no pude obtener el clima actual porque la API del servicio meteorológico no está disponible. Por favor, inténtalo de nuevo más tarde."
Si el intento de Claude de usar una herramienta es inválido (por ejemplo, faltan parámetros requeridos), generalmente significa que no había suficiente información para que Claude usara la herramienta correctamente. Tu mejor opción durante el desarrollo es intentar la solicitud de nuevo con valores de description más detallados en tus definiciones de herramientas.
Sin embargo, también puedes continuar la conversación con un tool_result que indique el error, y Claude intentará usar la herramienta de nuevo con la información faltante completada:
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "Error: Missing required 'location' parameter",
"is_error": true
}
]
}Si una solicitud de herramienta es inválida o le faltan parámetros, Claude reintentará 2-3 veces con correcciones antes de disculparse con el usuario.
Cuando las herramientas de servidor encuentran errores (por ejemplo, problemas de red con Web Search), Claude manejará estos errores de forma transparente e intentará proporcionar una respuesta alternativa o una explicación al usuario. A diferencia de las herramientas de cliente, no necesitas manejar resultados is_error para las herramientas de servidor.
Para la búsqueda web específicamente, los posibles códigos de error incluyen:
too_many_requests: Límite de velocidad excedidoinvalid_input: Parámetro de consulta de búsqueda inválidomax_uses_exceeded: Se excedió el máximo de usos de la herramienta de búsqueda webquery_too_long: La consulta excede la longitud máximaunavailable: Ocurrió un error interno
Próximos pasos
Maneja respuestas donde Claude llama a varias herramientas en un solo turno.
Deja que el SDK gestione el bucle de tool_use, el formato de resultados y los reintentos por ti.
Escribe esquemas y descripciones que guíen a Claude hacia la herramienta correcta.
Was this page helpful?