الانتقال من OpenAI إلى Claude API: ما الذي يتغير في الكود
انقل كود OpenAI API إلى Claude: احتفظ بمكتبة OpenAI وغيّر ثلاثة إعدادات، أو انتقل إلى مكتبة Anthropic. خريطة الحقول وأخطاء 400 والتكلفة.
للانتقال من OpenAI إلى Claude تستطيع أن تحتفظ بمكتبة OpenAI وتغيّر ثلاثة إعدادات: العنوان الأساسي https://api.5abeer.ai/v1، ومفتاحًا من خبير لنماذج Claude، ومعرّف نموذج من Claude مثل claude-sonnet-5.5. وإن احتجت إعدادات Claude الخاصة، مثل التخزين المؤقت للطلبات، فانتقل إلى مكتبة Anthropic على العنوان https://api.5abeer.ai. وكلا الطريقين يعمل بالمفتاح نفسه.
ما الذي يتغير عند الانتقال من OpenAI إلى Claude؟#
خبير متوافق مع OpenAI: غيّر العنوان الأساسي واحتفظ بالكود نفسه. والإعدادات التي تتغير ثلاثة:
| الإعداد | قبل، على OpenAI | بعد، Claude في خبير |
|---|---|---|
| العنوان الأساسي | https://api.openai.com/v1 | https://api.5abeer.ai/v1 |
| المفتاح | مفتاح OpenAI API | مفتاح من خبير لنماذج Claude |
| النموذج | معرّف نموذج من GPT | معرّف نموذج من Claude، مثل claude-sonnet-5.5 |
ثم اختر طريقك: أن تحتفظ بمكتبة OpenAI، وهو أصغر تغيير، أو أن تنتقل إلى مكتبة Anthropic، ومنها تصل إلى كل إعدادات Claude. وكيف تبني المكتبة كل عنوان يشرحه دليل ما هو العنوان الأساسي.
الطريق الأول: احتفظ بمكتبة OpenAI#
ضع مفتاحك في متغير البيئة KHABEER_API_KEY، ثم غيّر إعداد العميل ومعرّف النموذج:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.5abeer.ai/v1",
api_key=os.environ["KHABEER_API_KEY"],
)
response = client.chat.completions.create(
model="claude-sonnet-5.5",
messages=[
{"role": "system", "content": "Answer in two sentences."},
{"role": "user", "content": "What is a context window?"},
],
)
print(response.choices[0].message.content)وفي مكتبة Node.js اسم الخيار baseURL:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.5abeer.ai/v1",
apiKey: process.env.KHABEER_API_KEY,
});
const response = await client.chat.completions.create({
model: "claude-sonnet-5.5",
messages: [{ role: "user", content: "What is a context window?" }],
});
console.log(response.choices[0].message.content);وتقرأ المكتبتان العنوان الأساسي من المتغير OPENAI_BASE_URL والمفتاح من OPENAI_API_KEY إن لم تمرّرهما في الكود، لذلك يستطيع مشروع كامل أن ينتقل بضبط هذين المتغيرين وتغيير معرّف النموذج. ويستمر الكود الذي يستدعي client.responses.create في العمل كذلك، لأن نماذج Claude تُقدَّم على Responses أيضًا.
بأي نموذج من Claude أبدأ؟#
نماذج Claude التي يمكنك استدعاؤها الآن:
Claude Sonnet 5.5الافتراضيالإدخال30 ج.مالإخراج150 ج.مالسياق1M
Claude Opus 5.5الإدخال60 ج.مالإخراج300 ج.مالسياق1M
Claude Fable 5.1الإدخال150 ج.مالإخراج750 ج.مالسياق—
Claude Fable 5الإدخال150 ج.مالإخراج750 ج.مالسياق1M
Claude Opus 4.6الإدخال75 ج.مالإخراج375 ج.مالسياق1M
Claude Opus 4.7الإدخال75 ج.مالإخراج375 ج.مالسياق1M
السعر الرسمي من صفحة المزوّد، بتاريخ 19 أكتوبر 2026.
كل النماذج والأسعارابدأ بـ claude-sonnet-5.5، وهو النموذج الافتراضي في خبير، ثم جرّب claude-opus-5.5 أو claude-fable-5.1 على أصعب طلباتك، ودليل أي نموذج Claude تختار يقارن بينها. وانسخ كل معرّف كما تكتبه قائمتنا، بنقطة في رقم الإصدار، حتى حين يكتبه توثيق Anthropic بشرطة. وتعيد الدالة client.models.list() النماذج التي يستطيع مفتاحك استخدامها، كما في عرض النماذج.
الطريق الثاني: انتقل إلى مكتبة Anthropic#
إعدادات Claude الخاصة، مثل cache_control وإعدادات التفكير وoutput_config، موجودة في صيغة Anthropic. وخبير متوافق مع واجهة Anthropic Messages، لذلك تعمل معه المكتبة الرسمية. ثبّتها بالأمر pip install anthropic:
import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.5abeer.ai",
api_key=os.environ["KHABEER_API_KEY"],
)
message = client.messages.create(
model="claude-sonnet-5.5",
max_tokens=4096,
system="Answer in two sentences.",
messages=[{"role": "user", "content": "What is a context window?"}],
)
print("".join(block.text for block in message.content if block.type == "text"))وتختلف أربعة أمور عن كود OpenAI:
- لا يحتوي العنوان الأساسي على
/v1، فمكتبة Anthropic تضيف المسار بنفسها. - الحقل
max_tokensمطلوب، والتعليمات توضع في الحقلsystemفي أعلى الطلب. - التفكير يعمل افتراضيًا في نماذج Claude 5. وتحسب Anthropic توكنات التفكير ضمن
max_tokensوتحاسب عليها كتوكنات إخراج، فاترك لها مساحة: الأمثلة هنا تستخدم 4096. - الرد قائمة من الكتل، وقد تأتي كتلة
thinkingقبل النص. فاقرأ كتلtext، لا الكتلة الأولى.
وتقرأ المكتبة أيضًا المتغيرين ANTHROPIC_BASE_URL وANTHROPIC_API_KEY من البيئة، كما في العناوين الأساسية.
ما الفرق بين Chat Completions وMessages؟#
المحادثة نفسها في حقول مختلفة. والانتقال إلى Messages يعني تغيير هذه الأسماء:
| في Chat Completions | في Messages |
|---|---|
العنوان الأساسي https://api.5abeer.ai/v1 | العنوان الأساسي https://api.5abeer.ai دون /v1 |
الترويسة Authorization: Bearer | الترويستان x-api-key وanthropic-version: 2023-06-01، وتعمل Bearer أيضًا |
رسالة دورها system | الحقل system في أعلى الطلب |
max_tokens اختياري | max_tokens مطلوب |
choices[0].message.content | كتل text داخل content |
stop | stop_sequences |
parameters في الدالة | input_schema في الأداة |
رسالة دورها tool | كتلة tool_result داخل رسالة user |
reasoning_effort | effort داخل output_config |
response_format | أداة لها مخطط |
prompt_tokens وcompletion_tokens | input_tokens وoutput_tokens |
أجزاء فيها delta | أحداث لها أسماء مثل content_block_delta |
وكل حقل في مرجع Messages، والأداة نفسها بكل صيغة في استدعاء الأدوات.
ما خيارات OpenAI التي تعمل مع Claude في خبير؟#
من مرجع Chat Completions في خبير. والخيار المتجاهَل لا يسبب خطأ، لكن لا يكون له أي أثر.
| الخيار | مع نماذج Claude في خبير |
|---|---|
messages بالأدوار system وuser وassistant وtool | مدعوم، ومعه الصور |
max_completion_tokens أو max_tokens | مدعوم |
stream وstream_options | مدعوم |
tools وtool_choice | مدعوم، وأبقِ tool_choice على auto (انظر ما بعد الجدول) |
reasoning_effort | مدعوم |
temperature وtop_p | يُمرَّر إلى النموذج (انظر ما بعد الجدول) |
response_format | متجاهَل: استخدم أداة لها مخطط |
stop | متجاهَل: استخدم stop_sequences في Messages |
parallel_tool_calls وn وseed وpresence_penalty وfrequency_penalty وlogprobs وlogit_bias وuser | متجاهَلة |
ويضيف توثيق Anthropic، الذي راجعناه في 2026-11-03، قيدين. في نماذج Claude 4.7 وما بعدها، القيمة غير الافتراضية لـ temperature أو top_p تعيد الخطأ 400. وفي claude-opus-5.5 وclaude-sonnet-5.5 وclaude-fable-5.1 يعيده كذلك فرض استدعاء أداة عبر tool_choice. فاحذف temperature وtop_p من الطلب، وأبقِ tool_choice على auto، واذكر في نص الطلب اسم الأداة التي تريدها.
كيف أحصل على JSON من Claude؟#
لا أثر للخيار response_format مع نماذج Claude في Chat Completions على خبير، لذلك اطلب JSON عبر أداة. وفي مكتبة Anthropic صِف أداة يحمل حقلها input_schema الحقول التي تريدها، ثم اقرأها من كتلة tool_use:
tools = [{
"name": "save_city",
"description": "Save facts about a city.",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string"},
"country": {"type": "string"},
"population": {"type": "integer"},
},
"required": ["city", "country", "population"],
},
}]
message = client.messages.create(
model="claude-sonnet-5.5",
max_tokens=4096,
tools=tools,
messages=[{"role": "user", "content": "Call save_city with the facts about Tokyo."}],
)
calls = [block for block in message.content if block.type == "tool_use"]
if calls:
print(calls[0].input["city"], calls[0].input["population"])
else:
print("No tool call, stop_reason:", message.stop_reason)ومع tool_choice على auto يقرر النموذج هل يستدعي الأداة، لذلك أبقِ التحقق من غياب كتلة tool_use. وطريقة إرسال نتيجة الأداة إلى النموذج في استدعاء الأدوات.
هل ينتقل التخزين المؤقت للطلبات؟#
لا ينتقل تلقائيًا. مع نماذج Claude تحدد ما يُخزَّن بإضافة cache_control إلى كتلة من المحتوى، وهذا الحقل موجود في Messages وحدها. فإن كانت طلباتك تكرر تعليمات أو مستندات طويلة، فهذا وحده سبب كافٍ للطريق الثاني، وانظر التخزين المؤقت للطلبات.
هل يعمل البث المتدفق؟#
نعم، في الطريقين. مع مكتبة OpenAI يعمل stream=True كما كان. ومع مكتبة Anthropic تعطيك الدالة المساعدة messages.stream النص أثناء كتابته:
with client.messages.stream(
model="claude-sonnet-5.5",
max_tokens=4096,
messages=[{"role": "user", "content": "Write a short poem about the sea."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)والأحداث التي يتكوّن منها البث في البث المتدفق.
الأخطاء الشائعة#
| ما تراه | السبب المحتمل | الحل |
|---|---|---|
403 مع MODEL_PLATFORM_NOT_ALLOWED | المفتاح لنماذج GPT أو Gemini | أنشئ مفتاحًا لنماذج Claude، كما في مفتاح لكل مزوّد |
401 مع INVALID_API_KEY | ما زال الكود يرسل مفتاح OpenAI | ضع مفتاحك من خبير في المتغير الذي يقرؤه الكود |
404 Not Found | أُضيف /v1 إلى العنوان الأساسي في مكتبة Anthropic | استخدم https://api.5abeer.ai |
400 لطلب كان يعمل مع GPT | قيمة غير افتراضية لـ temperature أو top_p، أو فرض استدعاء أداة | احذف temperature وtop_p، واجعل tool_choice على auto |
stop_reason قيمته max_tokens، والنص قليل أو غائب | نفد max_tokens، وغالبًا في التفكير | ارفع max_tokens |
AttributeError عند choices | كود مكتوب لـ Chat Completions يقرأ ردًّا من Messages | اقرأ كتل text داخل content |
وكل الرموز في رموز الأخطاء وحدود الـ API.
اختبره بطلب واحد#
قبل أن تعدّل مشروعًا كبيرًا، أرسل طلبًا واحدًا بمفتاحك لنماذج Claude. فإن عاد رد، فالعنوان الأساسي والمفتاح ومعرّف النموذج صحيحة:
curl --request POST "https://api.5abeer.ai/v1/messages" \
--header "x-api-key: $KHABEER_API_KEY" \
--header "Content-Type: application/json" \
--header "anthropic-version: 2023-06-01" \
--data '{"model":"claude-sonnet-5.5","max_tokens":512,"messages":[{"role":"user","content":"اكتب فكرة منتج في سطر واحد"}]}'{
"id": "msg_01Xh7",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-5.5",
"content": [
{
"type": "text",
"text": "مرحبًا! كيف أساعدك اليوم؟"
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 21,
"output_tokens": 12
}
}المفتاح يُقرأ من متغير البيئة KHABEER_API_KEY، فلا يظهر في الكود.
عنوان Anthropic المتوافق مع OpenAI أم عنوان خبير؟#
لدى Anthropic عنوانها الخاص المتوافق مع OpenAI. راجعنا الفروق في 2026-11-03 في توثيق Anthropic وتوثيقنا:
| عنوان Anthropic المتوافق مع OpenAI | خبير | |
|---|---|---|
| العنوان الأساسي | https://api.anthropic.com/v1/ | https://api.5abeer.ai/v1 |
| المفتاح | مفتاح Anthropic API | مفتاح من خبير لنماذج Claude |
| معرّف النموذج | معرّفات Anthropic، بشرطة في رقم الإصدار | معرّفات قائمتنا، مثل claude-sonnet-5.5 |
response_format | json_schema مع strict: true فقط | متجاهَل: استخدم أداة لها مخطط |
reasoning_effort | متجاهَل | مدعوم |
stop | يعمل مع النصوص التي ليست مسافات فقط | متجاهَل: استخدم stop_sequences في Messages |
| التخزين المؤقت للطلبات | غير متاح بهذه الصيغة | غير متاح بهذه الصيغة، واستخدم cache_control في Messages |
وتقول Anthropic إن هذه الطبقة مخصصة أساسًا لاختبار قدرات النماذج ومقارنتها، وتحيل إلى واجهتها الأصلية للحصول على كل الميزات. والأمر نفسه هنا: مكتبة OpenAI هي الطريق السريع، وMessages هي مكان إعدادات Claude الخاصة.
كم يكلّف الانتقال؟#
يدفع مفتاح API من خبير ثمن التوكنات من رصيدك، وكل نموذج مسعّر بالتوكن أقل من سعره الرسمي. ومثال على ذلك: 3,000 طلب إلى claude-sonnet-5.5، في كل طلب نحو 2,000 توكن إدخال و500 توكن إخراج، ومنها توكنات التفكير:
6 مليون توكن إدخال و1.5 مليون توكن إخراج
السعر الرسمي من صفحة المزوّد، بتاريخ 19 أكتوبر 2026.
والأسعار المباشرة في صفحة Claude API، ويشرح دليل ما هو التوكن كيف يتحول الطلب إلى توكنات. ولكل مفتاح حد للإنفاق وتاريخ انتهاء وقائمة عناوين IP المسموح بها، كما في تحكّم في كل مفتاح.
والباقات مخصصة للتطبيقات المدعومة، ولاستخدام النماذج من الكود الخاص بك أنشئ مفتاح API. وإن أردت Claude في الطرفية لا في الكود، فراجع Claude Code.
أسئلة شائعة#
هل أستطيع الاحتفاظ بكود OpenAI واستدعاء Claude؟#
نعم. اجعل العنوان الأساسي في مكتبة OpenAI https://api.5abeer.ai/v1، واستخدم مفتاحًا لنماذج Claude، ومرّر معرّف نموذج من Claude. ويعمل Chat Completions وResponses كلاهما.
متى تستحق مكتبة Anthropic إعادة الكتابة؟#
حين تحتاج cache_control أو إعدادات التفكير أو output_config. أما طلبات المحادثة واستدعاء الأدوات العادية فتكفيها الإعدادات الثلاثة، ويبقى مسار واحد في الكود قادرًا على استدعاء عدة مزوّدين.
لماذا يعيد Claude الخطأ 400 لطلب كان يعمل مع GPT؟#
السبب المعتاد قيمة لـ temperature أو top_p، أو فرض استدعاء أداة. فأحدث نماذج Anthropic ترفض القيمة غير الافتراضية لـ temperature أو top_p، وترفض tool_choice الذي يفرض أداة. احذف هذه الإعدادات وأعد المحاولة.
هل أحتاج إلى مفتاح جديد لـ Claude؟#
نعم. يعمل المفتاح في خبير مع نماذج مزوّد واحد، فالمفتاح الخاص بنماذج GPT لا يستدعي Claude. أنشئ مفتاحًا لنماذج Claude، وكل مفاتيحك تسحب من الرصيد نفسه.
هل أعيد كتابة التعليمات؟#
تنصح Anthropic بمراجعتها: فالتعليمات المضبوطة بدقة لنماذج GPT قد تحتاج إلى تعديل لتحصل على أفضل ما في Claude. جرّب أهم تعليماتك بطلب الاختبار في الأعلى قبل أن تنقل الباقي.
المصادر#
راجعناها في 2026-11-03:
- Anthropic: OpenAI SDK compatibility
- Anthropic: Using the Messages API
- Anthropic: Define tools
- Anthropic: Thinking
- Anthropic: anthropic-sdk-python library
- OpenAI: openai-python library وopenai-node library
ابدأ#
أنشئ مفتاحًا لنماذج Claude، واحفظه في المتغير KHABEER_API_KEY، وشغّل طلب الاختبار في الأعلى، ثم غيّر العنوان الأساسي ومعرّف النموذج في مشروعك كله.
أدلة ذات صلة
- ما هو العنوان الأساسي base URL؟ ومكانه في مكتبات الـ APIما العنوان الأساسي، وما العنوان الرسمي لمكتبات OpenAI وAnthropic وGemini، وكيف تضبطه في الكود أو Claude Code، وكيف تصلح أخطاء 404 و401.
- أي نموذج Claude تختار: Sonnet أم Opus أم Fable؟Sonnet للعمل اليومي، وOpus لمهام البرمجة الطويلة، وFable لأصعب المهام. مقارنة بين نماذج Claude الثلاثة في السرعة والتكلفة وما يناسب كلًّا منها.
جاهز للبدء؟
اختر باقة تشغّل التطبيقات الرسمية، أو أنشئ مفتاح API تستخدمه من الكود الخاص بك.