صيغة Anthropic

تعرض CloudZIR واجهة ثانية بصيغة Anthropic Messages. حزمة SDK anthropic، وClaude Code، وكل الأدوات المكتوبة لهذه الصيغة تعمل دون أي تعديل : عنوان القاعدة فقط يتغير.

الإعداد#

المعاملالقيمة
عنوان القاعدةhttps://api.cloudzir.com/anthropic
نقطة النهايةPOST /v1/messages
المصادقةx-api-key: zir_ai_… أو Authorization: Bearer zir_ai_…
# pip install anthropic
import anthropic

client = anthropic.Anthropic(
    api_key="zir_ai_...",
    base_url="https://api.cloudzir.com/anthropic",
)

message = client.messages.create(
    model="mina-full",
    max_tokens=1024,
    system="Tu es un assistant utile, en français.",
    messages=[{"role": "user", "content": "Explique la différence entre TCP et UDP."}],
)

print(message.content[0].text)
print(message.usage.input_tokens, message.usage.output_tokens)

نماذج Mina المتاحة#

اختاروا معرّف Mina : mina-flash، mina-low أو mina-full. تُعيد GET /anthropic/v1/models قائمة النماذج المفعّلة لمفتاحكم.

الحقول المدعومة#

الحقلالحالةالتفاصيل
modelمدعومإلزامي؛ معرّف Mina تعرضه GET /anthropic/v1/models.
max_tokensمدعومإلزامي (كما عند Anthropic). محدود بأقصى إخراج للنموذج.
messagesمدعومكتل text، tool_use، tool_result.
systemمدعومسلسلة نصية أو قائمة كتل text.
temperature، top_pمدعومان-
stop_sequencesمدعوم4 سلاسل كحد أقصى.
streamمدعومأحداث SSE كاملة (انظروا أدناه).
tools، tool_choiceمدعومانauto، any، tool، none.
metadata.user_idمدعومعزل حدود المعدل.
thinkingمدعوميفعّل/يعطّل الاستدلال؛ يُترجَم budget_tokens إلى مستوى جهد (التفاصيل).
cache_controlمقبول، دون أثرالتخزين المؤقت تلقائي.
top_k، anthropic-version، mcp_servers، containerمُتجاهَلةدون أثر، دون خطأ.
كتل imageمدعومةمصدر base64 أو url؛ الرؤية.
كتل thinkingمدعومةتُعاد في الاستجابة؛ مقبولة في الإدخال (الجولة السابقة).
كتل documentمرفوضة400 صريح: استخرجوا النص أو أرسلوا صورة.

الأدوات#

message = client.messages.create(
    model="mina-full",
    max_tokens=1024,
    tools=[{
        "name": "stock_produit",
        "description": "Stock disponible d'un produit.",
        "input_schema": {
            "type": "object",
            "properties": {"reference": {"type": "string"}},
            "required": ["reference"],
        },
    }],
    messages=[{"role": "user", "content": "كم تبقى من DEMO-001؟"}],
)

if message.stop_reason == "tool_use":
    bloc = next(b for b in message.content if b.type == "tool_use")
    resultat = stock_produit(**bloc.input)
    suite = client.messages.create(
        model="mina-full",
        max_tokens=1024,
        messages=[
            {"role": "user", "content": "كم تبقى من DEMO-001؟"},
            {"role": "assistant", "content": message.content},
            {"role": "user", "content": [{
                "type": "tool_result",
                "tool_use_id": bloc.id,
                "content": str(resultat),
            }]},
        ],
    )

البث المباشر#

يتبع تسلسل الأحداث مواصفات Anthropic :

event: message_start        → enveloppe du message (id, modèle, usage initial)
event: content_block_start  → début d'un bloc (text ou tool_use)
event: content_block_delta  → text_delta / input_json_delta
event: content_block_stop   → fin du bloc
event: message_delta        → stop_reason + usage.output_tokens
event: message_stop         → fin
event: ping                 → maintien de connexion pendant l'attente
with client.messages.stream(
    model="mina-low",
    max_tokens=512,
    messages=[{"role": "user", "content": "Compte de 1 à 10."}],
) as flux:
    for texte in flux.text_stream:
        print(texte, end="", flush=True)

الأخطاء#

صيغة الخطأ هي صيغة Anthropic :

{"type": "error", "error": {"type": "rate_limit_error", "message": "Limite de débit atteinte…"}}

المطابقة الكاملة : أكواد الأخطاء. الأنواع المُعادة هي invalid_request_error، authentication_error، permission_error، not_found_error، rate_limit_error، api_error، overloaded_error.

أي واجهة تختارون؟#

الحالةالواجهة
مشروع جديد/v1 (OpenAI)، النظام أوسع.
شيفرة موجودة مكتوبة لـClaude/anthropic، إعادة كتابة صفرية.
Claude Code، وكلاء Anthropic/anthropic.

تتشارك الواجهتان نفس المفتاح، ونفس المحفظة، ونفس الأسعار، ونفس الحدود.

الإعدادات

استجابة API