حل الأسباب الجذرية الثلاثة لانقطاع استخدام نموذج Claude في OpenCode وخطوات إصلاحها

"لماذا ينقطع اتصالي بنموذج Claude باستمرار عند استخدامه في OpenCode؟" — هذا هو السؤال الأكثر إزعاجاً للمطورين الذين يستخدمون OpenCode (الذي تغير اسمه الآن إلى Crush) للوصول إلى نماذج Claude. والسبب الجوهري بسيط للغاية: يستخدم OpenCode حزمة تطوير البرمجيات (SDK) الأصلية الخاصة بـ Anthropic لاستدعاء Claude، بينما تدعم العديد من خدمات وكيل API التابعة لجهات خارجية تنسيق OpenAI المتوافق فقط، مما يؤدي إلى عدم تطابق التنسيقات وبالتالي حدوث أخطاء متكررة وانقطاع في الاتصال.

القيمة الأساسية: بعد قراءة هذا المقال، ستفهم البنية التحتية الأساسية لاستدعاء Claude عبر OpenCode، والأسباب الثلاثة الشائعة للانقطاع، والحل الكامل من خلال واجهة التنسيق الأصلية لـ Anthropic المقدمة من APIYI.

opencode-claude-model-disconnect-fix-anthropic-native-api-apiyi-guide-ar 图示

ما هو OpenCode: من OpenCode إلى Crush

OpenCode هو مساعد برمجة يعمل بالذكاء الاصطناعي عبر سطر الأوامر (Terminal) مبني بلغة Go، ويستخدم إطار عمل Bubble Tea لتقديم واجهة مستخدم طرفية (TUI) أنيقة. حصد المشروع أكثر من 11,600 نجمة على GitHub، ثم استحوذ عليه فريق Charm وأعادوا تسميته إلى Crush (charmbracelet/crush، مع أكثر من 22,200 نجمة).

معلومات المشروع التفاصيل
الاسم الأصلي OpenCode (opencode-ai/opencode)
الاسم الحالي Crush (charmbracelet/crush)
لغة البرمجة Go
الواجهة TUI (Bubble Tea)
نجوم GitHub 22,200+ (Crush)
مزودو الذكاء الاصطناعي المدعومون Anthropic, OpenAI, Gemini, Groq, OpenRouter, xAI, Bedrock, Azure
نظام الأدوات عمليات الملفات, Bash, Grep, Glob, LSP, MCP
رخصة المصدر المفتوح MIT

الاختلافات الجوهرية بين OpenCode و Claude Code و Aider

الميزة OpenCode/Crush Claude Code Aider
دعم مزودين متعددين SDK أصلي لأكثر من 7 مزودين Anthropic فقط مزودون متعددون
تنسيق API التنسيق الأصلي لكل مزود Anthropic أصلي متوافق بشكل أساسي مع OpenAI
طريقة استدعاء Claude Anthropic SDK أصلي Anthropic SDK أصلي تنسيق متوافق مع OpenAI
التفكير الممتد (Extended Thinking) تفعيل مشروط (يتضمن كلمة "think") دعم مدمج يعتمد على النموذج
دعم MCP مدعوم مدعوم غير مدعوم
واجهة المستخدم واجهة رسومية TUI CLI + TUI CLI فقط

اختلاف رئيسي: يستخدم OpenCode حزمة SDK أصلية لكل مزود ذكاء اصطناعي، ولا يعتمد فقط على التنسيق المتوافق مع OpenAI. وهذا يعني أنه عند استدعاء Claude، فإنه يستخدم واجهة برمجة تطبيقات Anthropic الأصلية (/v1/messages)، وليس واجهة Chat Completions الخاصة بـ OpenAI (/v1/chat/completions).

🎯 تلميح جوهري: هذا هو أصل المشكلة؛ إذا كانت خدمة وكيل API الخاصة بك توفر فقط واجهة /v1/chat/completions، فلن يتمكن SDK الخاص بـ Anthropic في OpenCode من إجراء الاستدعاء بشكل صحيح. توفر خدمة APIYI (apiyi.com) دعمًا لكل من التنسيق المتوافق مع OpenAI وتنسيق Anthropic الأصلي، مما يحل هذه المشكلة تمامًا.

الأسباب الثلاثة الجذرية لانقطاع Claude المتكرر في OpenCode

opencode-claude-model-disconnect-fix-anthropic-native-api-apiyi-guide-ar 图示

السبب الأول: عدم تطابق تنسيق API (الأكثر شيوعًا)

هذا هو أصل المشكلة التي يواجهها 90% من المستخدمين.

مسار استدعاء Claude في OpenCode:

OpenCode → Anthropic Go SDK → POST /v1/messages
                                ↑ يستخدم تنسيق Anthropic الأصلي

الواجهة التي توفرها العديد من خدمات الوكيل:

خدمة الوكيل → تدعم فقط POST /v1/chat/completions
                      ↑ تنسيق متوافق مع OpenAI

هيكل الطلب بين التنسيقين مختلف تمامًا:

وجه المقارنة Anthropic الأصلي (/v1/messages) متوافق مع OpenAI (/v1/chat/completions)
نقطة النهاية /v1/messages /v1/chat/completions
ترويسة المصادقة x-api-key: sk-ant-xxx Authorization: Bearer sk-xxx
تنسيق الرسائل messages: [{role, content: [{type, text}]}] messages: [{role, content: "text"}]
توجيه النظام system: "..." (حقل في المستوى الأعلى) messages: [{role: "system", content: "..."}]
استدعاء الأدوات نوع tool_use / tool_result تنسيق function_call / tool_calls
الاستجابة المتدفقة message_start, content_block_delta data: {"choices": [...]}
التفكير الممتد دعم أصلي لـ thinking block غير مدعوم أو يتطلب معالجة خاصة

عندما يرسل OpenCode طلبًا بتنسيق Anthropic إلى نقطة نهاية تدعم تنسيق OpenAI فقط، لا يستطيع الخادم تحليل الطلب، مما يؤدي إلى إرجاع خطأ أو قطع الاتصال.

السبب الثاني: انقطاع البث (Streaming)

يستخدم OpenCode دالة Messages.NewStreaming() من حزمة Anthropic SDK للحصول على استجابة متدفقة. تسلسل الأحداث أثناء البث هو:

ContentBlockStartEvent → ContentBlockDeltaEvent (متعدد) → ContentBlockStopEvent → MessageStopEvent

إذا كان دعم خدمة الوكيل لتنسيق البث الخاص بـ Anthropic غير مكتمل (على سبيل المثال، عدم إرجاع حدث thinking_delta، أو عدم صحة تنسيق content_block_stop)، فسيؤدي ذلك إلى فشل تحليل الأحداث في OpenCode وانقطاع الاتصال.

منطق إعادة المحاولة في OpenCode يغطي فقط أخطاء HTTP 429 (تجاوز الحد) و 529 (الحمل الزائد)، أما رموز الخطأ الأخرى فتؤدي إلى إنهاء العملية فورًا دون إعادة محاولة. وهذا يعني أن استجابات 400/500 الناتجة عن خطأ في التنسيق ستفشل فورًا.

السبب الثالث: اختلاف تنسيق التفكير الممتد واستدعاء الأدوات

لدى OpenCode منطق معالجة خاص للتفكير الممتد (Extended Thinking) في Claude:

  • يتم تفعيله تلقائيًا عندما تحتوي رسالة المستخدم على كلمة "think".
  • عند التفعيل، يتم تخصيص 80% من maxTokens كميزانية للتفكير.
  • يتم فرض درجة الحرارة (Temperature) لتكون 1.0.

إذا كانت خدمة الوكيل لا تدعم تنسيق thinking block الأصلي الخاص بـ Anthropic، فسيتم فقدان محتوى التفكير أو حدوث خطأ في التحليل. وبالمثل، فإن تنسيق tool_use / tool_result الأصلي لـ Anthropic يختلف تمامًا عن تنسيق function_call / tool_calls الخاص بـ OpenAI.

الحل: استخدام واجهة برمجة تطبيقات (API) تدعم تنسيق Anthropic الأصلي

opencode-claude-model-disconnect-fix-anthropic-native-api-apiyi-guide-ar 图示

بنية دعم التنسيق المزدوج في APIYI

تدعم خدمة APIYI (apiyi.com) تنسيقي API في وقت واحد، مما يتيح للمطورين الاختيار بناءً على متطلبات أدواتهم:

التنسيق نقطة النهاية للطلب الأدوات المدعومة اكتمال الوظائف
Anthropic الأصلي https://api.apiyi.com/v1/messages OpenCode/Crush, Claude Code كامل بنسبة 100%
متوافق مع OpenAI https://api.apiyi.com/v1/chat/completions Aider, Cursor, التطبيقات الخاصة الوظائف الأساسية

الخيار الأول: تكوين تنسيق Anthropic الأصلي في OpenCode (موصى به)

نظرًا لأن مزود Anthropic في OpenCode لا يكشف مباشرة عن خيار تكوين Base URL، يجب تعيينه عبر متغيرات البيئة:

# تعيين مفتاح API لـ Anthropic (استخدم مفتاح APIYI الخاص بك)
export ANTHROPIC_API_KEY="sk-你的APIYIkey"

# تعيين Base URL لـ Anthropic (يشير إلى واجهة APIYI الأصلية)
export ANTHROPIC_BASE_URL="https://api.apiyi.com"

# تشغيل OpenCode
opencode

أو يمكنك تعيينه في ملف التكوين .opencode.json:

{
  "providers": {
    "anthropic": {
      "apiKey": "sk-你的APIYIkey"
    }
  },
  "agents": {
    "coder": {
      "model": "claude-sonnet-4-6",
      "maxTokens": 16000
    },
    "task": {
      "model": "claude-haiku-4-5-20251001",
      "maxTokens": 8000
    }
  }
}

للاستخدام مع متغيرات البيئة:

# أضف هذا إلى ملف .bashrc أو .zshrc
export ANTHROPIC_API_KEY="sk-你的APIYIkey"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"

بهذه الطريقة، سيقوم OpenCode باستدعاء https://api.apiyi.com/v1/messages عبر حزمة SDK الأصلية لـ Anthropic، مما يحافظ على جميع الميزات الأصلية: التخزين المؤقت للموجه (Prompt Caching)، التفكير الموسع، واستدعاء الأدوات الأصلي.

الخيار الثاني: استخدام تنسيق متوافق مع OpenAI عبر Local Provider (بديل)

إذا لم ينجح الخيار الأول، يمكنك تكوين APIYI كمزود محلي (Local Provider) لـ OpenCode:

# تعيين نقطة النهاية المحلية
export LOCAL_ENDPOINT="https://api.apiyi.com/v1"
export LOCAL_API_KEY="sk-你的APIYIkey"
{
  "providers": {
    "local": {
      "apiKey": "sk-你的APIYIkey"
    }
  },
  "agents": {
    "coder": {
      "model": "claude-sonnet-4-6",
      "maxTokens": 16000
    }
  }
}

ملاحظة: يستخدم هذا الخيار التنسيق المتوافق مع OpenAI (/v1/chat/completions)، مما يعني فقدان الميزات الأصلية التالية:

  • التخزين المؤقت للموجه (Prompt Caching)
  • التفكير الموسع الأصلي (كتلة التفكير)
  • تنسيق استدعاء الأدوات الأصلي لـ Anthropic

💡 نصيحة: نوصي باستخدام الخيار الأول (تنسيق Anthropic الأصلي) للحصول على الوظائف الكاملة وأفضل استقرار.
عند الحصول على مفتاح من لوحة تحكم APIYI (apiyi.com)، اختر مجموعة 【ClaudeCode】 للاستمتاع بخصم 88%.

دليل استخدام APIYI Claude بالكامل

الحصول على مفتاح API وإعداده

الخطوة الإجراء ملاحظات
1. الحصول على المفتاح قم بزيارة api.apiyi.com/token صفحة إدارة الرموز (Tokens) في لوحة التحكم
2. اختيار الرمز استخدم الرمز الافتراضي أو أنشئ رمزاً جديداً عند إنشاء رمز جديد، اختر مجموعة 【ClaudeCode】 للحصول على خصم 12%
3. حفظ رابط الأساس (Base URL) https://api.apiyi.com عنوان الوصول الموحد

صيغتا الطلب المدعومتان

الصيغة الأولى: صيغة Anthropic الأصلية (موصى بها لـ OpenCode/Claude Code)

عنوان الطلب: https://api.apiyi.com/v1/messages
import anthropic

client = anthropic.Anthropic(
    api_key="sk-مفتاحك_في_APIYI",
    base_url="https://api.apiyi.com"
)

message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=4096,
    messages=[
        {"role": "user", "content": "اكتب خوارزمية ترتيب سريع (Quick Sort) باستخدام لغة Python"}
    ]
)
print(message.content[0].text)

الصيغة الثانية: صيغة متوافقة مع OpenAI (موصى بها لـ Aider/Cursor/التطبيقات الخاصة)

عنوان الطلب: https://api.apiyi.com/v1/chat/completions
import openai

client = openai.OpenAI(
    api_key="sk-مفتاحك_في_APIYI",
    base_url="https://api.apiyi.com/v1"
)

response = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[
        {"role": "user", "content": "اكتب خوارزمية ترتيب سريع (Quick Sort) باستخدام لغة Python"}
    ]
)
print(response.choices[0].message.content)

قائمة نماذج Claude المدعومة

أحدث النماذج الأساسية (موصى بها):

معرف النموذج السلسلة التميز حالات الاستخدام
claude-opus-4-6 Opus أقوى استنتاج تصميم البنى المعقدة، التحليل العميق
claude-sonnet-4-6 Sonnet توازن في الأداء البرمجة اليومية، مراجعة الكود
claude-haiku-4-5-20251001 Haiku استجابة سريعة المهام البسيطة، التصنيف، الاستخراج

نماذج الاستنتاج (تفعيل إجباري للتفكير الموسع):

معرف النموذج ملاحظات
claude-opus-4-6-thinking Opus + استنتاج إجباري
claude-sonnet-4-6-thinking Sonnet + استنتاج إجباري
claude-haiku-4-5-20251001-thinking Haiku + استنتاج إجباري

نماذج الاستنتاج هي نفس النماذج الأساسية، والفرق هو أن نموذج الاستنتاج يفعل خاصية التفكير الموسع (thinking) إجبارياً، مما ينتج عملية تفكير أكثر تفصيلاً، وهو مناسب للمهام التي تتطلب تحليلاً عميقاً.

عرض كود استدعاء التفكير الموسع بصيغة Anthropic الأصلية
import anthropic

client = anthropic.Anthropic(
    api_key="sk-مفتاحك_في_APIYI",
    base_url="https://api.apiyi.com"
)

# استخدام نموذج thinking، لتفعيل التفكير الموسع إجبارياً
message = client.messages.create(
    model="claude-sonnet-4-6-thinking",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000  # ميزانية الرموز لعملية التفكير
    },
    messages=[
        {"role": "user", "content": "حلل التعقيد الزمني لهذا الكود وقم بتحسينه"}
    ]
)

for block in message.content:
    if block.type == "thinking":
        print(f"عملية التفكير:\n{block.thinking}")
    elif block.type == "text":
        print(f"الإجابة النهائية:\n{block.text}")

🚀 ابدأ بسرعة: قم بزيارة APIYI عبر api.apiyi.com/token للحصول على مفتاحك،
واختر مجموعة 【ClaudeCode】 للاستمتاع بخصم 12%.
مفتاح واحد يدعم كلاً من صيغة Anthropic الأصلية والصيغة المتوافقة مع OpenAI،
مما يجعله متوافقاً مع جميع أدوات البرمجة بالذكاء الاصطناعي مثل OpenCode، Claude Code، Aider، وCursor.

أفضل طرق الربط لأدوات البرمجة بالذكاء الاصطناعي

الأداة صيغة الواجهة الموصى بها رابط الأساس (Base URL) النموذج الموصى به
OpenCode/Crush Anthropic الأصلية https://api.apiyi.com claude-sonnet-4-6
Claude Code Anthropic الأصلية https://api.apiyi.com claude-sonnet-4-6
Aider متوافقة مع OpenAI https://api.apiyi.com/v1 claude-sonnet-4-6
Cursor متوافقة مع OpenAI https://api.apiyi.com/v1 claude-sonnet-4-6
Cline (VS Code) متوافقة مع OpenAI https://api.apiyi.com/v1 claude-sonnet-4-6
التطبيقات الخاصة (Python) كلاهما متاح انظر أعلاه اختر حسب الحاجة

دليل سريع لإعداد الأدوات

OpenCode/Crush:

export ANTHROPIC_API_KEY="sk-مفتاحك_في_APIYI"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"

Claude Code:

export ANTHROPIC_API_KEY="sk-مفتاحك_في_APIYI"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
claude

Aider:

export OPENAI_API_KEY="sk-مفتاحك_في_APIYI"
export OPENAI_API_BASE="https://api.apiyi.com/v1"
aider --model claude-sonnet-4-6

🎯 إدارة موحدة: من خلال APIYI apiyi.com، يمكنك إدارة استدعاءات API لجميع أدوات البرمجة باستخدام مفتاح واحد،
مع دعم أكثر من 300 نموذج مثل Claude وGPT وGemini، مع فوترة وإدارة موحدة.

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

س1: ماذا أفعل إذا ظهر لي خطأ “agent coder not found” في OpenCode؟

هذا هو الخطأ الأكثر شيوعاً في OpenCode، ويعني أنه لم يتم العثور على إعدادات صالحة لمزود خدمة الذكاء الاصطناعي. يرجى التحقق من النقاط التالية: 1) هل متغير البيئة ANTHROPIC_API_KEY مضبوط ويعمل بشكل صحيح؟ 2) هل قيمة providers.anthropic.apiKey في ملف .opencode.json صحيحة؟ 3) هل يحتوي مفتاح API على رصيد كافٍ؟ يمكنك استخدام المفاتيح التي تحصل عليها من APIYI عبر apiyi.com/token مباشرة دون الحاجة لأي إعدادات إضافية.

س2: لماذا تعتبر التنسيقات الأصلية لـ Anthropic أكثر استقراراً من تنسيقات OpenAI المتوافقة؟

لأن OpenCode يستخدم حزمة Anthropic البرمجية (Go SDK) الرسمية مباشرة للاستدعاء، حيث تتعامل الحزمة داخلياً مع تنسيقات أحداث البث (streaming events) الخاصة بـ Anthropic، ومنطق إعادة المحاولة، ومعالجة الأخطاء. الاعتماد على تنسيق متوافق مع OpenAI يتطلب طبقة تحويل وسيطة، وقد يؤدي هذا التحويل إلى فقدان معلومات حيوية مثل أحداث thinking_delta أو تنسيق tool_use، مما يسبب فشل التحليل. تدعم نقطة النهاية /v1/messages في APIYI (apiyi.com) بروتوكول Anthropic الأصلي بالكامل، مما يلغي الحاجة لأي تحويل في التنسيق.

س3: ما الفرق بين نماذج “التفكير” (thinking) والنماذج العادية؟ ومتى أستخدم كلاً منها؟

نموذجا claude-sonnet-4-6 و claude-sonnet-4-6-thinking هما في الأساس نفس النموذج. نسخة "thinking" تفعل ميزة التفكير الموسع إجبارياً، مما ينتج عملية استنتاج تفصيلية. أما النسخة العادية فلا تفعلها افتراضياً (في OpenCode، يتم تفعيلها تلقائياً عند احتواء الرسالة على الكلمة المفتاحية "think"). نصيحتنا: استخدم النسخة العادية للمهام البرمجية اليومية (أسرع وأوفر في استهلاك التوكنز)، واستخدم نسخة "thinking" لتصميم البنى البرمجية المعقدة أو تصحيح الأخطاء (debug).

س4: هل تغيرت طريقة الإعداد بعد تغيير اسم OpenCode إلى Crush؟

لا توجد تغييرات في البنية الأساسية، حيث ورث Crush كامل كود OpenCode. قد يتغير اسم ملف الإعداد من .opencode.json إلى .crush.json (اعتماداً على الإصدار)، لكن متغيرات البيئة تظل كما هي. طريقة إعداد ANTHROPIC_API_KEY و ANTHROPIC_BASE_URL متطابقة تماماً. ننصح باستخدام أحدث إصدار من Crush للحصول على أفضل استقرار وميزات.

opencode-claude-model-disconnect-fix-anthropic-native-api-apiyi-guide-ar 图示

ملخص: اختيار تنسيق API الصحيح يجعل Claude مستقراً في OpenCode

السبب الجذري لانقطاع نماذج Claude المتكرر في OpenCode/Crush هو عدم تطابق تنسيق API؛ حيث يستخدم OpenCode التنسيق الأصلي لـ Anthropic، بينما تدعم العديد من خدمات وكيل API تنسيق OpenAI فقط.

الحل واضح ومباشر:

  1. استخدام خدمة API تدعم التنسيق الأصلي لـ Anthropic — مثل نقطة النهاية /v1/messages في APIYI.
  2. ضبط متغيرات البيئة بشكل صحيحANTHROPIC_BASE_URL=https://api.apiyi.com
  3. اختيار النموذج المناسب — استخدم claude-sonnet-4-6 للاستخدام اليومي، و claude-sonnet-4-6-thinking للاستنتاج العميق.

نوصي باستخدام APIYI (apiyi.com) لإدارة استدعاءات النموذج لجميع أدوات البرمجة المدعومة بالذكاء الاصطناعي بشكل موحد. قم بزيارة api.apiyi.com/token للحصول على مفتاح API، واختر مجموعة 【ClaudeCode】 للاستمتاع بخصم 12%. مفتاح واحد متوافق مع كل من تنسيق Anthropic الأصلي وتنسيق OpenAI، مما يجعله مناسباً لجميع أدوات البرمجة بالذكاء الاصطناعي السائدة في السوق.


📝 كاتب المقال: الفريق التقني لـ APIYI | APIYI apiyi.com – منصة موحدة للوصول إلى أكثر من 300 نموذج لغة كبير.

المراجع

  1. مستودع OpenCode على GitHub (مؤرشف): كود المشروع الأصلي والوثائق.

    • الرابط: github.com/opencode-ai/opencode
    • ملاحظة: تم تغيير الاسم إلى Crush.
  2. مستودع Crush على GitHub: المشروع الخلف النشط حالياً.

    • الرابط: github.com/charmbracelet/crush
    • ملاحظة: الإصدار الأحدث الذي يتم صيانته بواسطة فريق Charm.
  3. وثائق Anthropic API: مواصفات التنسيق الأصلي لـ Messages API.

    • الرابط: docs.anthropic.com/en/api/messages
    • ملاحظة: تنسيق الطلب والاستجابة الكامل لنقطة النهاية /v1/messages.
  4. وثائق APIYI: دليل الوصول إلى Claude API.

    • الرابط: apiyi.com
    • ملاحظة: يدعم كلاً من التنسيق الأصلي لـ Anthropic وتنسيق OpenAI.

أضف تعليق