Anthropic (adk-anthropic)

adk-anthropic 크레이트는 ADK-Rust를 위한 전용 Anthropic API 클라이언트입니다. 스트리밍, 확장된 사고, 프롬프트 캐싱, 인용, 비전, PDF 처리 및 토큰 가격 책정을 포함하여 전체 Anthropic Messages API 표면에 직접 액세스할 수 있습니다.

아키텍처

adk-anthropic은 독립형 클라이언트 크레이트로, adk-model가 Anthropic 어댑터를 통해 래핑합니다. 이를 직접 사용하여 저수준 API에 액세스하거나, adk-model을 통해 통합 Llm 트레이트를 사용할 수 있습니다.

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

지원 모델

모델API ID참고
Claude Sonnet 5claude-sonnet-5기본 속도/지능 균형, 1M 컨텍스트
Claude Opus 5claude-opus-5최고급 성능, 1M 컨텍스트
Claude Fable 5claude-fable-5프리미엄 창작 및 장문 작업, 1M 컨텍스트
Claude Haiku 4.5claude-haiku-4-5비용 효율적인 이전 세대, 200K 컨텍스트

설정

API 키를 설정합니다.

export ANTHROPIC_API_KEY=sk-ant-...

직접 클라이언트 사용

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

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 (게이트웨이, 프록시, 호환 엔드포인트)

클라이언트가 다른 엔드포인트를 가리키도록 설정하여 기업용 프록시 또는 Messages-API 호환 게이트웨이를 통해 라우팅합니다. 루트 URL을 /v1/ 접미사 없이 제공합니다. 해당 접미사는 자동으로 추가됩니다. AnthropicConfig::with_base_urladk-model을 통해 기본 클라이언트로 전달됩니다.

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

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

또는 하위 수준 클라이언트에 직접 설정하고 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");

설정하지 않으면 클라이언트는 Anthropic의 공개 API(https://api.anthropic.com)을 사용합니다.

with_base_urlResult을 반환합니다. 클라이언트가 모든 요청에 Anthropic API 키를 첨부하기 때문입니다. https://만 허용되며, 로컬 개발의 경우 루프백 호스트 (localhost, 127.0.0.1, [::1])를 사용하는 http://도 허용됩니다. 그 외의 경우에는 키를 평문으로 묵묵히 전송하지 않고 유효성 검사 오류로 거부됩니다. 동일한 규칙이 AnthropicConfig::with_base_url에도 적용되며, AnthropicClient::new가 기본 클라이언트를 빌드할 때 유효성이 검사됩니다.

주요 기능

적응형 사고

Opus 4.7은 적응형 사고만 지원하며 budget_tokens은 거부됩니다.

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

프롬프트 캐싱

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

구조화된 출력

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

토큰 가격

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

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

예제

cargo run -p adk-anthropic --example <name>로 실행합니다:

  • basic — 비스트리밍 채팅
  • streaming — SSE 스트리밍
  • thinking — 적응형 + 예산 기반 사고
  • tools — 도구 호출
  • structured_output — JSON 스키마
  • caching — 비용이 포함된 다중 턴 캐싱
  • context_editing — 도구/사고 지우기(베타)
  • compaction — 서버 측 압축
  • token_counting — 전송 전 토큰 추정
  • stop_reasons — 모든 중지 이유 처리
  • fast_mode — 빠른 추론(베타)
  • citations — 문서 인용
  • pdf_processing — PDF 분석
  • vision — 이미지 이해