الرئيسية Claude AI مركز التعلم القطاعات تواصل معنا
واتساب اتصل بنا

Claude API للمطورين — الدليل العربي الشامل من الصفر للإنتاج

Claude API للمطورين — الدليل العربي الشامل

كلود API هو بوابتك لدمج أقوى نموذج لغوي في أي تطبيق تبنيه — موقع ويب، تطبيق موبايل، خدمة ويب، أداة أتمتة، أو نظام مؤسسي. الوثائق الرسمية ممتازة لكنها بالإنجليزية، وهذا الدليل يُقدّم كل ما تحتاجه بالعربية مع أمثلة عملية حقيقية قابلة للنسخ والتطبيق الفوري.

من إنشاء مفتاح API أول مرة، إلى التعامل مع الـ Streaming وTool Use والصور والـ Batch Processing — كل شيء في مكان واحد، بترتيب منطقي يُناسب المطور العملي الذي يريد البناء لا القراءة.

الخطوة الأولى: إعداد مفتاح API

1إنشاء الحساب: زُر console.anthropic.com، أنشئ حساباً، تحقق من البريد الإلكتروني.
2إضافة رصيد: في قسم Billing، أضف بطاقة ائتمانية أو ابدأ بالرصيد التجريبي المجاني.
3إنشاء مفتاح API: API Keys ← Create Key ← انسخ المفتاح فوراً — لن تراه مرة ثانية.
4حفظ المفتاح بأمان: في ملف .env في مشروعك: ANTHROPIC_API_KEY=sk-ant-xxx... وأضف .env لملف .gitignore.

تثبيت SDK Python

pip install anthropic python-dotenv

# ملف .env
ANTHROPIC_API_KEY=sk-ant-api03-your-key-here
import anthropic
from dotenv import load_dotenv
import os

load_dotenv()

client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

# أول استدعاء
message = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "مرحباً كلود، ما هو الذكاء الاصطناعي؟"}
    ]
)

print(message.content[0].text)

تثبيت SDK Node.js / TypeScript

npm install @anthropic-ai/sdk dotenv
import Anthropic from '@anthropic-ai/sdk';
import * as dotenv from 'dotenv';

dotenv.config();

const client = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY
});

async function askClaude(question: string): Promise {
  const message = await client.messages.create({
    model: 'claude-sonnet-4-5',
    max_tokens: 1024,
    messages: [
      { role: 'user', content: question }
    ]
  });

  return (message.content[0] as { type: string; text: string }).text;
}

// تشغيل
askClaude("ما هي أبرز قدرات كلود AI؟").then(console.log);

اختيار النموذج المناسب

النموذجالسرعةالجودةالتكلفة نسبياًالاستخدام الأمثل
claude-haiku-4-5سريع جداًجيدمنخفضة جداًالتصنيف، الاستخراج، الردود البسيطة
claude-sonnet-4-5سريعممتازمتوسطةمعظم تطبيقات الإنتاج
claude-opus-4-5أبطأاستثنائيمرتفعةالمهام المعقدة والإبداعية

System Prompt — تشكيل شخصية كلود

System Prompt هو التعليمات الثابتة التي تُحدد دور كلود وأسلوبه وقيوده في تطبيقك. يُرسل مرة واحدة ويُطبّق على كل المحادثة:

message = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=2000,
    system="""أنت مساعد قانوني متخصص في القانون التجاري السعودي.
دورك: مساعدة رواد الأعمال في فهم المتطلبات القانونية.

القواعد الصارمة:
- لا تُقدّم استشارة قانونية ملزمة — أنت مساعد معلوماتي فقط
- انصح دائماً بمراجعة محامٍ معتمد للقرارات الحاسمة
- استند للأنظمة السعودية ذات الصلة (نظام الشركات، نظام العمل...)
- اللغة: عربية فصحى سلسة
- الطول: إجابات مفيدة ومباشرة""",
    messages=[
        {"role": "user", "content": "ما متطلبات تأسيس شركة ذات مسؤولية محدودة في السعودية؟"}
    ]
)

Streaming — الاستجابة الفورية حرفاً بحرف

Streaming يُرسل الإجابة تدريجياً بدلاً من انتظار الإجابة كاملة، مما يُحسّن تجربة المستخدم بشكل جذري:

# Python Streaming
with client.messages.stream(
    model="claude-sonnet-4-5",
    max_tokens=2000,
    messages=[{"role": "user", "content": "اشرح الذكاء الاصطناعي في 500 كلمة"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)  # طباعة حرفاً بحرف
    print()  # سطر جديد في النهاية
// Node.js Streaming مع Express لـ Server-Sent Events
app.get('/stream', async (req, res) => {
  const question = req.query.q as string;

  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');

  const stream = await client.messages.stream({
    model: 'claude-sonnet-4-5',
    max_tokens: 2000,
    messages: [{ role: 'user', content: question }]
  });

  for await (const chunk of stream) {
    if (chunk.type === 'content_block_delta' &&
        chunk.delta.type === 'text_delta') {
      res.write(`data: ${JSON.stringify({text: chunk.delta.text})}\n\n`);
    }
  }

  res.write('data: [DONE]\n\n');
  res.end();
});

Tool Use (Function Calling) — كلود يستدعي الأدوات

Tool Use يُمكّن كلود من استدعاء دوال في كودك — جلب بيانات، تنفيذ عمليات، استدعاء APIs خارجية:

tools = [
    {
        "name": "get_weather",
        "description": "جلب الطقس الحالي لأي مدينة",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "اسم المدينة بالعربية أو الإنجليزية"
                },
                "unit": {
                    "type": "string",
                    "enum": ["celsius", "fahrenheit"],
                    "description": "وحدة الحرارة"
                }
            },
            "required": ["city"]
        }
    },
    {
        "name": "search_database",
        "description": "البحث في قاعدة بيانات المنتجات",
        "input_schema": {
            "type": "object",
            "properties": {
                "query": {"type": "string", "description": "مصطلح البحث"},
                "max_results": {"type": "integer", "description": "عدد النتائج الأقصى"}
            },
            "required": ["query"]
        }
    }
]

# الاستدعاء الأول — كلود يقرر استخدام أداة
response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "ما طقس الرياض الآن؟"}]
)

# معالجة طلب الأداة
if response.stop_reason == "tool_use":
    tool_use = next(b for b in response.content if b.type == "tool_use")
    tool_name = tool_use.name
    tool_input = tool_use.input

    # تنفيذ الدالة الفعلية
    if tool_name == "get_weather":
        result = fetch_weather(tool_input["city"])

    # إرسال النتيجة لكلود
    final_response = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=1024,
        tools=tools,
        messages=[
            {"role": "user", "content": "ما طقس الرياض الآن؟"},
            {"role": "assistant", "content": response.content},
            {
                "role": "user",
                "content": [{
                    "type": "tool_result",
                    "tool_use_id": tool_use.id,
                    "content": str(result)
                }]
            }
        ]
    )
    print(final_response.content[0].text)

Vision — تحليل الصور

كلود يرى الصور ويفهم محتواها — تحليل مخططات، قراءة فواتير، وصف صور المنتجات:

import base64 from pathlib import Path def analyze_image(image_path: str, question: str) -> str: """تحليل صورة محلية بكلود""" # تحويل الصورة لـ Base64 image_data = base64.standard_b64encode( Path(image_path).read_bytes() ).decode("utf-8") # تحديد نوع الصورة ext = Path(image_path).suffix.lower() media_types = {".jpg": "image/jpeg", ".png": "image/png", ".webp": "image/webp"} media_type = media_types.get(ext, "image/jpeg") message = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, messages=[{ "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": media_type, "data": image_data } }, { "type": "text", "text": question } ] }] ) return message.content[0].text # استخدام: تحليل فاتورة result = analyze_image( "invoice.jpg", "استخرج: رقم الفاتورة، التاريخ، المبلغ الإجمالي، اسم المورد. أجب بـ JSON." ) print(result)

Batch Processing — معالجة آلاف الطلبات بتكلفة 50% أقل

Message Batches API مثالي لمعالجة كميات كبيرة من الطلبات غير العاجلة بنصف السعر:

import anthropic

# إنشاء Batch من 1000 طلب
batch_requests = []
for i, text in enumerate(texts_to_classify[:1000]):
    batch_requests.append({
        "custom_id": f"request_{i}",
        "params": {
            "model": "claude-haiku-4-5",
            "max_tokens": 100,
            "messages": [{
                "role": "user",
                "content": f"صنّف هذا النص: {text}\nأجب بكلمة واحدة: إيجابي/سلبي/محايد"
            }]
        }
    })

# إرسال الـ Batch
batch = client.beta.messages.batches.create(requests=batch_requests)
print(f"Batch ID: {batch.id}")

# التحقق من الحالة (قد يستغرق دقائق لساعات)
import time
while True:
    batch_status = client.beta.messages.batches.retrieve(batch.id)
    if batch_status.processing_status == "ended":
        break
    print(f"قيد المعالجة... {batch_status.request_counts}")
    time.sleep(30)

# قراءة النتائج
for result in client.beta.messages.batches.results(batch.id):
    print(f"{result.custom_id}: {result.result.message.content[0].text}")

Prompt Caching — تخفيض التكلفة 90% للسياقات الطويلة

حين تُرسل نفس الوثائق أو System Prompt الطويل مع كل استدعاء، Caching يُخزّنه ويُكلّف 10% فقط في الاستدعاءات التالية:

# لوثيقة طويلة تُستخدم مراراً كسياق
long_document = open("company_manual.txt").read()  # 50,000 كلمة مثلاً

response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "أنت مساعد الشركة. استند لدليل الشركة للإجابة.",
        },
        {
            "type": "text",
            "text": long_document,
            "cache_control": {"type": "ephemeral"}  # تفعيل التخزين المؤقت
        }
    ],
    messages=[{"role": "user", "content": "ما سياسة الإجازات؟"}]
)

# الاستدعاء الثاني يستخدم النسخة المُخزّنة بـ 10% من السعر
print(response.usage)  # cache_read_input_tokens سيكون مرتفعاً

معالجة الأخطاء الشاملة للإنتاج

import anthropic
import time
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def robust_api_call(prompt: str, max_retries: int = 3) -> str:
    """استدعاء API مع معالجة أخطاء كاملة وإعادة المحاولة"""

    client = anthropic.Anthropic()

    for attempt in range(max_retries):
        try:
            message = client.messages.create(
                model="claude-sonnet-4-5",
                max_tokens=2000,
                messages=[{"role": "user", "content": prompt}]
            )
            return message.content[0].text

        except anthropic.RateLimitError as e:
            # تجاوز حد الطلبات — انتظر وأعد المحاولة
            wait_time = 2 ** attempt  # 1, 2, 4 ثوانٍ
            logger.warning(f"Rate limit. انتظار {wait_time} ثانية...")
            time.sleep(wait_time)

        except anthropic.APIConnectionError as e:
            # مشكلة شبكة
            logger.error(f"خطأ اتصال: {e}")
            if attempt == max_retries - 1:
                raise

        except anthropic.AuthenticationError as e:
            # مفتاح API غير صالح
            logger.error("مفتاح API غير صالح. تحقق من ANTHROPIC_API_KEY")
            raise  # لا فائدة من إعادة المحاولة

        except anthropic.BadRequestError as e:
            # طلب غير صالح (برومبت كبير جداً أو محتوى محظور)
            logger.error(f"طلب غير صالح: {e}")
            raise

        except anthropic.APIError as e:
            # خطأ عام في API
            logger.error(f"خطأ API: {e.status_code} - {e.message}")
            if attempt == max_retries - 1:
                raise
            time.sleep(2 ** attempt)

    raise Exception("فشلت جميع المحاولات")

بناء Wrapper خدمة API جاهز للإنتاج

from fastapi import FastAPI, HTTPException, Depends from fastapi.security import HTTPBearer from pydantic import BaseModel import anthropic import os app = FastAPI(title="Claude API Wrapper", version="1.0") security = HTTPBearer() class ChatRequest(BaseModel): message: str system_prompt: str = "أنت مساعد مفيد." model: str = "claude-sonnet-4-5" max_tokens: int = 1000 class ChatResponse(BaseModel): response: str input_tokens: int output_tokens: int model_used: str @app.post("/chat", response_model=ChatResponse) async def chat(request: ChatRequest, token: str = Depends(security)): # التحقق من مفتاح التطبيق الخاص بك if token.credentials != os.environ["APP_SECRET_KEY"]: raise HTTPException(status_code=401, detail="غير مصرّح") client = anthropic.Anthropic() try: message = client.messages.create( model=request.model, max_tokens=request.max_tokens, system=request.system_prompt, messages=[{"role": "user", "content": request.message}] ) return ChatResponse( response=message.content[0].text, input_tokens=message.usage.input_tokens, output_tokens=message.usage.output_tokens, model_used=request.model ) except anthropic.APIError as e: raise HTTPException(status_code=500, detail=str(e))

نصائح تحسين الأداء والتكلفة

1
استخدم Haiku للمهام البسيطة

التصنيف، الاستخراج، الترجمة البسيطة — Haiku يُنجزها بنفس جودة Sonnet وبـ 5% من التكلفة تقريباً. طبّق هذا القرار منهجياً في كل مهمة.

2
حدّد max_tokens بدقة

لا تضبط max_tokens على 4096 دائماً. للردود القصيرة المتوقعة، 300-500 token يكفي. أنت تدفع لكل token مُولَّد فعلاً، لكن التحديد الخاطئ قد يقطع الإجابة.

3
فعّل Prompt Caching للسياقات الثابتة

أي system prompt طويل أو وثائق مرجعية ثابتة تُضيف cache_control: ephemeral. في التطبيقات الكثيفة، يُوفّر هذا 70-90% من تكلفة الـ input tokens.

4
Batch API للطلبات غير العاجلة

لأي مهمة معالجة دُفعية (تحليل مئات المستندات، توليد محتوى بالجملة)، Batches API يُخفّض التكلفة 50% تلقائياً.

5
سجّل استهلاك Tokens

كل استجابة تحتوي usage بعدد input وoutput tokens. سجّلها في قاعدة بيانات لتتبع التكلفة، اكتشاف الطلبات الشاذة، وتحسين الـ prompts.

6
اختبر الـ Prompts تلقائياً

أنشئ مجموعة اختبار من 20-50 حالة مع الإجابات المتوقعة. شغّل الاختبار تلقائياً بعد كل تغيير في الـ System Prompt لضمان عدم الانحدار.

7
استخدم Structured Outputs بـ JSON

حين تحتاج بيانات منظمة، اطلب JSON صريحاً واستخدم Pydantic للتحقق. أجهز دائماً معالجة للحالات التي لا يُنتج فيها كلود JSON صالحاً.

8
راقب الـ Latency

قيّس وقت الاستجابة لكل نوع طلب. Haiku أسرع بمرات من Opus. للتطبيقات التفاعلية، الـ Streaming يُحسّن الإحساس بالسرعة حتى لو كان الوقت الكلي مشابهاً.

الجواهر الخمسة — تطبيقات Claude API المتقدمة

خدمة ترجمة وتكييف محتوى

API wrapper يستقبل محتوى بأي لغة، يترجمه لعربية سلسة بكلود، يُكيّفه ثقافياً للسوق السعودي أو الإماراتي أو المصري، وينشره تلقائياً — خدمة قابلة لبيعها لوكالات المحتوى.

محرك تحليل مشاعر متعدد اللغات

تطبيق يستقبل مراجعات العملاء بأي لغة، يُحللها بكلود، يُصنّفها ويُلخّصها، ويُولّد تقرير اتجاهات أسبوعي — API يُباع كخدمة SaaS لعلامات التجزئة.

مولّد وثائق تقنية تلقائي

يُحلّل الكود المصدري بكلود ويُولّد توثيقاً كاملاً: README، API Reference، أمثلة الاستخدام — يُوفّر ساعات على كل مشروع ويُحسّن جودة التوثيق.

نظام مراجعة العقود الذكي

API يستقبل ملف عقد، يُرسله لكلود للتحليل القانوني، يُحدد البنود الإشكالية والمفقودة، ويُولّد ملخصاً تنفيذياً — يُباع للشركات كخدمة مراجعة أولية قبل المحامي.

محرك توليد اختبارات تعليمية

يستقبل أي محتوى تعليمي ويُولّد اختبارات متنوعة (MCQ، صح وخطأ، مقالي) بمستويات صعوبة مختلفة ومع نماذج إجابة — مثالي للمنصات التعليمية والجامعات.

الأسئلة الشائعة

ما الفرق بين نماذج Haiku وSonnet وOpus في كلود؟
Claude Haiku: الأسرع والأرخص، مناسب للمهام البسيطة والروتينية كالتصنيف والاستخراج والردود القصيرة. Claude Sonnet: التوازن المثالي بين الجودة والسرعة والتكلفة، الخيار الافتراضي لمعظم التطبيقات. Claude Opus: الأقوى والأغلى، للمهام المعقدة التي تحتاج تفكيراً عميقاً وإبداعاً عالياً. استخدم Haiku لـ 80% من المهام ووفّر Opus للـ 20% الحرجة.
كيف يعمل Prompt Caching في كلود وكيف يُخفّض التكلفة؟
Prompt Caching يُخزّن جزءاً ثابتاً من الـ prompt (System Prompt أو وثائق مرجعية) مؤقتاً على خوادم Anthropic. الاستدعاءات التالية التي تستخدم نفس الجزء الثابت تُكلّف 10% فقط من السعر العادي. مثالي لنظام RAG الذي يُرسل نفس الوثائق مع كل سؤال. يُخفّض التكلفة 80-90% في حالات الاستخدام المناسبة.
هل كلود يدعم الصور والملفات عبر API؟
نعم، كلود يدعم الصور بشكل كامل عبر الـ Vision API — يمكن إرسال الصور كـ Base64 أو URL. النماذج المدعومة: Sonnet وOpus. يستطيع تحليل الصور وقراءة النصوص فيها (OCR) وفهم المخططات والرسوم البيانية والإجابة على أسئلة تفصيلية عن محتواها. حداً أقصاه 5 صور لكل رسالة بحجم 5 MB لكل صورة.
كيف أتعامل مع Rate Limiting في API كلود؟
كلود يُعيد خطأ 429 حين تتجاوز الحد المسموح. أفضل ممارسات: استخدم exponential backoff (انتظر ثانية، ثم ثانيتين، ثم أربع عند كل خطأ 429)، خزّن الطلبات في طابور Queue، استخدم Haiku للطلبات الكثيرة (حدوده أعلى)، طلب رفع الحدود من Anthropic للتطبيقات الإنتاجية.
ما أفضل طريقة لحماية مفتاح API كلود في تطبيق إنتاجي؟
المفتاح لا يجب أن يُرى في أي حال من طرف المستخدم أو في كود الـ Frontend. خزّنه في متغيرات البيئة على السيرفر (.env file)، استخدمه في Backend فقط، لا تُلصقه في Git أو ملفات الـ Config. أضف .env لملف .gitignore. في الإنتاج، استخدم نظام أسرار مثل AWS Secrets Manager أو HashiCorp Vault.

🧭 اكتشف المزيد

مواضيع مرتبطة من أقسام أخرى تُكمّل ما تعلمته

محتاج مساعدة احترافية؟

فريق A Plan جاهز يساعدك.

تواصل عبر واتساب