# الانتقال من OpenAI إلى Claude API: ما الذي يتغير في الكود

> انقل كود OpenAI API إلى Claude: احتفظ بمكتبة OpenAI وغيّر ثلاثة إعدادات، أو انتقل إلى مكتبة Anthropic. خريطة الحقول وأخطاء 400 والتكلفة.

آخر تحديث: 2026-11-03

للانتقال من 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. وكيف تبني المكتبة كل عنوان يشرحه دليل [ما هو العنوان الأساسي](https://5abeer.ai/ar/guides/what-is-base-url).

## الطريق الأول: احتفظ بمكتبة OpenAI

ضع مفتاحك في متغير البيئة `KHABEER_API_KEY`، ثم غيّر إعداد العميل ومعرّف النموذج:

```python
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`:

```javascript
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](https://5abeer.ai/ar/docs/api/responses.md) أيضًا.

## بأي نموذج من Claude أبدأ؟

نماذج Claude التي يمكنك استدعاؤها الآن:

| النموذج | المعرّف | الإدخال (سعرنا) | الإخراج (سعرنا) | السياق |
| --- | --- | --- | --- | --- |
| Claude Sonnet 5.5 | `claude-sonnet-5.5` | 0.60 US$ | 3 US$ | 1M |
| Claude Opus 5.5 | `claude-opus-5.5` | 1.20 US$ | 6 US$ | 1M |
| Claude Fable 5.1 | `claude-fable-5.1` | 3 US$ | 15 US$ | — |
| Claude Fable 5 | `claude-fable-5` | 3 US$ | 15 US$ | 1M |
| Claude Opus 4.6 | `claude-opus-4.6` | 1.50 US$ | 7.50 US$ | 1M |
| Claude Opus 4.7 | `claude-opus-4.7` | 1.50 US$ | 7.50 US$ | 1M |

ابدأ بـ [`claude-sonnet-5.5`](https://5abeer.ai/ar/models/claude-sonnet-5.5)، وهو النموذج الافتراضي في خبير، ثم جرّب [`claude-opus-5.5`](https://5abeer.ai/ar/models/claude-opus-5.5) أو [`claude-fable-5.1`](https://5abeer.ai/ar/models/claude-fable-5.1) على أصعب طلباتك، ودليل [أي نموذج Claude تختار](https://5abeer.ai/ar/guides/which-claude-model) يقارن بينها. وانسخ كل معرّف كما تكتبه قائمتنا، بنقطة في رقم الإصدار، حتى حين يكتبه توثيق Anthropic بشرطة. وتعيد الدالة `client.models.list()` النماذج التي يستطيع مفتاحك استخدامها، كما في [عرض النماذج](https://5abeer.ai/ar/docs/api/models.md#ex-list).

## الطريق الثاني: انتقل إلى مكتبة Anthropic

إعدادات Claude الخاصة، مثل `cache_control` وإعدادات التفكير و`output_config`، موجودة في صيغة Anthropic. وخبير متوافق مع واجهة Anthropic Messages، لذلك تعمل معه المكتبة الرسمية. ثبّتها بالأمر `pip install anthropic`:

```python
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` من البيئة، كما في [العناوين الأساسية](https://5abeer.ai/ar/docs/start/base-urls.md#anthropic).

## ما الفرق بين 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](https://5abeer.ai/ar/docs/api/messages.md#params)، والأداة نفسها بكل صيغة في [استدعاء الأدوات](https://5abeer.ai/ar/docs/api/tools.md#formats).

## ما خيارات OpenAI التي تعمل مع Claude في خبير؟

من [مرجع Chat Completions](https://5abeer.ai/ar/docs/api/chat-completions.md#params) في خبير. والخيار المتجاهَل لا يسبب خطأ، لكن لا يكون له أي أثر.

| الخيار | مع نماذج 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](https://5abeer.ai/ar/docs/api/messages.md#params) |
| `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`:

```python
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`. وطريقة إرسال نتيجة الأداة إلى النموذج في [استدعاء الأدوات](https://5abeer.ai/ar/docs/api/tools.md#loop).

## هل ينتقل التخزين المؤقت للطلبات؟

لا ينتقل تلقائيًا. مع نماذج Claude تحدد ما يُخزَّن بإضافة `cache_control` إلى كتلة من المحتوى، وهذا الحقل موجود في Messages وحدها. فإن كانت طلباتك تكرر تعليمات أو مستندات طويلة، فهذا وحده سبب كافٍ للطريق الثاني، وانظر [التخزين المؤقت للطلبات](https://5abeer.ai/ar/docs/api/caching.md#claude).

## هل يعمل البث المتدفق؟

نعم، في الطريقين. مع مكتبة OpenAI يعمل `stream=True` كما كان. ومع مكتبة Anthropic تعطيك الدالة المساعدة `messages.stream` النص أثناء كتابته:

```python
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)
```

والأحداث التي يتكوّن منها البث في [البث المتدفق](https://5abeer.ai/ar/docs/api/messages.md#streaming).

## الأخطاء الشائعة

| ما تراه | السبب المحتمل | الحل |
| --- | --- | --- |
| `403` مع `MODEL_PLATFORM_NOT_ALLOWED` | المفتاح لنماذج GPT أو Gemini | أنشئ مفتاحًا لنماذج Claude، كما في [مفتاح لكل مزوّد](https://5abeer.ai/ar/docs/start/keys.md#per-provider) |
| `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` |

وكل الرموز في [رموز الأخطاء](https://5abeer.ai/ar/docs/help/errors.md#codes) و[حدود الـ API](https://5abeer.ai/ar/docs/api/limits.md#model-errors).

## اختبره بطلب واحد

قبل أن تعدّل مشروعًا كبيرًا، أرسل طلبًا واحدًا بمفتاحك لنماذج Claude. فإن عاد رد، فالعنوان الأساسي والمفتاح ومعرّف النموذج صحيحة:

```bash
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":"اكتب فكرة منتج في سطر واحد"}]}'
```

```python
import os
import requests

response = requests.post(
    "https://api.5abeer.ai/v1/messages",
    headers={
        "x-api-key": os.environ['KHABEER_API_KEY'],
        "Content-Type": "application/json",
        "anthropic-version": "2023-06-01",
    },
    json={
    "model": "claude-sonnet-5.5",
    "max_tokens": 512,
    "messages": [
        {
            "role": "user",
            "content": "اكتب فكرة منتج في سطر واحد"
        }
    ]
},
    stream=False,
    timeout=60,
)

response.raise_for_status()
print(response.json())
```

## عنوان 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,000,000 توكن إدخال و1,500,000 توكن إخراج على Claude Sonnet 5.5 (`claude-sonnet-5.5`) تكلّف 8.10 US$ بسعرنا مقابل 27.00 US$ بالسعر الرسمي (أقل بنسبة 70%). آخر مراجعة للسعر الرسمي: 19 أكتوبر 2026.

والأسعار المباشرة في صفحة [Claude API](https://5abeer.ai/ar/api/claude)، ويشرح دليل [ما هو التوكن](https://5abeer.ai/ar/guides/what-is-a-token) كيف يتحول الطلب إلى توكنات. ولكل مفتاح حد للإنفاق وتاريخ انتهاء وقائمة عناوين IP المسموح بها، كما في [تحكّم في كل مفتاح](https://5abeer.ai/ar/docs/start/keys.md#controls).

والباقات مخصصة للتطبيقات المدعومة، ولاستخدام النماذج من الكود الخاص بك أنشئ مفتاح API. وإن أردت Claude في الطرفية لا في الكود، فراجع [Claude Code](https://5abeer.ai/ar/docs/apps/claude-code.md).

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

### هل أستطيع الاحتفاظ بكود 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](https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk)
- Anthropic: [Using the Messages API](https://platform.claude.com/docs/en/build-with-claude/working-with-messages)
- Anthropic: [Define tools](https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools)
- Anthropic: [Thinking](https://platform.claude.com/docs/en/build-with-claude/thinking)
- Anthropic: [anthropic-sdk-python library](https://github.com/anthropics/anthropic-sdk-python)
- OpenAI: [openai-python library](https://github.com/openai/openai-python) و[openai-node library](https://github.com/openai/openai-node)

> خبير خدمة مستقلة، ولا تتبع OpenAI أو Anthropic أو Google.

## ابدأ

أنشئ مفتاحًا لنماذج Claude، واحفظه في المتغير `KHABEER_API_KEY`، وشغّل طلب الاختبار في الأعلى، ثم غيّر العنوان الأساسي ومعرّف النموذج في مشروعك كله.
