Usa el modelo Claude Opus (4.8) más reciente para herramientas complejas y consultas ambiguas; maneja mejor múltiples herramientas y busca aclaraciones cuando es necesario.
Usa los modelos Claude Haiku para herramientas sencillas, pero ten en cuenta que pueden inferir parámetros faltantes.
Si usas Claude con uso de herramientas y pensamiento extendido, consulta la guía de pensamiento extendido para obtener más información.
Las herramientas del cliente (tanto las de esquema de Anthropic como las definidas por el usuario) se especifican en el parámetro de nivel superior tools de la solicitud a la API. Cada definición de herramienta incluye:
| Parámetro | Descripción |
|---|---|
name | El nombre de la herramienta. Debe coincidir con la expresión regular ^[a-zA-Z0-9_-]{1,64}$. |
description | Una descripción detallada en texto plano de lo que hace la herramienta, cuándo debe usarse y cómo se comporta. |
input_schema | Un objeto JSON Schema que define los parámetros esperados para la herramienta. |
input_examples | (Opcional) Un arreglo de objetos de entrada de ejemplo para ayudar a Claude a entender cómo usar la herramienta. Consulta Proporcionar ejemplos de uso de herramientas. |
Para ver el conjunto completo de propiedades opcionales disponibles en cualquier definición de herramienta, incluyendo cache_control, strict, defer_loading y allowed_callers, consulta la Referencia de herramientas.
Cuando llamas a la API de Claude con el parámetro tools, la API construye una indicación del sistema especial a partir de las definiciones de herramientas, la configuración de herramientas y cualquier indicación del sistema especificada por el usuario. La indicación construida está diseñada para instruir al modelo a usar las herramientas especificadas y proporcionar el contexto necesario para que la herramienta funcione correctamente:
In this environment you have access to a set of tools you can use to answer the user's question.
{{ FORMATTING INSTRUCTIONS }}
String and scalar parameters should be specified as is, while lists and objects should use JSON format. Note that spaces for string values are not stripped. The output is not expected to be valid XML and is parsed with regular expressions.
Here are the functions available in JSONSchema format:
{{ TOOL DEFINITIONS IN JSON SCHEMA }}
{{ USER SYSTEM PROMPT }}
{{ TOOL CONFIGURATION }}Para obtener el mejor rendimiento de Claude al usar herramientas, sigue estas pautas:
input_examples para herramientas complejas. Las descripciones claras son lo más importante, pero para herramientas con entradas complejas, objetos anidados o parámetros sensibles al formato, puedes usar el campo input_examples para proporcionar ejemplos validados por el esquema. Consulta Proporcionar ejemplos de uso de herramientas para más detalles.create_pr, review_pr, merge_pr), agrúpalas en una sola herramienta con un parámetro action. Menos herramientas, pero más capaces, reducen la ambigüedad en la selección y hacen que tu conjunto de herramientas sea más fácil de navegar para Claude.github_list_prs, slack_send_message). Esto hace que la selección de herramientas sea inequívoca a medida que tu biblioteca crece, y es especialmente importante cuando usas la búsqueda de herramientas.La buena descripción explica claramente qué hace la herramienta, cuándo usarla, qué datos devuelve y qué significa el parámetro ticker. La descripción deficiente es demasiado breve y deja a Claude con muchas preguntas abiertas sobre el comportamiento y uso de la herramienta.
Para obtener orientación más profunda sobre el diseño de herramientas (consolidación, nomenclatura y estructuración de respuestas), consulta Writing tools for agents.
Puedes proporcionar ejemplos concretos de entradas válidas de herramientas para ayudar a Claude a entender cómo usar tus herramientas de manera más efectiva. Esto es particularmente útil para herramientas complejas con objetos anidados, parámetros opcionales o entradas sensibles al formato.
Agrega un campo opcional input_examples a tu definición de herramienta con un arreglo de objetos de entrada de ejemplo. Cada ejemplo debe ser válido según el input_schema de la herramienta:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
tools=[
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature",
},
},
"required": ["location"],
},
"input_examples": [
{"location": "San Francisco, CA", "unit": "fahrenheit"},
{"location": "Tokyo, Japan", "unit": "celsius"},
{
"location": "New York, NY" # 'unit' is optional
},
],
}
],
messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
)
print(response)Los ejemplos se incluyen en el prompt junto con el esquema de tu herramienta, mostrando a Claude patrones concretos para llamadas de herramientas bien formadas. Esto ayuda a Claude a entender cuándo incluir parámetros opcionales, qué formatos usar y cómo estructurar entradas complejas.
input_schema de la herramienta. Los ejemplos no válidos devuelven un error 400En algunos casos, es posible que quieras que Claude use una herramienta específica para responder la pregunta del usuario, incluso si Claude de otro modo respondería directamente sin llamar a una herramienta. Puedes hacer esto especificando la herramienta en el campo tool_choice de la solicitud. Las líneas resaltadas son la única diferencia respecto a una solicitud estándar de uso de herramientas:
import anthropic
client = anthropic.Anthropic()
tools = [
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"],
},
}
]
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
tools=tools,
tool_choice={"type": "tool", "name": "get_weather"},
messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
)
print(response)Al trabajar con el parámetro tool_choice, hay cuatro opciones posibles:
auto permite que Claude decida si llamar o no a alguna de las herramientas proporcionadas. Este es el valor predeterminado cuando se proporcionan tools.any le indica a Claude que debe usar una de las herramientas proporcionadas, pero no fuerza una herramienta en particular.tool fuerza a Claude a usar siempre una herramienta en particular.none impide que Claude use cualquier herramienta. Este es el valor predeterminado cuando no se proporcionan tools.Al usar el almacenamiento en caché de prompts, los cambios en el parámetro tool_choice invalidarán los bloques de mensajes en caché. Las definiciones de herramientas y las indicaciones del sistema permanecen en caché, pero el contenido de los mensajes debe reprocesarse.
Este diagrama ilustra cómo funciona cada opción:

Ten en cuenta que cuando tienes tool_choice como any o tool, la API prellena el mensaje del asistente para forzar el uso de una herramienta. Esto significa que los modelos no emitirán una respuesta o explicación en lenguaje natural antes de los bloques de contenido tool_use, incluso si se les pide explícitamente que lo hagan.
Al usar pensamiento extendido con uso de herramientas, tool_choice: {"type": "any"} y tool_choice: {"type": "tool", "name": "..."} no son compatibles y resultarán en un error. Solo tool_choice: {"type": "auto"} (el valor predeterminado) y tool_choice: {"type": "none"} son compatibles con el pensamiento extendido.
Claude Mythos Preview no admite el uso forzado de herramientas. Las solicitudes con tool_choice: {"type": "any"} o tool_choice: {"type": "tool", "name": "..."} devuelven un error 400 en este modelo. Usa tool_choice: {"type": "auto"} (el valor predeterminado) o tool_choice: {"type": "none"} y confía en el prompting para influir en la selección de herramientas.
Las pruebas han demostrado que esto no debería reducir el rendimiento. Si deseas que el modelo proporcione contexto o explicaciones en lenguaje natural mientras sigues solicitando que el modelo use una herramienta específica, puedes usar {"type": "auto"} para tool_choice (el valor predeterminado) y agregar instrucciones explícitas en un mensaje de user. Por ejemplo: What's the weather like in London? Use the get_weather tool in your response.
Llamadas de herramientas garantizadas con herramientas estrictas
Combina tool_choice: {"type": "any"} con el uso estricto de herramientas para garantizar tanto que se llamará a una de tus herramientas COMO que las entradas de la herramienta sigan estrictamente tu esquema. Establece strict: true en tus definiciones de herramientas para habilitar la validación de esquema.
Al usar herramientas, Claude a menudo comentará lo que está haciendo o responderá de forma natural al usuario antes de invocar herramientas.
Por ejemplo, dado el prompt "What's the weather like in San Francisco right now, and what time is it there?", Claude podría responder con:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll help you check the current weather and time in San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": { "location": "San Francisco, CA" }
}
]
}Este estilo de respuesta natural ayuda a los usuarios a entender qué está haciendo Claude y crea una interacción más conversacional. Puedes guiar el estilo y el contenido de estas respuestas a través de tus indicaciones del sistema y proporcionando <examples> en tus prompts.
Es importante tener en cuenta que Claude puede usar diversas formulaciones y enfoques al explicar sus acciones. Tu código debe tratar estas respuestas como cualquier otro texto generado por el asistente, y no depender de convenciones de formato específicas.
Analiza bloques tool_use y da formato a respuestas tool_result.
Deja que el SDK maneje el bucle agéntico automáticamente.
Directorio de herramientas proporcionadas por Anthropic y propiedades opcionales.
Was this page helpful?