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èleAPI IDRemarques
Claude Sonnet 5claude-sonnet-5Équilibre par défaut entre rapidité et intelligence, contexte de 1M
Claude Opus 5claude-opus-5Performances phares, contexte de 1M
Claude Fable 5claude-fable-5Travaux créatifs et longs de qualité supérieure, contexte de 1M
Claude Haiku 4.5claude-haiku-4-5Gé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 flux
  • streaming — flux SSE
  • thinking — réflexion adaptative + budget
  • tools — appels d’outils
  • structured_output — schéma JSON
  • caching — mise en cache multi-tours avec coûts
  • context_editing — effacement des outils et de la réflexion (bêta)
  • compaction — compactage côté serveur
  • token_counting — estimation préalable des jetons
  • stop_reasons — gestion de toutes les raisons d’arrêt
  • fast_mode — inférence rapide (bêta)
  • citations — citations de documents
  • pdf_processing — analyse PDF
  • vision — compréhension des images