مفتاح واحد لكل النماذج: كيف نستخدم بوابة Vercel للذكاء الاصطناعي
جدول المحتويات
عن الكاتب

Ahmed Mahmoud
كاتب ومطوّر
مهندس برمجيات شغوف بتطوير الويب وتصميم تجربة المستخدم.
مؤسّس ديفيا · eng-ahmed.com ↗بوابة Vercel للذكاء الاصطناعي هي نقطة نهاية واحدة توجّه استدعاءات AI SDK إلى أي مزوّد نماذج عبر سلسلة نصية بسيطة بصيغة "provider/model". في Devya أزلنا @ai-sdk/anthropic و @ai-sdk/openai وثلاثة مفاتيح API منفصلة، وصرنا نبدّل النماذج بتعديل سلسلة نصية واحدة بدل استبدال حزم SDK.
أبرز النقاط
بوابة Vercel للذكاء الاصطناعي واجهة موحّدة، متاحة عامًا منذ أغسطس 2025، تقع بين التطبيق وعدة مزوّدي نماذج لغوية بحيث يصل مسار كود واحد ومفتاح واحد إلى أي نموذج.
مع AI SDK تختار النموذج عبر سلسلة "provider/model" — مثل 'anthropic/claude-sonnet-5' أو 'openai/gpt-5' — بدل استيراد حزمة خاصة بمزوّد مثل @ai-sdk/anthropic.
تتيح النماذج الاحتياطية تحديد قائمة مرتّبة من النماذج؛ فإذا كان النموذج الأساسي مقيّدًا بالمعدل أو معطّلًا، تعيد البوابة المحاولة بالنموذج التالي في الطلب نفسه دون تفريعات في الكود.
تضيف البوابة قابلية للمراقبة (التكلفة وزمن الاستجابة وعدد الرموز لكل طلب) وتدعم عدم الاحتفاظ بالبيانات، فلم يعد تبديل المزوّد يعني إعادة ضبط التسجيل في كل مرة.
تستبدل البوابة توصيلات SDK وإدارة المفاتيح لكل مزوّد — لكنها لا تستبدل AI SDK نفسه؛ ما زلت تستدعي generateText و streamText ونفس واجهة استدعاء الأدوات.
ما بوابة Vercel للذكاء الاصطناعي وما المشكلة التي تحلّها؟
بوابة Vercel للذكاء الاصطناعي وكيل مُستضاف يعرض نقطة نهاية واحدة متوافقة مع OpenAI ويمرّر الطلبات إلى المزوّد الذي تسمّيه سلسلة النموذج. بدل الاحتفاظ بمفتاح Anthropic ومفتاح OpenAI ومفتاح Google — لكلٍّ SDK وسلوك تقييد خاص — تحتفظ بمفتاح بوابة واحد وتسمّي النموذج ضمن الكود.
المشكلة التي تحلّها هي ارتباط المزوّد على مستوى الكود. عندما يكون الاستدعاء anthropic('claude-sonnet-5')، فإن تجربة مزوّد آخر تعني استيرادًا جديدًا وعميلًا جديدًا وغالبًا شكل تسجيل جديد. أما عندما يكون الاستدعاء السلسلة 'anthropic/claude-sonnet-5'، فتجربة 'openai/gpt-5' تعديل سطر واحد.
كيف ننتقل من SDK المزوّد إلى البوابة؟
تحذف استيراد حزمة المزوّد وتمرّر سلسلة "provider/model" مباشرة إلى حقل model في AI SDK. تحلّ AI SDK أي سلسلة مجرّدة عبر البوابة افتراضيًا. في النسخة السابقة يرتبط الاستدعاء بمزوّد واحد: generateText({ model: anthropic('claude-sonnet-5'), prompt }). وفي النسخة اللاحقة لا يوجد استيراد مزوّد ومفتاح واحد (AI_GATEWAY_API_KEY) في البيئة: generateText({ model: 'anthropic/claude-sonnet-5', prompt }).
كل ما يليه — streamText لبثّ الرموز و generateObject للمخرجات المقيّدة بمخطط واستدعاء الأدوات — يبقى كما هو. الشيء الوحيد الذي تغيّر هو طريقة تسمية النموذج. صار النموذج إعدادًا لا كودًا.
متى نستخدم النماذج الاحتياطية؟
استخدم النماذج الاحتياطية عندما يجب أن ينجح الطلب حتى لو كان المزوّد المفضّل مقيّدًا بالمعدل أو يمرّ بعطل. تتيح البوابة تمرير قائمة مرتّبة من النماذج؛ تجرّب الأساسي، وعند خطأ المزوّد أو التقييد تعيد المحاولة بالنموذج التالي بشفافية ضمن الاستدعاء نفسه. نلجأ لهذا في المسارات التي يراها المستخدم — ردّ محادثة أو ملخّص ينتظره أحدهم — حيث الفشل الصريح أسوأ من إجابة نموذج مختلف قليلًا.
لا نستخدم النماذج الاحتياطية في المهام الخلفية التي يهمّ فيها ثبات سلوك النموذج. دفعة تلخيص ليلية يجب أن تفشل بوضوح وتعيد المحاولة بالنموذج نفسه، لا أن تجيب بصمت بنموذج آخر لم يُقيَّم خرجه. النماذج الاحتياطية تقايض الثبات بالتوافر؛ اصرف هذه المقايضة حيث يهمّ التوافر أكثر.
ما الذي تستبدله البوابة وما الذي يبقى؟
تستبدل البوابة سباكة كل مزوّد، لا AI SDK. ما زلت تكتب نفس استدعاءات SDK؛ وتتوقف عن كتابة الغراء المحيط بالمزوّد.
اختيار النموذج: سابقًا استيرادات anthropic('...') و openai('...')؛ مع البوابة سلسلة 'provider/model'.
الاعتمادات: سابقًا مفتاح API لكل مزوّد؛ مع البوابة مفتاح بوابة واحد.
تبديل المزوّد: سابقًا استيراد وعميل ومفتاح جديد؛ مع البوابة تعديل سلسلة النموذج.
الاحتياط عند العطل: سابقًا try/catch مكتوب يدويًا عبر العملاء؛ مع البوابة قائمة fallbacks مرتّبة.
رؤية التكلفة وزمن الاستجابة: سابقًا لوحات لكل مزوّد؛ مع البوابة مقاييس موحّدة لكل طلب. وشكل استدعاء SDK (generateText و streamText) لم يتغيّر.
ماذا عن التكلفة والاحتفاظ بالبيانات والمراقبة؟
تبلّغ البوابة عن التكلفة وزمن الاستجابة وعدد الرموز لكل طلب في مكان واحد، فلم تعد مقارنة نموذجين على نفس الطلب تعني تجميع صفحات فوترة مزوّدَين. كما تدعم وضع عدم الاحتفاظ بالبيانات، أي أن أجسام الطلب والاستجابة لا تُخزَّن لدى البوابة — وهو مهم حين يحمل الطلب بيانات عملاء وتحتاج إجابة واضحة عن تدفّق البيانات في مراجعة أمنية.
المكسب العملي هو القياس. حين يكون اختيار النموذج سلسلة والمقاييس موحّدة، فإن إجراء مقارنة حقيقية — نفس الطلب وثلاثة نماذج ونظرة على التكلفة والزمن — تعديل إعداد وقراءة لوحة، لا مشروع هندسي.
ما الذي نراقبه قبل الاعتماد الكامل
طبقة وساطة واحدة تعني اعتمادية إضافية في مسار الطلب. إذا تعطّلت البوابة تعطّلت كل استدعاءات النماذج، فحجة التوافر ذات حدّين، وما زلنا نحتفظ بقائمة احتياطية ومهلات معقولة. كما أن السلسلة المجرّدة محايدة تجاه المزوّد فقط حتى تعتمد على ميزة خاصة بمزوّد (صيغة أداة معيّنة أو ترويسة تحكّم بالتخزين)، وعندها تعود إلى خيارات المزوّد لكن ممرّرة عبر البوابة بدل SDK مخصّص.
الأسئلة الشائعة
س: هل ما زلنا نحتاج AI SDK إذا استخدمنا بوابة Vercel؟
ج: نعم. البوابة توجّه طلبات النماذج؛ وAI SDK هو ما تستدعيه في الكود (generateText و streamText و generateObject). تستبدل البوابة حزم SDK الخاصة بالمزوّد مثل @ai-sdk/anthropic، لا حزمة ai الأساسية.
س: كيف نختار نموذجًا عبر البوابة؟
ج: مرّر سلسلة "provider/model" إلى حقل model، مثل 'anthropic/claude-sonnet-5' أو 'openai/gpt-5'. تحلّ AI SDK سلاسل النماذج المجرّدة عبر البوابة افتراضيًا.
س: ماذا يحدث إذا قُيّد النموذج الأساسي بالمعدل؟
ج: إذا ضُبطت قائمة fallbacks مرتّبة، تعيد البوابة المحاولة بالنموذج التالي في الطلب نفسه. بدون احتياطي، يعيد الاستدعاء خطأ المزوّد لتتعامل معه بنفسك.
س: هل تحتفظ بوابة Vercel بالطلبات؟
ج: تدعم وضع عدم الاحتفاظ بالبيانات حيث لا تُحتفظ أجسام الطلب والاستجابة لدى البوابة. تحقّق من إعداد الاحتفاظ لحسابك قبل إرسال بيانات حسّاسة.
س: هل نستخدم SDK خاصة بمزوّد أصلًا في 2026؟
ج: اجعل التوجيه النصّي عبر البوابة هو الافتراضي للقابلية للنقل. لا تلجأ إلى SDK مزوّد مباشر إلا حين تحتاج قدرة خاصة بالمزوّد لا تعرضها البوابة.
قراءات إضافية
هندسة الذكاء الاصطناعي
بناء خادم MCP بعيد في Next.js باستخدام mcp-handler 2: الأدوات وOAuth ومواصفة 2026-07-28 عديمة الحالة
أصبحنا نبني خوادم MCP البعيدة كـ Route Handler واحد في Next.js باستخدام mcp-handler 2 ومواصفة MCP عديمة الحالة بإصدار 2026-07-28. نشرح هنا كيف نركّبها، وكيف نصمّم أدوات يستدعيها النموذج بشكل صحيح، وكيف نؤمّنها بـ OAuth وبيانات RFC 9728، وكيف نختبرها قبل اتصال أي عميل حقيقي.
هندسة الذكاء الاصطناعي
لماذا لا يوقف موجّه نظام أفضل حقنَ الأوامر: ملاحظاتنا الميدانية حول الثلاثية القاتلة والأدوات محددة الصلاحيات والمخرجات غير الموثوقة
أثناء بناء مساعد لصندوق الدعم يملك صلاحية استدعاء الأدوات، أدخل فريقنا تذكرة اختبار تحتوي على تعليمات مخفية، فنفّذ النموذج بعضها. هذه ملاحظاتنا الميدانية حول سبب كون حقن الأوامر مشكلة معمارية لا مشكلة صياغة، وكيف تكشف الثلاثية القاتلة ميزات الذكاء الاصطناعي الخطرة، وكيف نقيّد الأدوات بصلاحيات المستخدم المسجّل، ولماذا تحتاج الآثار الجانبية إلى تأكيد بشري، وكيف يتحول عرض Markdown إلى قناة لتسريب البيانات.