بناء نظام أساسي لعامل الذكاء الاصطناعي متعدد المستأجرين كحل .NET واحد: قرارات التصميم والدروس التي تم الحصول عليها بشق الأنفس

قضيت الأشهر الثمانية الأخيرة من الليالي وعطلات نهاية الأسبوع في بناء منصة عميل الذكاء الاصطناعي لتعليم نفسي الذكاء الاصطناعي...

27 يوليو 2026 2 دقائق قراءة

لقد أمضيت الأشهر الثمانية الأخيرة من الليالي وعطلات نهاية الأسبوع في بناء منصة وكيل الذكاء الاصطناعي لتعليم نفسي الذكاء الاصطناعي بشكل صحيح، بعد أكثر من 20 عامًا من العمل كمهندس مؤسسي. يقوم المنتج بتحويل الإجراءات الموثقة - إجراءات التشغيل المعيارية (SOPs) والسياسات ودفاتر التشغيل - إلى وكلاء عاملين مكشوفين كنقاط نهاية لواجهة برمجة التطبيقات (API)، مع عزل كل مستأجر، والحد الأقصى للإنفاق، والمفاتيح المحددة النطاق، والحدود المستندة إلى الخطة، وتدقيق التشغيل الكامل. حل .NET واحد: EF Core، وطبقة معالج، وAzure OpenAI وراء تجريد الموفر بحيث يمكن تبديل مساحة العمل إلى Anthropic، أو Gemini، أو المفتاح الخاص بها.

تبين أن الذكاء الاصطناعي يمثل 20% من العمل. تتناول هذه المقالة الـ 80% الأخرى، والقرارات المعمارية التي جعلت من الآمن تسليمها للغرباء، وما كلفني تعلمه.

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

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

خطط للاستحقاقات كجدول قواعد واحد. أعداد الوكلاء، والوصول إلى واجهة برمجة التطبيقات (API)، والجدولة، والموصلات، والمقاعد - يتم حلها جميعًا من نوع PlanEntitlements ثابت واحد. لا يمكن أبدًا أن تختلف صفحة التسعير، واستجابات واجهة برمجة التطبيقات 402، ولافتات واجهة المستخدم حول ما يتضمنه المستوى، لأنه يوجد مكان واحد فقط للسؤال. النتيجة الطبيعية التي تعلمتها تقريبًا علنًا: صفحة التسعير الخاصة بك هي وعد يجب على الكود الخاص بك الوفاء به. كدت أن أطلق برصاص "15 عميلاً" دون أن ينفذ أي شيء.

عزل المستأجر عبر عوامل تصفية الاستعلام العامة - مع الاستثناءات المدققة. تقوم مرشحات الاستعلام العامة الخاصة بـ EF Core بنطاق كل استعلام للمستأجر الحالي بشكل افتراضي. تظهر عمليات الهروب المتعمدة — IgnoreQueryFilters() — فقط في طرق عرض مسؤول النظام الأساسي التي من المفترض رؤيتها عبر المستأجرين، مما يجعلها قابلة للفهم في مراجعة التعليمات البرمجية: يجب أن يبرر كل حدث نفسه.

المصدر: dev.to