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 5 | claude-sonnet-5 | 기본 속도/지능 균형, 1M 컨텍스트 |
| Claude Opus 5 | claude-opus-5 | 최고급 성능, 1M 컨텍스트 |
| Claude Fable 5 | claude-fable-5 | 프리미엄 창작 및 장문 작업, 1M 컨텍스트 |
| Claude Haiku 4.5 | claude-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_url은
adk-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_url은 Result을 반환합니다. 클라이언트가 모든 요청에 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— 이미지 이해