بث مباشر 18.11 · الدفعة 318 نوفمبر، 19:00 بتوقيت موسكو — ورشة عملية مجانية لوكلاء الذكاء الاصطناعي · الدفعة 3 تبدأ 23.11ورشة 18 نوفمبر ←الدفعة 3 (23.11)
إصدارتحليل · على الرادارModal Blog→ المصدر

Modal تربط الجلسة بحاوية واحدة وتحافظ على السياق عند إعادة الاتصال

يستطيع الوكيل الصوتي الاحتفاظ بالمحادثة في الذاكرة، إلى أن ينقل انقطاع الاتصال العميل إلى حاوية أخرى. أطلقت Modal ميزة Sticky Sessions: تعود طلبات الجلسة الواحدة إلى العملية نفسها، وتتوسع البنية التحتية بحسب عدد الجلسات النشطة. وهذا مفيد للروبوتات الصوتية وواجهات Gradio والغرف المشتركة؛ أما استعادة الحالة بعد عطل الحاوية فتحتاج إلى معالجة منفصلة.

معالج بواسطة الذكاء الاصطناعي من Modal Blog؛ بتحرير Hamidun News
Modal تربط الجلسة بحاوية واحدة وتحافظ على السياق عند إعادة الاتصال
المصدر: Modal Blog. كولاج: Hamidun News.
استمع للمقال
بطاقة الحقائق والأرقام
المعيارالتفاصيل
المصدر الأصليModal Blog ↗
رئيس التحرير
حقيقة رئيسية #1يوجّه رمز الجلسة الطلبات إلى الحاوية التي تحتفظ بحالتها.
حقيقة رئيسية #2تنتظر الجلسات الجديدة توفر مكان شاغر أو تشغيل حاوية إضافية.
حقيقة رئيسية #3يسري الربط طوال عمر الجلسة ولا يغني عن حفظ البيانات.

يتحدث روبوت صوتي مع المستخدم، فينقطع الاتصال، ويعيد المستخدم الاتصال ليجد نفسه أمام عملية لا تعرف عنه شيئًا. بالنسبة إلى البنية التحتية للخوادم قد يكون ذلك توزيعًا طبيعيًا للحمل، أما بالنسبة إلى المنتج فهو محادثة مكسورة. قدمت Modal ميزة Sticky Sessions: آلية توجّه طلبات الجلسة الواحدة إلى الحاوية نفسها وتوسّع البنية التحتية بحسب عدد الجلسات النشطة.

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

لماذا لا يكفي WebSocket وحده

لنتخيل خدمة للتدرب على مقابلات العمل بواسطة ذكاء اصطناعي صوتي. في الحاوية يعمل الوكيل ومعالجة الصوت، وفيها أيضًا حالة المحادثة الحالية. ينتقل المستخدم من Wi-Fi إلى الإنترنت المحمول، فيجب إنشاء الاتصال من جديد، لكن على المنتج أن يواصل المقابلة من النقطة نفسها.

كما تشرح Modal، يرتبط WebSocket في Web Functions لديها باستدعاء دالة محدد. وبعد الانقطاع يظهر استدعاء جديد قد يصل إلى حاوية أخرى. لذلك لا يحل WebSocket وحده مشكلة العودة إلى العملية السابقة.

الحل البديل هو حصر التطبيق في حاوية واحدة. عندها لا يجد الطلب مكانًا آخر يذهب إليه، لكن مع اختفاء مشكلة التوجيه تختفي أيضًا إمكانية التوسع الأفقي. وتوفر Modal Servers كذلك توجيهًا عبر الترويسة Modal-Affinity-Routing-Key، لكنه يعمل على أساس بذل أفضل جهد: فقد تُوقَف الحاوية أو تُستبدل.

تقدم Sticky Sessions ربطًا أشد صرامة طوال مدة الجلسة. وهذا مفيد خصوصًا لتطبيقات Gradio وStreamlit، حيث ترتبط حالة المستخدم بعملية خادم محددة. ولا يضطر المطوّر إلى إبقاء الخدمة كلها في نسخة واحدة من أجل استمرارية سيناريوهات مستخدمين بعينهم.

كيف يجد الطلب العملية المطلوبة

لتفعيل الآلية يُوضع على فئة Modal Server المزخرف @modal.sessioned()، ثم تُنشأ جلسة عبر SDK أو HTTP API. في المثال الذي قدمته الشركة، يعيد الاستدعاء sessions.start(idle_timeout=600) كائنًا يحتوي على رمز. ويمرر العميل هذا الرمز في الترويسة Modal-Authorization عند الطلبات اللاحقة.

الرمز موقّع ويحتوي على المعلومات اللازمة للتوجيه. يتحقق الوكيل (proxy) منه ويرسل الطلب إلى الحاوية التي تملك الجلسة. وبفضل ذلك لا يحتاج الوكيل إلى الاحتفاظ بجدول مطابقة متسق بين الجلسات والحاويات على جميع نسخه.

يمكن تمرير رمز واحد إلى عدة مشاركين في غرفة مشتركة. فمثلًا يتصل مستخدمان بالدردشة نفسها ويعملان على حالة موجودة في عملية واحدة. وتعيد إعادة الاتصال المشارك إلى الغرفة نفسها ضمن عمرها. ولأن الرمز يمنح الوصول إلى الجلسة، ينبغي التعامل معه في التطبيق كبيانات اعتماد.

وتتغير أيضًا وحدة التوسع. فالحاوية تقبل عددًا محددًا من الجلسات المتزامنة. وعندما لا تتوفر أماكن شاغرة، تنتظر الجلسات الجديدة انتهاء الجلسات القائمة أو جاهزية حاوية إضافية. ويأخذ التوسع التلقائي في الحسبان الجلسات النشطة وطابور الانتظار، لأن المحادثة التي بدأت لا يمكن نقلها اعتباطيًا إلى عملية مجاورة.

ما الذي يجب التحقق منه قبل الاعتماد

القيد الرئيسي: تثبيت المسار لا يعني سلامة البيانات عند عطل الحاوية. فالمنشور يصف استمرارية الطلبات ضمن الجلسة، لكنه لا يعد باستعادة ذاكرتها بعد الحادث. ولا يزال من الضروري حفظ سجل المحادثات ونتائج العمل وغيرها من البيانات المهمة بشكل منفصل إذا كان على المنتج أن يصمد أمام مثل هذه الأحداث.

وهناك أيضًا مسألة توزيع الحمل. فقد تستهلك جلستان موارد مختلفة: محادثة نصية قصيرة وتدفق صوتي متواصل يولّدان حملًا مختلفًا تمامًا. لذلك سيتعين اختيار عدد الجلسات لكل حاوية بحسب السيناريو الفعلي. ولا تنقل الآلية تلقائيًا جلسة ثقيلة قائمة من أجل موازنة الحمل.

أما للفريق الذي يعمل على وكلاء صوتيين أو على واجهة تعتمد على ذاكرة العملية، فهذه فرصة لفحص السلوك عند انقطاع الاتصال وتقدير تكلفة الجلسات الطويلة. تسد Sticky Sessions فجوة بنيوية محددة: فهي تتيح الجمع بين الإضافة التلقائية للحاويات وإعادة المستخدم إلى عملية قيد التشغيل. وتبقى خطة التعافي من الأعطال جزءًا من بنية التطبيق.

القصة

أسئلة وأجوبة حول الخبر

ما أبرز التفاصيل حول لماذا لا يكفي WebSocket وحده؟

لنتخيل خدمة للتدرب على مقابلات العمل بواسطة ذكاء اصطناعي صوتي. في الحاوية يعمل الوكيل ومعالجة الصوت، وفيها أيضًا حالة المحادثة الحالية. ينتقل المستخدم من Wi-Fi إلى الإنترنت المحمول، فيجب إنشاء الاتصال من جديد، لكن على المنتج أن يواصل المقابلة من النقطة نفسها. كما تشرح Modal، يرتبط WebSocket في Web Functions لديها باستدعاء دالة محدد. وبعد الانقطاع يظهر استدعاء جديد قد يصل إلى حاوية أخرى. لذلك لا يحل WebSocket وحده مشكلة العودة إلى العملية السابقة. الحل البديل هو حصر التطبيق في حاوية واحدة.

ما أبرز التفاصيل حول كيف يجد الطلب العملية المطلوبة؟

لتفعيل الآلية يُوضع على فئة Modal Server المزخرف @modal.sessioned()، ثم تُنشأ جلسة عبر SDK أو HTTP API. في المثال الذي قدمته الشركة، يعيد الاستدعاء sessions.start(idle_timeout=600) كائنًا يحتوي على رمز. ويمرر العميل هذا الرمز في الترويسة Modal-Authorization عند الطلبات اللاحقة. الرمز موقّع ويحتوي على المعلومات اللازمة للتوجيه. يتحقق الوكيل (proxy) منه ويرسل الطلب إلى الحاوية التي تملك الجلسة. وبفضل ذلك لا يحتاج الوكيل إلى الاحتفاظ بجدول مطابقة متسق بين الجلسات والحاويات على جميع نسخه.

ما أبرز التفاصيل حول ما الذي يجب التحقق منه قبل الاعتماد؟

القيد الرئيسي: تثبيت المسار لا يعني سلامة البيانات عند عطل الحاوية. فالمنشور يصف استمرارية الطلبات ضمن الجلسة، لكنه لا يعد باستعادة ذاكرتها بعد الحادث. ولا يزال من الضروري حفظ سجل المحادثات ونتائج العمل وغيرها من البيانات المهمة بشكل منفصل إذا كان على المنتج أن يصمد أمام مثل هذه الأحداث. وهناك أيضًا مسألة توزيع الحمل. فقد تستهلك جلستان موارد مختلفة: محادثة نصية قصيرة وتدفق صوتي متواصل يولّدان حملًا مختلفًا تمامًا. لذلك سيتعين اختيار عدد الجلسات لكل حاوية بحسب السيناريو الفعلي.

ZK
جمال حميدون — مدير المنتجات في Alpina Digital ومدير منتج AlpinaGPT. يبني منتجات الذكاء الاصطناعي منذ 2019. بدأ Hamidun News كمشروع شخصي ثم أصبح مُجمِّعًا إنتاجيًا بأكثر من 6000 قارئ.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
ما رأيك؟
جارٍ تحميل التعليقات…