صيغة 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)// npm install @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.CLOUDZIR_API_KEY,
baseURL: "https://api.cloudzir.com/anthropic",
});
const message = await 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." }],
});
console.log(message.content[0].text);curl https://api.cloudzir.com/anthropic/v1/messages \
-H "x-api-key: $CLOUDZIR_API_KEY" \
-H "content-type: application/json" \
-d '{
"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."}]
}'نماذج 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. |
تتشارك الواجهتان نفس المفتاح، ونفس المحفظة، ونفس الأسعار، ونفس الحدود.