Anthropic (adk-anthropic)
El crate adk-anthropic es un cliente dedicado de Anthropic API para ADK-Rust. Proporciona acceso directo a toda la superficie de Anthropic Messages API, incluido el streaming, el razonamiento extendido, la caché de prompts, las citas, la visión, el procesamiento de PDF y los precios de tokens.
Arquitectura
adk-anthropic es un crate de cliente independiente que adk-model integra mediante su adaptador de Anthropic. Puedes usarlo directamente para acceder a API de bajo nivel o a través de adk-model para el trait Llm unificado.
┌─────────────┐ ┌───────────────┐ ┌──────────────┐
│ Your Code │────▶│ adk-model │────▶│adk-anthropic │────▶ Anthropic API
│ │ │ (Llm trait) │ │ (HTTP client)│
└─────────────┘ └───────────────┘ └──────────────┘
Modelos compatibles
| Modelo | API ID | Notas |
|---|---|---|
| Claude Sonnet 5 | claude-sonnet-5 | Equilibrio predeterminado entre velocidad e inteligencia, contexto de 1 M |
| Claude Opus 5 | claude-opus-5 | Capacidad insignia, contexto de 1 M |
| Claude Fable 5 | claude-fable-5 | Trabajo creativo y extensivo de alta calidad, contexto de 1M |
| Claude Haiku 4.5 | claude-haiku-4-5 | Generación anterior rentable, contexto de 200K |
Configuración
Establece tu clave de API:
export ANTHROPIC_API_KEY=sk-ant-...
Uso directo del cliente
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?;
A través de 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 base personalizada (gateways, proxies, endpoints compatibles)
Dirige el cliente a un endpoint diferente para enrutarlo a través de un proxy corporativo o
un gateway compatible con Messages-API. Proporciona la URL raíz sin el sufijo
/v1/; este se añade automáticamente. AnthropicConfig::with_base_url fluye
a través de adk-model hasta el cliente subyacente:
use adk_model::anthropic::{AnthropicClient, AnthropicConfig};
let model = AnthropicClient::new(
AnthropicConfig::new(api_key, "claude-sonnet-5")
.with_base_url("https://gateway.internal/anthropic"),
)?;
O establécelo directamente en el cliente de bajo nivel y consulta el endpoint efectivo
con 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");
Cuando no se establece, el cliente utiliza la API pública de Anthropic (https://api.anthropic.com).
with_base_url devuelve Result porque el cliente adjunta la clave de API de Anthropic
a cada solicitud. Solo se acepta https:// o http:// con un host de loopback
(localhost, 127.0.0.1, [::1]) para el desarrollo local; cualquier otra opción
se rechaza como un error de validación en lugar de enviar silenciosamente la clave en
texto plano. La misma regla se aplica a AnthropicConfig::with_base_url, que se
valida cuando AnthropicClient::new construye el cliente subyacente.
Características principales
Pensamiento adaptativo
Opus 4.7 solo admite el pensamiento adaptativo; budget_tokens se rechaza.
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));
Almacenamiento en caché de 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());
Salida estructurada
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)));
Precios de tokens
use adk_anthropic::pricing::{ModelPricing, estimate_cost};
let cost = estimate_cost(ModelPricing::SONNET_5, &response.usage);
println!("${:.6}", cost.total());
Ejemplos
Ejecuta con cargo run -p adk-anthropic --example <name>:
basic— chat sin transmisiónstreaming— transmisión de SSEthinking— pensamiento adaptativo + con presupuestotools— llamadas de herramientasstructured_output— esquema de JSONcaching— almacenamiento en caché de múltiples turnos con costescontext_editing— limpieza de herramientas/pensamiento (beta)compaction— compactación del lado del servidortoken_counting— estimación de tokens antes del envíostop_reasons— gestión de todos los motivos de detenciónfast_mode— inferencia rápida (beta)citations— citas de documentospdf_processing— análisis de PDFvision— comprensión de imágenes