Anthropic (adk-anthropic)
La crate adk-anthropic est un client Anthropic API dédié pour ADK-Rust. Elle fournit un accès direct à l’ensemble de la surface de l’API Anthropic Messages, notamment le streaming, la réflexion approfondie, la mise en cache des prompts, les citations, la vision, le traitement PDF et la tarification des tokens.
Architecture
adk-anthropic est une crate cliente autonome que adk-model encapsule via son adaptateur Anthropic. Vous pouvez l’utiliser directement pour accéder aux API de bas niveau, ou via adk-model pour le trait Llm unifié.
┌─────────────┐ ┌───────────────┐ ┌──────────────┐
│ Your Code │────▶│ adk-model │────▶│adk-anthropic │────▶ Anthropic API
│ │ │ (Llm trait) │ │ (HTTP client)│
└─────────────┘ └───────────────┘ └──────────────┘
Modèles pris en charge
| Modèle | API ID | Remarques |
|---|---|---|
| Claude Sonnet 5 | claude-sonnet-5 | Équilibre par défaut entre rapidité et intelligence, contexte de 1M |
| Claude Opus 5 | claude-opus-5 | Performances phares, contexte de 1M |
| Claude Fable 5 | claude-fable-5 | Travaux créatifs et longs de qualité supérieure, contexte de 1M |
| Claude Haiku 4.5 | claude-haiku-4-5 | Génération précédente économique, contexte de 200K |
Configuration
Définissez votre clé API :
export ANTHROPIC_API_KEY=sk-ant-...
Utilisation directe du client
use adk_anthropic::{Anthropic, MessageCreateParams, Model};
let client = Anthropic::new(None)?; // reads ANTHROPIC_API_KEY
let params = MessageCreateParams::simple("Hello!", Model::claude_sonnet_5());
let response = client.send(params).await?;
Via adk-model
use adk_model::anthropic::{AnthropicClient, AnthropicConfig};
let api_key = std::env::var("ANTHROPIC_API_KEY")?;
let model = AnthropicClient::new(AnthropicConfig::new(api_key, "claude-sonnet-5"))?;
URL de base personnalisé (passerelles, proxies, points de terminaison compatibles)
Pointez le client vers un autre point de terminaison afin de passer par un proxy d’entreprise ou une passerelle compatible avec Messages-API. Fournissez l’URL racine sans le suffixe /v1/ — celui-ci est ajouté automatiquement. AnthropicConfig::with_base_url passe par
adk-model vers le client sous-jacent :
use adk_model::anthropic::{AnthropicClient, AnthropicConfig};
let model = AnthropicClient::new(
AnthropicConfig::new(api_key, "claude-sonnet-5")
.with_base_url("https://gateway.internal/anthropic"),
)?;
Vous pouvez également le définir directement sur le client de bas niveau et relire le point de terminaison effectif avec base_url() :
use adk_anthropic::Anthropic;
let client = Anthropic::new(Some(api_key))?
.with_base_url("https://api.minimax.io/anthropic".to_string())?;
assert_eq!(client.base_url(), "https://api.minimax.io/anthropic");
Lorsqu’il n’est pas défini, le client utilise l’API public d’Anthropic (https://api.anthropic.com).
with_base_url renvoie Result, car le client joint la clé API Anthropic à chaque requête. Seuls https://, ou http:// avec un hôte de bouclage
(localhost, 127.0.0.1, [::1]) pour le développement local, sont acceptés — toute autre valeur est rejetée comme une erreur de validation au lieu d’envoyer silencieusement la clé en clair. La même règle s’applique à AnthropicConfig::with_base_url, qui est validé lorsque AnthropicClient::new construit le client sous-jacent.
Fonctionnalités principales
Réflexion adaptative
Opus 4.7 prend en charge uniquement la réflexion adaptative — budget_tokens est rejeté.
use adk_anthropic::{
EffortLevel, KnownModel, MessageCreateParams, Model, OutputConfig, ThinkingConfig,
};
// Opus 4.7: use xhigh effort (recommended for coding/agentic)
let mut params = MessageCreateParams::simple("Solve this...", KnownModel::ClaudeOpus47)
.with_thinking(ThinkingConfig::adaptive());
params.output_config = Some(OutputConfig::with_effort(EffortLevel::XHigh));
// Sonnet 5: balanced default for agentic workloads
let mut params = MessageCreateParams::simple("Solve this...", Model::claude_sonnet_5())
.with_thinking(ThinkingConfig::adaptive());
params.output_config = Some(OutputConfig::with_effort(EffortLevel::High));
Mise en cache des prompts
use adk_anthropic::{CacheControlEphemeral, MessageCreateParams, Model};
let mut params = MessageCreateParams::simple("Question", Model::claude_sonnet_5())
.with_system("Large system prompt...");
params.cache_control = Some(CacheControlEphemeral::new());
Sortie structurée
use adk_anthropic::{MessageCreateParams, Model, OutputConfig, OutputFormat};
let mut params = MessageCreateParams::simple("Extract data", Model::claude_sonnet_5());
params.output_config = Some(OutputConfig::new(OutputFormat::json_schema(schema)));
Tarification des jetons
use adk_anthropic::pricing::{ModelPricing, estimate_cost};
let cost = estimate_cost(ModelPricing::SONNET_5, &response.usage);
println!("${:.6}", cost.total());
Exemples
Exécutez avec cargo run -p adk-anthropic --example <name> :
basic— chat sans fluxstreaming— flux SSEthinking— réflexion adaptative + budgettools— appels d’outilsstructured_output— schéma JSONcaching— mise en cache multi-tours avec coûtscontext_editing— effacement des outils et de la réflexion (bêta)compaction— compactage côté serveurtoken_counting— estimation préalable des jetonsstop_reasons— gestion de toutes les raisons d’arrêtfast_mode— inférence rapide (bêta)citations— citations de documentspdf_processing— analyse PDFvision— compréhension des images