Anthropic (adk-anthropic)

Die adk-anthropic-Crate ist ein dedizierter Anthropic-API-Client für ADK-Rust. Sie bietet direkten Zugriff auf die vollständige Anthropic-Messages-API-Oberfläche, einschließlich Streaming, erweitertem Denken, Prompt-Caching, Zitaten, Vision, PDF-Verarbeitung und Token-Preisen.

Architektur

adk-anthropic ist eine eigenständige Client-Crate, die adk-model über ihren Anthropic-Adapter kapselt. Sie können sie direkt für den Low-Level-API-Zugriff oder über adk-model für das einheitliche Llm-Trait verwenden.

┌─────────────┐     ┌───────────────┐     ┌──────────────┐
│  Your Code  │────▶│   adk-model   │────▶│adk-anthropic │────▶ Anthropic API
│             │     │ (Llm trait)   │     │ (HTTP client)│
└─────────────┘     └───────────────┘     └──────────────┘

Unterstützte Modelle

ModellAPI-IDHinweise
Claude Sonnet 5claude-sonnet-5Ausgewogenes Standardverhältnis von Geschwindigkeit und Intelligenz, 1M-Kontext
Claude Opus 5claude-opus-5Herausragende Fähigkeiten, 1M-Kontext
Claude Fable 5claude-fable-5Hochwertige kreative und umfangreiche Arbeiten, 1M Kontext
Claude Haiku 4.5claude-haiku-4-5Kostengünstige Vorgängergeneration, 200K Kontext

Einrichtung

Legen Sie Ihren API-Schlüssel fest:

export ANTHROPIC_API_KEY=sk-ant-...

Direkte Client-Nutzung

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?;

Über 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"))?;

Benutzerdefinierte Basis-URL (Gateways, Proxys, kompatible Endpunkte)

Richten Sie den Client auf einen anderen Endpunkt, um ihn über einen Unternehmensproxy oder ein mit Messages-API kompatibles Gateway zu leiten. Geben Sie die Basis-URL ohne das Suffix /v1/ an — es wird automatisch angehängt. AnthropicConfig::with_base_url wird über adk-model an den zugrunde liegenden Client weitergeleitet:

use adk_model::anthropic::{AnthropicClient, AnthropicConfig};

let model = AnthropicClient::new(
    AnthropicConfig::new(api_key, "claude-sonnet-5")
        .with_base_url("https://gateway.internal/anthropic"),
)?;

Oder legen Sie sie direkt am Low-Level-Client fest und lesen Sie den tatsächlich verwendeten Endpunkt mit base_url() aus:

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");

Wenn keine Angabe erfolgt, verwendet der Client Anthropic's öffentliches API (https://api.anthropic.com).

with_base_url gibt Result zurück, da der Client den Anthropic-API-Schlüssel an jede Anfrage anhängt. Akzeptiert werden nur https:// oder http:// mit einem Loopback-Host (localhost, 127.0.0.1, [::1]) für die lokale Entwicklung — alles andere wird als Validierungsfehler abgelehnt, anstatt den Schlüssel stillschweigend im Klartext zu senden. Dieselbe Regel gilt für AnthropicConfig::with_base_url, das validiert wird, wenn AnthropicClient::new den zugrunde liegenden Client erstellt.

Hauptfunktionen

Adaptives Denken

Opus 4.7 unterstützt nur adaptives Denken — budget_tokens wird abgelehnt.

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));

Prompt-Caching

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());

Strukturierte Ausgabe

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)));

Token-Preise

use adk_anthropic::pricing::{ModelPricing, estimate_cost};

let cost = estimate_cost(ModelPricing::SONNET_5, &response.usage);
println!("${:.6}", cost.total());

Beispiele

Mit cargo run -p adk-anthropic --example <name> ausführen:

  • basic — nicht-streamender Chat
  • streaming — SSE-Streaming
  • thinking — adaptives und budgetiertes Denken
  • tools — Werkzeugaufrufe
  • structured_output — JSON-Schema
  • caching — Caching über mehrere Gesprächsrunden mit Kosten
  • context_editing — Löschen von Werkzeugen und Denkprozessen (Beta)
  • compaction — serverseitige Komprimierung
  • token_counting — Schätzung der Token vor dem Senden
  • stop_reasons — Umgang mit allen Beendigungsgründen
  • fast_mode — schnelle Inferenz (Beta)
  • citations — Dokumentzitate
  • pdf_processing — PDF-Analyse
  • vision — Bildverständnis