Anthropic (adk-anthropic)

توفر حزمة adk-anthropic عميلاً مخصصًا لـ Anthropic API من أجل ADK-Rust. وتتيح وصولًا مباشرًا إلى كامل سطح API الخاص برسائل Anthropic، بما في ذلك البث، والتفكير الممتد، والتخزين المؤقت للمطالبات، والاستشهادات، والرؤية، ومعالجة PDF، وتسعير الرموز.

البنية

إن adk-anthropic هي حزمة عميل مستقلة تقوم adk-model بتغليفها عبر محوّل Anthropic الخاص بها. يمكنك استخدامها مباشرةً للوصول منخفض المستوى إلى API، أو من خلال adk-model للاستفادة من سمة Llm الموحدة.

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

النماذج المدعومة

النموذجAPI المعرّفالملاحظات
Claude Sonnet 5claude-sonnet-5توازن افتراضي بين السرعة والذكاء، سياق بسعة مليون رمز
Claude Opus 5claude-opus-5قدرات رائدة، سياق بسعة مليون رمز
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_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");

عند عدم التعيين، يستخدم العميل API العام الخاص بـ Anthropic (https://api.anthropic.com).

يعيد with_base_url القيمة Result لأن العميل يرفق مفتاح API الخاص بـ Anthropic بكل طلب. لا يُقبل سوى 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 — تقدير الرموز قبل الإرسال
  • stop_reasons — التعامل مع جميع أسباب التوقف
  • fast_mode — استدلال سريع (تجريبي)
  • citations — استشهادات المستندات
  • pdf_processing — تحليل PDF
  • vision — فهم الصور