Anthropic (adk-anthropic)
adk-anthropic crate 是专用的 Anthropic API 客户端,适用于 ADK-Rust。它可直接访问完整的 Anthropic Messages API 接口,包括流式传输、扩展思考、提示缓存、引用、视觉、PDF 处理和令牌定价。
架构
adk-anthropic 是一个独立的客户端 crate,adk-model 通过其 Anthropic 适配器进行封装。你可以直接使用它来进行低级别的 API 访问,也可以通过 adk-model 使用统一的 Llm trait。
┌─────────────┐ ┌───────────────┐ ┌──────────────┐
│ Your Code │────▶│ adk-model │────▶│adk-anthropic │────▶ Anthropic API
│ │ │ (Llm trait) │ │ (HTTP client)│
└─────────────┘ └───────────────┘ └──────────────┘
支持的模型
| 模型 | API 标识符 | 备注 |
|---|---|---|
| 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://,或在本地开发中使用具有环回主机的 http://
(localhost、127.0.0.1、[::1])——其他任何情况都会被拒绝并报告验证错误,
而不是静默地以明文发送密钥。同样的规则也适用于 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— 发送前 token 估算stop_reasons— 处理所有停止原因fast_mode— 快速推理(测试版)citations— 文档引用pdf_processing— PDF 分析vision— 图像理解