ملاحظة المؤلف: ينبغي أن تعالج التطبيقات متعددة النماذج اختلافات استدعاء الأدوات، وحالة الاستدلال، والإخراج المتدفق، والبيانات المهيكلة، والتخزين المؤقت، وذلك عبر تنسيق رسائل موحد، وطبقة محول للمزوّد، وسجل لقدرات النماذج.
يستطيع GPT وClaude وGemini إتمام استدعاءات النص العادية، كما يوفّر Claude وGemini مداخل رسمية متوافقة مع OpenAI SDK. وعند تبديل النموذج في تطبيق بمستوى الإنتاج، يلزم حل 6 فئات من مشكلات التوافق: أدوار الرسائل والتعليمات النظامية، وبروتوكول استدعاء الأدوات، ومعاملات الاستدلال وحالة التفكير، وأحداث التدفق، والإخراج المهيكل والوسائط المتعددة، وحساب تكلفة التخزين المؤقت ومعالجة الأخطاء. استبدال Model ID وحده يكفي لتشغيل سؤال وجواب بسيط، أما استدعاء الأدوات على عدة دورات، واستعادة التدفق بعد انقطاعه، وحساب التكلفة، فتحتاج إلى معالجة منفصلة. والخيار الهندسي الأكثر أمانًا هو «واجهة أعمال موحدة + طبقة محول المزوّد (Provider Adapter) + سجل قدرات النماذج». وبهذه الطريقة يمكن إدارة تبديل النماذج كخاصية منتج قابلة للصيانة.
في ما يلي، نقارن أولاً الاختلافات البنيوية بين واجهات API الأصلية للشركات الثلاث، ونوضح السيناريوهات التي يمكن أن تغطيها الواجهات المتوافقة مع OpenAI. ثم نحلل واحدًا تلو الآخر الأعطال الواقعية التي قد تنجم عن فئات التوافق الست، ونقدّم معمارية تكامل من ست طبقات وكود استدعاء موحد قابل للتشغيل. وأخيرًا نسرد ستة اختبارات توافق قبل الإطلاق، ونشرح كيف تُقسّم المهام بين بوابة API موحدة وتكييف القدرات الأصلية.

للتعرف: مسرد مصطلحات توافق API متعدد النماذج
| المصطلح | الشرح |
|---|---|
| API | الواجهة التي ترسل عبرها التطبيقات الطلبات إلى خدمة النموذج وتستعيد النتائج. |
| SDK | حزمة أدوات تطوير برمجيات تغلف تفاصيل استدعاء الواجهة. |
| واجهة API الأصلية | الواجهة الرئيسية التي تصممها الشركة المصنعة نفسها، مثل OpenAI Responses وClaude Messages وGemini Interactions. |
| واجهة متوافقة | مدخل تكيّفي يتبع صيغة طلبات أخرى (عادة صيغة OpenAI) لتسهيل الاستدعاء عبر SDK واحد. |
| استدعاء الدوال (Function Calling) | يطلب النموذج من التطبيق تنفيذ دالة خارجية باستخدام معاملات منظمة. |
| معرّف الاستدعاء | معرّف يربط طلب الأداة الذي ي发起ه النموذج بنتيجة التنفيذ التي يعيدها التطبيق. |
| توقيع التفكير (Thought / Thinking Signature) | بيانات حالة مشفرة تستخدمها بعض النماذج لحفظ سياق الاستدلال واستدعاء الأدوات، ويجب إعادتها كما هي. |
| الإخراج التدفقي (Streaming) | يعيد الخادم النتائج حدثًا بعد حدث، ويمكن للواجهة الأمامية عرضها أثناء الاستلام. |
| JSON Schema | مواصفة تصف بنية بيانات JSON وقواعد التحقق منها. |
| تخزين الموجه المؤقت (Prompt Caching) | إعادة استخدام نتائج الحساب للبادئات المتكررة في المدخلات، لتقليل زمن الاستجابة والتكلفة. |
| TTL | المدة التي يبقى فيها التخزين المؤقت صالحًا، وبعد انتهائها يجب إعادة الكتابة. |
| محول المزود (Provider Adapter) | مكوّن يحوّل الطلب الموحد إلى صيغة أصلية لمزود معين، ثم يعيد تحويل النتيجة إلى الصيغة الموحدة. |
| سجل القدرات | قائمة إعدادات تسجل ما يدعمه فعليًا كل نموذج وكل نقطة وصول من معاملات وميزات. |
| العملية العدمية (Idempotent) | تنفيذ العملية مرة واحدة أو عدة مرات يعطي النتيجة نفسها، ويُستخدم لمنع الخصم المكرر أو إرسال الرسائل مرتين عند إعادة المحاولة. |
1 توافق API متعدد النماذج: لماذا لا يكفي تغيير مُعرّف النموذج (Model ID) وحده عند تبديل النماذج
تتيح المزوّدات الثلاثة جميعًا تحديد النموذج عبر حقل model واحد، لكن طريقة تنظيم جسم الطلب، وكائن الاستجابة، وحالة السياق تختلف من واحد لآخر. في الأسئلة والأجوبة العادية تتركّز الفروقات في أسماء الحقول، فتبقى تكلفة التكيّف منخفضة. أما تطبيقات الوكيل (Agent) فتعتمد على استدعاء الأدوات وحالة الاستدلال وأحداث البث المباشر، وعندها تتحوّل الفروقات مباشرة إلى أعطال في بيئة الإنتاج.
1.1 مقارنة بين واجهات API الأصلية لدى GPT وClaude وGemini
يصف الجدول التالي واجهات API الأصلية فقط، ولا يتناول أي طبقة توافق أو نقطة نهاية عبر بوابة.
| البُعد | OpenAI (الأصلي) | Claude (الأصلي) | Gemini (الأصلي) |
|---|---|---|---|
| الواجهة الرئيسية | Responses API، /v1/responses |
Messages API، /v1/messages |
Interactions API (متاح GA في يونيو 2026، وهو التوصية الرسمية للمشاريع الجديدة)؛ ولا يزال generateContent مدعومًا |
| تنظيم المدخلات | model + input |
model + messages + max_tokens، وsystem منفصل عن مصفوفة الرسائل |
بنية Interactions الأصلية، مع قواعد system_instruction |
| بنية المخرجات | عناصر مخرجات متعددة الأنواع: نص، وعناصر reasoning، وfunction_call وغيرها |
content blocks: text وthinking وtool_use وغيرها |
steps: مخرجات النموذج، واستدعاء الأدوات، والاستدلال وغيرها من الخطوات |
| تحديد الانتهاء | حدث اكتمال الاستجابة / نوع عنصر المخرجات | stop_reason (انتهاء طبيعي، الحاجة إلى تنفيذ أداة، إلخ) |
نوع الخطوة وحالة التفاعل |
| استمرارية السياق | previous_response_id |
يعيد التطبيق إرسال سجل الرسائل الكامل بنفسه | previous_interaction_id، مع حالة جلسة اختيارية على الخادم |
| الأدوات المضمّنة | أدوات المنصة + دوال مخصصة | أدوات مخصصة في الغالب | أدوات مضمّنة مثل Google Search وURL Context وتنفيذ الشيفرة؛ أما أدوات الطرف الثالث فينفّذها التطبيق |
من الجدول أعلاه نلاحظ أن المزوّدات الثلاثة ينقسمون إلى مسارين مختلفين في مسألة “من يحفظ السياق”. يدعم OpenAI وGemini استمرارية السياق من جهة الخادم، بينما يعيد تطبيقك سجل الرسائل بنفسه في Claude Messages. وإذا كان تصميم تخزين الجلسات في تطبيقك مبنيًا على إحدى الطريقتين فقط، فسيحدث فقدان للسياق أو إرسال مكرر عند الانتقال إلى مزوّد آخر.
1.2 إلى أي مدى يمكن لواجهة متوافقة مع OpenAI أن تحل المشكلات؟
توفّر كل من Claude وGemini مدخلًا متوافقًا مع OpenAI SDK. نقطة النهاية الرسمية المتوافقة في Gemini هي generativelanguage.googleapis.com/v1beta/openai/، وعند استخدام عميل OpenAI يكفي تعديل base_url ومفتاح API وقيمة model. أما وثائق التوافق الخاصة بـ Claude فتحدد نطاق الدعم بشكل صريح، وفيما يلي القيود المعروفة حتى 2026-11-13:
- يُتجاهل معامل
strictفي تعريفات الأدوات، وبالتالي تصبح القيود الصارمة على معاملات الأدوات بلا فاعلية. - لا يدعم Prompt Caching (التخزين المؤقت للموجهات).
- لا يدعم المدخلات من نوع audio أو file.
- تُرفع رسائل
systemوdeveloperإلى المقدمة وتُدمج معًا. - تختلف الحقول المتعلقة بـ
thinkingعن واجهة API الأصلية.
تناسب الواجهة المتوافقة ثلاث حالات: الدردشة العادية، والتوليد في جولة واحدة، والمقارنة السريعة لجودة إجابات النماذج المختلفة. أما ترحيل الوكلاء (Agents) المعقدين فيشمل معاملات أدوات صارمة، وتخزينًا مؤقتًا، ومدخلات ملفات، وحالة استدلال متعددة الجولات؛ وهذه القدرات تتطلب العودة إلى واجهة API الأصلية، أو التحقق منها بندًا بندًا قبل الإطلاق. وهناك معيار عملي للحكم: إذا كانت الوظيفة التي يعتمد عليها التطبيق تظهر فقط في الوثائق الأصلية، فسجّلها في سجل القدرات وسلّمها إلى محوّل مخصص يتولى التعامل معها.
2 ست فئات من مشكلات التوافق الأكثر شيوعًا عند التبديل بين نماذج GPT وClaude وGemini

2.1 التعامل مع توافق أدوار الرسائل وتعليمات النظام
يميّز OpenAI بين أدوار مثل developer وsystem. أما تعليمات system في Claude فتقع خارج مصفوفة الرسائل. ويستخدم Gemini الحقل system_instruction، وله أيضًا قواعد بنيوية خاصة بمحتوى المستخدم ومحتوى النموذج. والثلاثة جميعًا يعبّرون عن “أولوية التعليمات + تاريخ متعدد الأدوار”، لكن موضع الحقل الذي يحملها يختلف من واحد لآخر.
كثيرًا ما ينشأ الخلل من الدمج الكسول: أن تُجمع تعليمات النظام ورسائل التاريخ ونتائج الأدوات في سلسلة نصية واحدة، ثم تُمرَّر إلى النموذج كمدخل من المستخدم. هذا الأسلوب يعمل، لكن أولوية التعليمات تُضعَف، وقد يعتبر النموذج مخرجات الأدوات في التاريخ متطلبًا جديدًا من المستخدم. والطريقة الصحيحة هي الاحتفاظ بدلالة الأدوار داخل التطبيق، وترك طبقة التكيّف (adapter) تتولى تعيينها إلى حقول كل مزوّد. ومن الأمور التي يجب الانتباه إليها أيضًا أن طبقة توافق Claude تدمج system مع developer، لذا فإن تصاميم الموجهات التي تعتمد على فصل الطبقتين تحتاج إلى تجربة فعلية للتحقق من النتيجة.
2.2 بروتوكولات استدعاء الأدوات والتوافق في معالجة معرّفات الاستدعاء
تدعم الشركات الثلاث استدعاء الدوال (Function Calling)، وتتخذ سلسلة الاستدعاء الشكل التالي:
| المرحلة | OpenAI | Claude | Gemini |
|---|---|---|---|
| إطلاق النموذج للاستدعاء | عنصر إخراج function_call |
كتلة محتوى tool_use |
functionCall / خطوة أدوات أصلية |
| معرّف الارتباط | call_id |
معرّف tool_use |
معرّف الاستدعاء المقابل |
| إعادة الإرسال من التطبيق | function_call_output |
كتلة محتوى tool_result |
بنية إعادة إرسال النتيجة المقابلة |
| هل يلزم المتابعة | يُحدَّد بناءً على عنصر الإخراج | stop_reason يشير إلى ضرورة تنفيذ الأداة |
يُحدَّد بناءً على حالة الخطوة |
| حالة الاستدلال | قد يلزم تمرير عنصر reasoning مع السجل | قد يلزم إعادة إرسال كتلة thinking كما هي | في الوضع stateless يلزم الاحتفاظ بكتلة thought والتوقيع |
تحتاج طبقة الأدوات إلى حفظ ستّ معلومات بشكل كامل: معرّف الاستدعاء، واسم الدالة، وJSON المعاملات، وعلاقة الاستدعاء المتوازي، ونتيجة التنفيذ، وما إذا كان النموذج يطلب مواصلة الاستدلال. والاستدعاء المتوازي هو أكثر النقاط عرضةً للأخطاء. فعندما يُطلق النموذج عدة طلبات أدوات دفعةً واحدة، ثم يعيد التطبيق إرسال نتيجة واحدة فقط، أو تُقرن النتائج بمعرّفات خاطئة، فإن الطلب في الجولة التالية سيرفع خطأ في المعاملات، أو يواصل النموذج الإجابة بناءً على بيانات خاطئة.
من المستحسن أن تتحقق طبقة الأدوات الموحّدة من المعاملات باستخدام JSON Schema أولاً، ثم تنفّذ العملية الخارجية الفعلية بعد اجتياز التحقق. فالمعاملات التي يولّدها النموذج ليست صالحة دائمًا، والتحقق المسبق يمكن أن يعترض الأخطاء قبل “استدعاء النظام الخارجي”.
2.3 التوافق في التعامل مع أوضاع التفكير وحالة السياق
أسماء معاملات الاستدلال ومعانيها ليست متكافئة بين الشركات الثلاث:
- OpenAI: تستخدم معاملات مثل
reasoning.effort. لا يقبل GPT-6 Astra و GPT-6.1 Sol القيمةreasoning.effort=none، كما أن استدعاء الأدوات في هذين النموذجين يتطلب استخدام Responses API. - Claude: تعتمد النماذج الحديثة أساسًا على Adaptive Thinking، إلى جانب إعدادات التفكير مثل effort. بعض النماذج الجديدة لم تعد تدعم وضع التفكير اليدوي القديم القائم على
budget_tokensالثابت. - Gemini: تستخدم النماذج المختلفة thinking level أو budget، وتختلف إمكانية إيقاف الاستدلال والمستويات المتاحة من نموذج لآخر. كما تختلف قواعد تعيين المعاملات بين واجهة API الأصلية ومدخل التوافق مع OpenAI.
عند تصميم ثلاث درجات لقوة الاستدلال في واجهة المنتج (“سريع، قياسي، معمّق”)، فإن أسماء الدرجات تعبّر عن نية المنتج. ويحتاج المحوّل إلى تحويلها إلى المعاملات التي يدعمها كل نموذج فعليًا، كما أن الموارد الحسابية التي تحصل عليها الشركات الثلاث عند الدرجة نفسها ليست متساوية. إضافة إلى ذلك، قد لا يتطابق ملخص التفكير الذي يراه المستخدم مع عدد رموز التفكير التي تُحتسب فعليًا، لذا يجب أن تعتمد إحصائيات التكلفة على حقول الاستخدام التي تعيدها الواجهة.
الحالة المشفّرة في استدعاء الأدوات متعددة الدورات هي من أكثر النقاط التي يغفل عنها الوكيل طويل المدى:
- قد تحتاج عناصر reasoning في OpenAI Responses واستدعاءات الأدوات إلى الاستمرار في الانتقال مع السجل.
- قد تحتوي كتل
thinking/redacted_thinkingفي Claude على حالة مشفّرة، ويجب الحفاظ على بنيتها الأصلية عند إرسالها مرة أخرى بعد تنفيذ الأدوات. - يتطلب الوضع stateless في Gemini Interactions الحفاظ على كتل thought والتوقيعات كما هي؛ وعند استخدام الوضع stateful، يمكن للخادم الحفاظ على جزء من الحالة.
حفظ النص الظاهر في نافذة الدردشة وحده لا يكفي لاستعادة تاريخ استدلال النموذج بشكل كامل. الخلل النموذجي هو: أن يخطئ الوكيل فجأة بعد الدورة الثالثة لاستدعاء الأدوات، أو أن يبدأ في تكرار خطوات أُنجزت بالفعل. والسبب عادةً هو فقدان كتلة التوقيع في إحدى الدورات الوسيطة.
2.4 توحيد أحداث البث المباشر (Streaming)
تختلف أنواع أحداث البث المباشر وترتيبها وإشارات انتهائها بين الشركات الثلاث. فقد يُخرج OpenAI Responses أحداثًا مثل response.output_text.delta، وزيادات استدعاء الأدوات، وحدث اكتمال response. أما تدفق Claude Messages فيستخدم أحداثًا مثل message_start وcontent_block_delta وmessage_delta. بينما تعتمد واجهة Gemini الأصلية على بنيتها الخاصة للإخراج والخطوات.
إذا كانت الواجهة الأمامية تحلّل أحداث المزوّد الخام مباشرة، فسيتعين تعديل كود الواجهة الأمامية في كل مرة تُدمج فيها نموذجًا جديدًا. لذلك يُنصح بتحويل الأحداث في الخادم الخلفي إلى بروتوكول أحداث داخلي موحّد:
| الحدث الداخلي | المعنى | نقاط المعالجة |
|---|---|---|
text_delta |
زيادة نصية | تُضاف إلى العرض مباشرة |
reasoning_summary |
ملخص التفكير | يمكن عرضه قابلًا للطي، والفوترة تعتمد على usage |
tool_call_start |
بداية استدعاء أداة | سجّل معرّف الاستدعاء واسم الدالة |
tool_call_args |
أجزاء المعاملات | تُجمّع حسب معرّف الاستدعاء أو الفهرس، ولا يمكن التحليل إلا بعد اكتمالها جميعًا |
tool_result |
نتيجة تنفيذ الأداة | تقابل معرّف الاستدعاء واحدًا لواحد |
usage |
إحصاءات الاستخدام | ميّز بين توكنات الإدخال والتخزين المؤقت والتفكير والإخراج |
completed |
انتهاء طبيعي | يجب استلام إشارة انتهاء واضحة |
error |
خطأ أو انقطاع التدفق | ميّز بين ما يمكن إعادة المحاولة فيه وما لا يمكن |
هناك ثلاث نقاط أعطال شائعة في معالجة البث. الأولى: تصل أجزاء معاملات عدة استدعاءات أدوات متبادلة، فتؤدي عملية التجميع حسب ترتيب الوصول إلى خلط المعاملات فيما بينها. الثانية: يُقطع نص JSON في أي موضع حرف، ومحاولة تحليله عند استلام نصفه تؤدي إلى throwing an exception. الثالثة: ينقطع الاتصال في منتصف الطريق دون استلام حدث الاكتمال، فتبقى الواجهة عالقة على حالة “جارٍ التوليد”. لذا يجب أن تعالج طبقة التحويل هذه الحالات الثلاث صراحةً.
2.5 الإخراج المنظم عبر JSON Schema وفروق قدرات الوسائط المتعددة
يوفّر المزوّدون الثلاثة جميعًا قدرات الإخراج المنظم، لكنهم يختلفون في خصائص JSON Schema المدعومة، والوضع الصارم، وطريقة الدمج مع استدعاء الأدوات. ويفصل Claude رسميًا بين آليتين: «JSON outputs» التي تقيّد بنية الإجابة النهائية، و«Strict tool use» التي تقيّد بنية معاملات استدعاء الأدوات. وعند استخدام بعض النماذج للتنسيق الصارم، قد تظهر أيضًا تكلفة إضافية لتجميع المخطط أو تخزينه مؤقتًا.
من الناحية الهندسية، يُنصح بأن يحتفظ التطبيق بنسخته القياسية الخاصة من JSON Schema، وأن يسجّل في سجل القدرات خصائص JSON Schema التي يدعمها كل نموذج. وللخصائص غير المدعومة، ينفّذ المهايئ تحويلاً تخفيضيًا. ومهما ادّعى النموذج من صرامة، يجب على جانب التطبيق أن يتحقق مرة أخرى بنفسه، وإذا فشل التحقق ينتقل إلى إعادة محاولة منضبطة أو مسار للإبلاغ عن الخطأ.
وينطبق الأمر نفسه على الوسائط المتعددة. فعبارة «دعم إدخال الصور» تصف فئة القدرة فقط، أما التفاصيل فتتطلب مقارنة النقاط التالية: أنواع الملفات المقبولة وأحجامها وعدد الصور، وقدرات الفيديو والصوت، وطريقة رفع الملفات، والحد الأقصى لنافذة السياق الطويلة ونطاقها الفعلي المتاح، والحد الأقصى لرموز الإخراج، وإمكانية دمج استدعاء الأدوات مع المدخلات متعددة الوسائط. وعدم دعم طبقة التوافق مع Claude لمدخلات audio وfile يمثّل قيدًا ملموسًا يجب تدوينه في السجل.
2.6 الفروق بين النماذج في التخزين المؤقت والفوترة ومعالجة الأخطاء
تختلف آليات التخزين المؤقت للموجهات بين الشركات الثلاث اختلافًا واضحًا:
- OpenAI: تدعم نماذج GPT-5.6 والنماذج اللاحقة التخزين المؤقت الضمني ونقاط توقف التخزين المؤقت الصريحة، ومدة الصلاحية (TTL) لها نوعان: 30 دقيقة و12 ساعة.
- Claude: يُحدَّد التخزين المؤقت التلقائي أو الصريح عبر
cache_control، ويدعم وضعين: 5 دقائق وساعة واحدة؛ لكن هذه القدرة غير مدعومة في طبقة التوافق مع OpenAI. - Gemini: توفر النماذج الجديدة تخزينًا مؤقتًا ضمنيًا تلقائيًا، وبعض الـ API والنماذج تدعم إنشاء كائنات تخزين مؤقت صراحةً.
بعد تبديل النموذج، لا يمكن عادةً إعادة استخدام التخزين المؤقت الخاص بالمزود الأصلي. وعند التحول من Claude إلى Gemini في منتصف الجلسة، تُحسب الطلب الأول على أساس الإدخال الكامل. وإذا كان تقدير التكلفة يفترض افتراضيًا أن «التخزين المؤقت يصيب دائمًا»، فكلما زادت وتيرة تبديل الاستراتيجية، زاد انحراف الفاتورة.
كما أن أسعار الوحدة القياسية لكل مزود تختلف اختلافًا واضحًا. الأسعار الرسمية القياسية حتى 2026-11-13 هي كما يلي (دولار أمريكي / مليون Token):
| النموذج | الإدخال | الإخراج | ملاحظات |
|---|---|---|---|
| GPT-6 Astra | $10 | $50 | استدعاء الأدوات يتطلب Responses API |
| GPT-6.1 Sol | $1 | $5 | استدعاء الأدوات يتطلب Responses API |
| Claude Sonnet 5.5 | $2 | $10 | — |
| Gemini 3.8 Flash | $0.75 | $3.75 | سعر ترويجي حتى 2026-12-31؛ ومن المخطط تعديله إلى $1.50 / $7.50 اعتبارًا من 2027-01-01 |
هذا الجدول يوضح فروق الفوترة فقط، فقدرات كل نموذج وظروف استخدامه مختلفة، ولا يمكن تحويل ارتفاع السعر أو انخفاضه مباشرةً إلى مقارنة أداء. ولا يشمل الجدول أيضًا تكاليف كتابة التخزين المؤقت واستدعاء الأدوات ومستويات الخدمة والزيادات التي يفرضها أطراف ثالثون.
💰 توصية لحساب التكاليف: تحتاج فواتير التطبيقات متعددة النماذج إلى تسجيل مفصّل حسب «الإدخال العادي، كتابة التخزين المؤقت، إصابة التخزين المؤقت، التفكير والإخراج، تكاليف الأدوات، رسوم السياق الطويل». وعند استدعاء عدة نماذج بشكل موحد عبر APIYI apiyi.com، يمكنك رؤية استهلاك كل نموذج في مكان واحد، ما يسهّل ربط استراتيجية التوجيه بالتكلفة الفعلية.
أما من ناحية معالجة الأخطاء، فإن معدل الطلبات ومعدل الـ Token والحصص والمهلات الزمنية وصيغ الأخطاء تختلف بين الثلاثة. وينبغي للتطبيق أن يبني تصنيفًا موحدًا للأخطاء: فشل المصادقة، النموذج غير مدعوم، معلمات غير صالحة، طلب كبير جدًا أو تجاوز السياق، تحديد المعدل 429، خطأ من الخادم، انقطاع الشبكة، انقطاع تدفق الاستجابة، فشل استدعاء الأدوات.
كما يجب أن يراعي الرجوع إلى نموذج بديل ما إذا كانت المهمة ذات آثار جانبية. فإذا انتهت مهلة النموذج الرئيسي بعد تنفيذ الأداة، ثم تحوّل النظام تلقائيًا إلى النموذج البديل وأعاد تشغيل المهمة بأكملها، فقد تُنفَّذ عمليات مثل الدفع أو إرسال البريد أو تعديل الملفات مرتين. والحل هو إضافة مفتاح幂等ية إلى الأدوات ذات الآثار الجانبية، بحيث يستأنف الرجوع من «الخطوات التي لم تُنفَّذ بعد» فقط.
3 كيف ينبغي تصميم بنية متوافقة مع واجهات API متعددة النماذج؟

الهيكل الموصى به من ست طبقات كما يلي:
- واجهة الأعمال: يسأل المستخدم، ويرفع المواد، ويختار النموذج والمهمة.
- تنسيق طلب موحّد: استخدام بنية موحدة لتمثيل سجل الرسائل، والمرفقات، وقائمة الأدوات، ومتطلبات الإخراج المهيكل، وشدة الاستدلال، ومعرّف المهمة.
- توجيه النماذج: اختيار GPT أو Claude أو Gemini بناءً على السعر، والقدرات، وزمن الاستجابة، والتوافر، وقواعد العمل.
- محول المزود (Provider Adapter): تحويل الطلب القياسي إلى التنسيق الأصلي لكل مزود، ثم إعادة تعيين النتيجة العائدة إلى التنسيق الداخلي.
- تنفيذ الأدوات وإدارة الحالة: الحفاظ على معرّفات الاستدعاء، وسجلات التنفيذ، وسياق المحادثة، وحالة الاستدلال لدى المزود، والتخزين المؤقت، والتعافي من الفشل.
- السجلات وحساب التكلفة: تسجيل النموذج، وعدد التوكنات (Tokens)، والتكلفة الفعلية، وزمن الاستجابة، والتخزين المؤقت، والأخطاء، واستدعاءات الأدوات في كل طلب.
3.1 إنشاء تنسيق موحّد للرسائل والأدوات
المبدأ الجوهري للتنسيق الموحّد هو تقسيم السجل إلى طبقتين من التخزين. الطبقة الأولى هي السجل القياسي العام، وتشمل رسائل المستخدم، والإجابة النهائية للنموذج، وطلبات الأدوات، ونتائج الأدوات، وهو سجل يستطيع أي مزوّد قراءته وفهمه. أما الطبقة الثانية فهي الحالة الخاصة بكل مزوّد، مثل عناصر reasoning وتوقيع thinking وكتل thought، وتُخزَّن معزولة حسب المزوّد، ولا تُعاد كما هي إلا عند إرسال الطلب إلى المزوّد نفسه.
from dataclasses import dataclass, field
from typing import Any, Literal
@dataclass
class ToolCall:
call_id: str # معرّف استدعاء موحّد، والمهايئ مسؤول عن الربط المتبادل مع معرّف المزوّد
name: str
arguments: dict[str, Any]
result: Any = None
idempotency_key: str = "" # يجب تعيينه للأدوات ذات الآثار الجانبية
@dataclass
class Message:
role: Literal["system", "developer", "user", "assistant", "tool"]
content: list[dict] # كتل متعددة الوسائط مثل النصوص والصور
tool_calls: list[ToolCall] = field(default_factory=list)
# حالة خاصة بالمزوّد: المفتاح هو اسم المزوّد، والقيمة هي التوقيع / كتلة reasoning المحفوظة كما هي
vendor_state: dict[str, Any] = field(default_factory=dict)
عند تبديل النموذج، يقرأ المهايئ الحقول القياسية ليبني طلبًا جديدًا. أما الأجزاء الموجودة داخل vendor_state والتي تنتمي إلى مزوّدين آخرين فلا تُرسَل، بينما تُعاد الأجزاء التي تنتمي إلى المزوّد الهدف كما هي دون تغيير.
3.2 التكيّف مع واجهات API الأصلية عبر محوّل المزوّد (Provider Adapter)
يتحمّل كل محوّل ثلاث مسؤوليات:
- تحويل المدخلات: تعيين الأدوار (مثل نقل system إلى حقل مستقل خاص بـ Claude)، وتحويل تعريفات الأدوات، وتخفيض مستوى الـ Schema، وتعيين مستويات الاستدلال.
- تحويل المخرجات: تحويل الاستجابة الأصلية وأحداث البث إلى الأحداث الداخلية الموضحة في القسم 2.4، وتعيين معرّفات استدعاء الأدوات إلى معرّفات موحّدة.
- معالجة الحالة: استخراج حالات المزوّد وحفظها، مثل التوقيعات وعناصر الاستدلال (reasoning items)، ثم تحديد ما إذا كان سيتم استخدام الاستمرار من جانب الخادم (
previous_response_id،previous_interaction_id) أم إعادة إرسال التاريخ بالكامل.
يمكن للسؤال والجواب العادي أن يسلك مسار المحوّل العام المتوافق مع صيغة OpenAI. أما الحالات التي تتطلب معاملات أدوات صارمة، أو التحكم في التخزين المؤقت، أو حالة تفكير مشفّرة، فتحتاج إلى تنفيذ محوّل أصلي منفصل لكلٍّ منها. بهذه الطريقة نحافظ على راحة المدخل الموحّد، ونمنح القدرات المتقدمة موقعًا واضحًا تُنفَّذ فيه.
3.3 استخدام سجل القدرات لتحديد الميزات المتاحة
يسجّل سجل القدرات ما هو مدعوم فعليًا بوحدة “النموذج + نقطة الوصول”، وقد يقابل النموذج الواحد سجلين مختلفين: أحدهما عند استخدامه عبر API الأصلية والآخر عبر طبقة التوافق. فيما يلي مثال على البنية، أما القيم الفعلية فيجب أن تعتمد على الوثائق الرسمية ونتائج اختباراتك الخاصة:
gpt-6.1-sol@responses:
tools: true
tool_api: responses # استدعاء الأدوات يتطلب استخدام Responses API
reasoning_effort: [low, medium, high] # لا يقبل none
vendor_state: reasoning_items
claude-sonnet@openai-compat:
tools: true
strict_tools: false # طبقة التوافق تتجاهل strict
prompt_caching: false
file_input: false
merges_system_developer: true
gemini-flash@interactions:
tools: true
builtin_tools: [google_search, url_context, code_execution]
vendor_state: thought_signatures
تستعلم طبقة التوجيه (routing) من السجل قبل اختيار النموذج. فإذا كان الطلب يحمل ملفًا، تُستبعد السجلات التي تحمل file_input: false؛ وإذا كان الطلب يحتاج معاملات أدوات صارمة، فلا تُختار إلا السجلات التي تحمل strict_tools: true. ويمكن لواجهة المنتج أيضًا أن تخفي الخيارات غير المدعومة في النموذج الحالي بناءً على ذلك، فتقلّ بذلك حالات ارتكاب المستخدم لأخطاء.
4 الاختبار والمراقبة قبل إطلاق توافق واجهات API متعددة النماذج
4.1 ستة اختبارات توافق: من الأسئلة البسيطة إلى سلسلة الأدوات متعددة الجولات
نفّذ الاختبارات الستة التالية بالترتيب من الأقل تعقيدًا إلى الأعلى:
- الأسئلة والأجوبة العادية: أرسل الموجه نفسه إلى ثلاثة نماذج، وتحقق من أن محتوى الإجابة وإحصاءات الرموز (Token) سليمة.
- الإخراج المتدفق: تأكد من وصول الإخراج باستمرار، ومن استقبال إشارة النهاية الصحيحة.
- استدعاء الأدوات: يستدعي النموذج أداة استعلام عن الطقس أو استعلام عن البيانات، وينفّذها التطبيق ثم يعيد النتيجة.
- حلقة الأدوات المتعددة: استدعاء الأدوات لأكثر من جولتين متتاليتين، مع التحقق من اكتمال السجل ومعرّفات الاستدعاء.
- JSON المنظم: الإخراج وفق المخطط (Schema) نفسه، والتحقق من البنية باستخدام مدقق على جانب التطبيق.
- تبديل النموذج: تبديل جلسة العمل نفسها بين GPT وClaude وGemini، مع التحقق من سلامة السياق وسجل الأدوات والإجابة النهائية.
البندان 4 و6 هما الأقدر على كشف مشكلات حالة الاستدلال، ويُفضّل إدراجهما في عملية التكامل المستمر. أعد تشغيلهما كل مرة تُرقّي فيها إصدار النموذج أو تغيّر نقطة الوصول.
4.2 إنشاء مراقبة موحدة للتكلفة والاستقرار
سجّل في كل طلب على الأقل الحقول التالية: النموذج ونقطة الوصول، ومعدل نجاح الطلبات، ونوع الاستثناء (حسب تصنيف القسم 2.6)، وزمن وصول أول حرف وإجمالي زمن المهمة، والرموز مفصّلة (الإدخال، وكتابة الذاكرة المؤقتة، وإصابة الذاكرة المؤقتة، والتفكير، والإخراج)، وعدد استدعاءات الأدوات وعدد مرات فشلها، وعدد مرات إعادة المحاولة والتراجع.
عند تقييم النموذج، انظر إلى إجمالي زمن المهمة الكاملة وإجمالي تكلفتها؛ فبيانات الطلب الواحد قيمتها المرجعية محدودة. النموذج الرخيص في سعر الوحدة، إذا كان معدل خطأ معاملات الأدوات فيه مرتفعًا ويحتاج إلى عدة جولات من إعادة المحاولة، فقد تكون تكلفته الإجمالية أعلى في الواقع.
5 دور بوابة API الموحدة في توافق واجهات API للنماذج المتعددة
5.1 تكاليف الربط والصيانة
استخدام ثلاثة نماذج في الوقت نفسه يعني ثلاث مجموعات من الحسابات، وثلاث مجموعات من المفاتيح، وثلاث منظومات للفوترة، وثلاث مجموعات من إعدادات SDK. بوابة API الموحدة تجمع كل هذا في مدخل واحد: إدارة مركزية لربط النماذج والبيانات الاعتمادية، وتقليل صيانة الإعدادات لدى كل مزوّد، وإمكانية اختيار النموذج والتبديل بينه على مستوى طبقة الإعداد، ورؤية موحدة للاستخدام والتكلفة. وبالنسبة للفرق التي تقارن أداء النماذج باستمرار، تصبح عتبة تجربة نموذج جديد أقل ارتفاعًا.
5.2 موقع APIYI: تقسيم العمل بين المدخل الموحد والتوافق مع القدرات الأصلية
APIYI منصة تجميع لواجهات API لنماذج الذكاء الاصطناعي الكبيرة؛ بمفتاح API واحد يمكنك استدعاء النماذج الشائعة مثل OpenAI وClaude وGemini عبر واجهة متوافقة مع OpenAI، مع فوترة حسب الاستخدام. وهي مناسبة لتأدية دور «المدخل الموحد للاستدعاء» في المعمارية: الأسئلة والأجوبة العادية، والإخراج التدفقي، ومقارنة النماذج، وتوجيه النماذج المتعددة، كلها قابلة للربط مباشرة.
أن يكون المدخل الموحد متطابقًا تمامًا مع القدرات الأصلية للمزوّد هما متطلبان تقنيان مختلفان. فعند ربط نموذج معيّن، لا يزال عليك أن تتحقق بندًا بندًا في سجل القدرات من نطاق دعم استدعاء الأدوات، وحالة التفكير، والوسائط المتعددة، والتخزين المؤقت، والمخرجات المهيكلة. أما المسارات التي تعتمد على قدرات أصلية مثل Responses API وcache_control والتوقيعات المشفرة، فيجب التأكد من أن نقطة النهاية المقابلة متاحة فعلًا قبل الإطلاق، أو حفظ محوّل أصلي مخصّص لها.
بدء سريع مع توافق API متعدد النماذج
مثال مبسّط: مقارنة ثلاثة نماذج بنفس الموجه
يستدعي الكود التالي ثلاثة نماذج بالتتابع عبر عميل OpenAI SDK نفسه، وهو ما يقابل البند الأول في القسم 4.1.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # واجهة APIYI الموحدة
)
# معرّفات النماذج حسب قائمة النماذج على المنصة
MODELS = ["你的GPT模型ID", "你的Claude模型ID", "你的Gemini模型ID"]
for model in MODELS:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "用一句话解释什么是幂等"}],
)
print(model, "→", resp.choices[0].message.content)
print("usage:", resp.usage)
اطلع على التنفيذ الكامل: أحداث بث موحدة + سجل القدرات + التحقق من الأدوات
import json
import openai
from openai import OpenAI
from jsonschema import validate, ValidationError
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # واجهة APIYI الموحدة
)
# سجل القدرات: القيم مجرد أمثلة هيكلية، حافظ عليها وفق الوثائق الرسمية ونتائج الاختبار الفعلي
CAPABILITIES = {
"gpt": {"model": "معرّف نموذج GPT الخاص بك", "tools_via": "responses"}, # استدعاء الأدوات يجب أن يمر عبر محوّل Responses
"claude": {"model": "معرّف نموذج Claude الخاص بك", "tools_via": "chat"},
"gemini": {"model": "معرّف نموذج Gemini الخاص بك", "tools_via": "chat"},
}
def classify_error(e: Exception) -> str:
"""تصنيف موحّد للأخطاء يحدد ما إذا كان يمكن إعادة المحاولة"""
if isinstance(e, openai.AuthenticationError):
return "auth_failed"
if isinstance(e, openai.NotFoundError):
return "model_not_supported"
if isinstance(e, openai.RateLimitError):
return "rate_limited" # يمكن إعادة المحاولة مع تراجع زمني
if isinstance(e, openai.BadRequestError):
return "invalid_request" # خطأ في المعاملات أو تجاوز السياق، لا تُعد المحاولة بشكل أعمى
if isinstance(e, openai.APIConnectionError):
return "network_error"
if isinstance(e, openai.InternalServerError):
return "server_error"
return "unknown"
def stream_chat(provider: str, messages: list, tools: list | None = None):
"""تحويل تدفّق بصيغة متوافقة مع OpenAI إلى أحداث داخلية موحّدة"""
cap = CAPABILITIES[provider]
if tools and cap["tools_via"] != "chat":
raise NotImplementedError(f"{provider} 的工具调用请交给原生适配器处理")
kwargs = {
"model": cap["model"],
"messages": messages,
"stream": True,
"stream_options": {"include_usage": True},
}
if tools:
kwargs["tools"] = tools
calls: dict[int, dict] = {} # دمج أجزاء معاملات استدعاءات الأدوات المتوازية حسب index
finished = False
try:
for chunk in client.chat.completions.create(**kwargs):
if not chunk.choices:
if chunk.usage:
yield {"type": "usage", "data": chunk.usage.model_dump()}
continue
choice = chunk.choices[0]
delta = choice.delta
if delta.content:
yield {"type": "text_delta", "data": delta.content}
for tc in delta.tool_calls or []:
slot = calls.setdefault(tc.index, {"id": None, "name": "", "args": ""})
if tc.id:
slot["id"] = tc.id
if tc.function and tc.function.name:
slot["name"] = tc.function.name
yield {"type": "tool_call_start", "data": {"id": slot["id"], "name": slot["name"]}}
if tc.function and tc.function.arguments:
slot["args"] += tc.function.arguments
yield {"type": "tool_call_args", "data": {"index": tc.index}}
if choice.finish_reason:
finished = True
yield {"type": "completed", "data": {
"finish_reason": choice.finish_reason,
"tool_calls": list(calls.values()),
}}
except Exception as e:
yield {"type": "error", "data": classify_error(e)}
return
if not finished:
yield {"type": "error", "data": "stream_interrupted"} # انقطاع التدفّق في منتصفه
EXECUTED_KEYS: set[str] = set() # في بيئة الإنتاج استبدله بتخزين دائم
def run_tool(call: dict, schema: dict, func, idempotency_key: str | None = None):
"""تحقّق من المعاملات أولاً، ثم نفّذ بشكل عيدي"""
try:
args = json.loads(call["args"]) # لا تُحلّل إلا بعد اكتمال تجميع الأجزاء
validate(instance=args, schema=schema)
except (json.JSONDecodeError, ValidationError) as e:
return {"error": f"invalid_arguments: {e}"}
if idempotency_key:
if idempotency_key in EXECUTED_KEYS:
return {"skipped": "already_executed"}
EXECUTED_KEYS.add(idempotency_key)
return func(**args)
# مثال على الاستخدام
for event in stream_chat("claude", [{"role": "user", "content": "介绍一下流式输出"}]):
print(event)
🚀 بدء سريع: سجّل عبر APIYI على apiyi.com للحصول على رصيد اختبار مجاني، ثم استخدم الشيفرة أعلاه لإكمال أول اختبارين في القسم 4.1 باستخدام مفتاح API نفسه. أما الاختبارات المتعلقة باستدعاء الأدوات والاستدلال متعدد الجولات، فتحقق منها لكل نموذج على حدة بالاستعانة بسجل القدرات.
الأسئلة الشائعة FAQ
س1: ما المقصود تحديدًا بمشكلات توافق API بين نماذج متعددة؟
هي الاختلافات التي يجب التعامل معها عندما يبدّل التطبيق الواحد بين GPT وClaude وGemini، بسبب اختلاف بنية API الأصلية لكل منها. وتشمل أساسًا 6 فئات: أدوار الرسائل، واستدعاء الأدوات، وحالة الاستدلال، وأحداث البث، والمخرجات المنظمة والوسائط المتعددة، وفوترة التخزين المؤقت ومعالجة الأخطاء.
س2: عند استخدام واجهة متوافقة مع OpenAI لاستدعاء Claude وGemini، هل ما تزال هناك حاجة إلى طبقة تكييف؟
يمكن استخدام الواجهة المتوافقة مباشرةً في الدردشة العادية. أما عندما يتعلق الأمر بمعاملات أدوات صارمة، أو Prompt Caching، أو إدخال الملفات، أو حالة التفكير المشفرة، فستحتاج إلى طبقة تكييف. وعلى سبيل المثال، تتجاهل طبقة التوافق الرسمية من Claude القيمة `strict`، ولا تدعم التخزين المؤقت ولا إدخال `audio/file`. وينبغي تسجيل هذه الاختلافات في سجل القدرات.
س3: في مشروع Gemini جديد، هل يُفضَّل استخدام Interactions API أم generateContent؟
دخلت Interactions API مرحلة GA في يونيو 2026، وتوصي Google باعتمادها أولًا في المشاريع الجديدة. وهي تدعم حالة الجلسة على الخادم، و`previous_interaction_id`، وبنية `steps`. ولا يزال `generateContent` مدعومًا، ويمكن للمشاريع القائمة الانتقال وفق خطة محددة.
س4: عند تبديل النموذج في منتصف الجلسة، كيف نتعامل مع السجل؟
تُخزَّن رسائل المستخدم والإجابات النهائية وطلبات الأدوات ونتائجها في سجل قياسي، وبعد التبديل يعيد المحول الهدف تجميعها. أما الحالات الخاصة بكل مزود، مثل التوقيعات وعناصر الاستدلال، فتُخزَّن بشكل منفصل، ولا تُعاد كما هي إلا عند إرسال طلب إلى المزود نفسه. كذلك، بعد التبديل لا يمكن عادة إعادة استخدام ذاكرة المزود السابق المؤقتة، لذا يجب احتساب تكلفة الإدخال الكامل في الجولة الأولى.
س5: كيف أتحقق سريعًا من توافق النماذج الثلاثة مع عملي؟
ننصح باتباع الخطوات التالية:
1. زُر APIYI على apiyi.com وأنشئ حسابًا، واحصل على مفتاح API وائتمان اختبار مجاني.
2. استخدم الكود الوارد في هذا المقال، واضبط `base_url` على عنوان واجهة APIYI، ثم أدخل معرّفات النماذج الثلاثة.
3. نفّذ اختبارات القسم 4.1 الستة بالترتيب، وسجّل معدل النجاح وأنواع الأخطاء والتكلفة والزمن الإجمالي.
س6: ما الذي يجب الانتباه إليه عند إعداد التبديل الاحتياطي التلقائي بين النماذج؟
ابدأ بتحديد ما إذا كانت المهمة ذات آثار جانبية. يجب أن تحمل الأدوات مثل الدفع أو إرسال البريد أو تعديل الملفات مفتاح idempotency، وعند التبديل الاحتياطي أكمل من الخطوة غير المكتملة بدلًا من إعادة تشغيل المهمة كاملة. تناسب تحديد المعدل وأخطاء الخادم إعادة المحاولة بتراجع زمني، بينما تتطلب أخطاء المعاملات وتجاوز نافذة السياق تصحيح الطلب قبل إرساله.
س7: كيف نتحكم في التكلفة عند التوجيه بين نماذج متعددة؟
سجّل التكلفة بحسب Token لكل بند، وقارن بالتكلفة الإجمالية للمهمة الكاملة. تختلف أسعار المزودين الثلاثة اختلافًا كبيرًا؛ على سبيل المثال، سعر الإخراج في GPT-6 Astra هو $50 لكل مليون Token، بينما السعر الترويجي الحالي لـ Gemini 3.8 Flash هو $3.75. ويمكنك عرض استخدام كل نموذج في مكان واحد على APIYI عبر apiyi.com، لاكتشاف المسارات عالية التكلفة بسرعة أكبر، ثم تعديل قواعد التوجيه بناءً على ذلك.
س8: ما هي حدود بوابة API الموحدة؟
البوابة توحّد نقطة الاستدعاء ومفتاح API والفوترة. أما القدرات المتقدمة الأصلية لدى المورّد (مثل استدعاء الأدوات المخصص لـ Responses API، و`cache_control`، وإرجاع التوقيع المشفّر)، فإن مدى توفرها يعتمد على دعم كل نقطة نهاية على حدة، ويحتاج الأمر إلى اختبار فعلي بندًا بندًا. والمسارات التي تعتمد على هذه القدرات ينبغي أن تحتفظ بمهايئ أصلي (native adapter) كحلٍّ تكميلي.
النقاط الأساسية لتوافق API متعدد النماذج Key Takeaways
- تغيير النموذج ≠ تغيير المعرّف: يمكن ترحيل الأسئلة والأجوبة العادية مباشرة، أما مسارات الوكيل (Agent) فتحتاج إلى معالجة 6 أنواع من الاختلافات.
- طبقة التوافق لها حدود: طبقة توافق Claude تتجاهل
strict، ولا تدعم التخزين المؤقت ولا إدخال الملفات. - يجب حفظ التوقيع كما هو: فقدان توقيع thinking / thought هو سبب شائع للأخطاء في سلاسل الأدوات متعددة الجولات.
- توحيد أحداث البث: يُخرج الخادم الخلفي 8 أنواع من الأحداث الداخلية، بينما تتعامل الواجهة الأمامية مع بروتوكول واحد فقط.
- سجل القدرات يقود التوجيه: تُسجَّل الوظائف المدعومة فعليًا بوحدة «النموذج + نقطة النهاية».
- التراجع يجب أن يكون آمن التكرار (idempotent): أضف مفتاح idempotency للأدوات ذات الأثر الجانبي لمنع التنفيذ المتكرر.
- اختبر قبل الإطلاق: استخدم الحصة المجانية من APIYI apiyi.com لتشغيل اختبارات التوافق الستة بنجاح.
الخلاصة
عندما يدمج تطبيق واحد بين GPT وClaude وGemini في الوقت نفسه، يكمن جوهر الأمر في تجميع الفروقات وإدارتها داخل عدد قليل من المكونات:
- توحيد تنسيق الرسائل والأدوات: يُخزَّن السجل القياسي والحالة الخاصة بكل مزوّد في طبقتين منفصلتين، بحيث لا يضيع السياق عند تبديل النماذج.
- محوّل المزوّد (Provider Adapter): يتولى تحويل المدخلات والمخرجات ومعالجة الحالة، وفيه تُدمج القدرات المتقدمة الأصلية.
- سجل القدرات: يسجّل بدقة ما يدعمه كل نموذج وكل نقطة نهاية من أدوات واستدلال ووسائط متعددة وSchema وتخزين مؤقت، وهو الذي يحدد التوجيه وخيارات الواجهة.
وعلى هذا الأساس، تُصان جودة الإطلاق من خلال ستة اختبارات توافق ومراقبة تفصيلية للتكاليف حسب البند. وفي مرحلة الاستدعاء العادي ومقارنة النماذج، يُنصح باستخدام APIYI عبر apiyi.com بمفتاح واحد لإتمام التحقق من عدة نماذج بسرعة، ثم تحديد أي المسارات تحتاج إلى تكييف أصلي بناءً على نتائج الاختبار.
📚 المراجع
- OpenAI Function Calling: استدعاء الأدوات و
call_idوfunction_call_output - الرابط:
developers.openai.com/api/docs/guides/function-calling -
الوصف: الشرح المرجعي الموثوق لبروتوكول استدعاء الأدوات في Responses API
-
دليل ترحيل أحدث نماذج OpenAI: معاملات الاستدلال ومتطلبات الواجهة في سلسلة GPT-6
- الرابط:
developers.openai.com/api/docs/guides/latest-model -
الوصف: قيود القيم المقبولة في
reasoning.effortومتطلبات Responses API -
OpenAI Prompt Caching: نقاط توقف التخزين المؤقت وTTL
- الرابط:
developers.openai.com/api/docs/guides/prompt-caching -
الوصف: آليات التخزين المؤقت الضمني والصريح
-
توافق Claude مع OpenAI SDK: نطاق الدعم والقيود في طبقة التوافق
- الرابط:
platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk -
الوصف: الفروقات في
strictوالتخزين المؤقت وإدخال الملفات ودمج system وغيرها -
Claude Extended Thinking: التفكير التكيفي وتوقيعات التفكير
- الرابط:
platform.claude.com/docs/en/build-with-claude/extended-thinking -
الوصف: قواعد إعادة إرسال كتل thinking في استدعاءات الأدوات متعددة الجولات
-
المخرجات المنظمة والتخزين المؤقت في Claude: مخرجات JSON، الاستخدام الصارم للأدوات،
cache_control - الرابط:
platform.claude.com/docs/en/build-with-claude/structured-outputs - الرابط:
platform.claude.com/docs/en/build-with-claude/prompt-caching -
الوصف: القيود المنظمة وأنماط التخزين المؤقت
-
Gemini Interactions API والتوافق مع OpenAI: الواجهة الجديدة ومدخل التوافق
- الرابط:
ai.google.dev/gemini-api/docs/interactions-overview - الرابط:
ai.google.dev/gemini-api/docs/openai -
الوصف: هيكل steps وحالة الجلسة وتعيين المعاملات المتوافقة
-
توقيعات التفكير واستدعاء الأدوات والتخزين المؤقت في Gemini
- الرابط:
ai.google.dev/gemini-api/docs/thought-signatures - الرابط:
ai.google.dev/gemini-api/docs/function-calling - الرابط:
ai.google.dev/gemini-api/docs/caching -
الوصف: الحفاظ على التوقيعات في نمط stateless، وبروتوكول الأدوات، والتخزين المؤقت الصريح
-
صفحات الأسعار الرسمية للشركات الثلاث
- الرابط:
developers.openai.com/api/docs/pricing - الرابط:
platform.claude.com/docs/en/models/sonnet-5-5/overview - الرابط:
ai.google.dev/gemini-api/docs/pricing - الوصف: مصدر بيانات جدول الأسعار في هذا المقال، تاريخ المراجعة 2026-11-13
المؤلف: فريق APIYI التقني
للتواصل التقني: نرحب بتواصلكم معنا عبر الصفحة الرئيسية لموقع APIYI، ولمزيد من المواد يمكنكم زيارة مركز الوثائق docs.apiyi.com