Utilisation efficace des outils en termes de jetons
À partir de Claude Sonnet 3.7, Claude est capable d'appeler des outils de manière efficace en termes de jetons. Les demandes économisent en moyenne 14 % des jetons de sortie, jusqu'à 70 %, ce qui réduit également la latence. La réduction exacte des jetons et les améliorations de latence dépendent de la forme et de la taille globales de la réponse.
L'utilisation efficace des outils en termes de jetons est une fonctionnalité bêta qui ne fonctionne qu'avec Claude 3.7 Sonnet. Pour utiliser cette fonctionnalité bêta, ajoutez l'en-tête bêta token-efficient-tools-2025-02-19 à une demande d'utilisation d'outils. Cet en-tête n'a aucun effet sur les autres modèles Claude.
Tous les modèles Claude 4 supportent l'utilisation efficace des outils en termes de jetons par défaut. Aucun en-tête bêta n'est nécessaire.
L'utilisation efficace des outils en termes de jetons ne fonctionne actuellement pas avec disable_parallel_tool_use.
Voici un exemple de la façon d'utiliser des outils efficaces en termes de jetons avec l'API dans 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 demande ci-dessus devrait, en moyenne, utiliser moins de jetons d'entrée et de sortie qu'une demande normale. Pour confirmer cela, essayez de faire la même demande mais supprimez token-efficient-tools-2025-02-19 de la liste des en-têtes bêta.
Pour conserver les avantages de la mise en cache des invites, utilisez l'en-tête bêta de manière cohérente pour les demandes que vous souhaitez mettre en cache. Si vous l'utilisez de manière sélective, la mise en cache des invites échouera.