Uso de herramientas eficiente en tokens
A partir de Claude Sonnet 3.7, Claude es capaz de llamar herramientas de manera eficiente en tokens. Las solicitudes ahorran un promedio del 14% en tokens de salida, hasta el 70%, lo que también reduce la latencia. La reducción exacta de tokens y las mejoras de latencia dependen de la forma y el tamaño general de la respuesta.
El uso de herramientas eficiente en tokens es una característica beta que solo funciona con Claude 3.7 Sonnet. Para usar esta característica beta, agregue el encabezado beta token-efficient-tools-2025-02-19 a una solicitud de uso de herramientas. Este encabezado no tiene efecto en otros modelos de Claude.
Todos los modelos Claude 4 admiten el uso de herramientas eficiente en tokens de forma predeterminada. No se necesita encabezado beta.
El uso de herramientas eficiente en tokens actualmente no funciona con disable_parallel_tool_use.
Aquí hay un ejemplo de cómo usar herramientas eficientes en tokens con la API en Claude Sonnet 3.7:
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: token-efficient-tools-2025-02-19" \
-d '{
"model": "claude-3-7-sonnet-20250219",
"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"
}
},
"required": [
"location"
]
}
}
],
"messages": [
{
"role": "user",
"content": "Tell me the weather in San Francisco."
}
]
}' | jq '.usage'import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
max_tokens=1024,
model="claude-3-7-sonnet-20250219",
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"
]
}
}],
messages=[{
"role": "user",
"content": "Tell me the weather in San Francisco."
}],
betas=["token-efficient-tools-2025-02-19"]
)
print(response.usage)import Anthropic from '@anthropic-ai/sdk';
const anthropic = new Anthropic();
const message = await anthropic.beta.messages.create({
model: "claude-3-7-sonnet-20250219",
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"
}
},
required: ["location"]
}
}],
messages: [{
role: "user",
content: "Tell me the weather in San Francisco."
}],
betas: ["token-efficient-tools-2025-02-19"]
});
console.log(message.usage);import java.util.List;
import java.util.Map;
import com.anthropic.client.AnthropicClient;
import com.anthropic.client.okhttp.AnthropicOkHttpClient;
import com.anthropic.core.JsonValue;
import com.anthropic.models.beta.messages.BetaMessage;
import com.anthropic.models.beta.messages.BetaTool;
import com.anthropic.models.beta.messages.MessageCreateParams;
import static com.anthropic.models.beta.AnthropicBeta.TOKEN_EFFICIENT_TOOLS_2025_02_19;
public class TokenEfficientToolsExample {
public static void main(String[] args) {
AnthropicClient client = AnthropicOkHttpClient.fromEnv();
BetaTool.InputSchema schema = BetaTool.InputSchema.builder()
.properties(JsonValue.from(Map.of(
"location",
Map.of(
"type", "string",
"description", "The city and state, e.g. San Francisco, CA"
)
)))
.putAdditionalProperty("required", JsonValue.from(List.of("location")))
.build();
MessageCreateParams params = MessageCreateParams.builder()
.model("claude-3-7-sonnet-20250219")
.maxTokens(1024)
.betas(List.of(TOKEN_EFFICIENT_TOOLS_2025_02_19))
.addTool(BetaTool.builder()
.name("get_weather")
.description("Get the current weather in a given location")
.inputSchema(schema)
.build())
.addUserMessage("Tell me the weather in San Francisco.")
.build();
BetaMessage message = client.beta().messages().create(params);
System.out.println(message.usage());
}
}La solicitud anterior debe, en promedio, usar menos tokens de entrada y salida que una solicitud normal. Para confirmar esto, intente hacer la misma solicitud pero elimine token-efficient-tools-2025-02-19 de la lista de encabezados beta.
Para mantener los beneficios del almacenamiento en caché de indicaciones, use el encabezado beta de manera consistente para las solicitudes que desea almacenar en caché. Si lo usa de manera selectiva, el almacenamiento en caché de indicaciones fallará.