VOL57: Understanding Model Context Protocols in LLMs - The Future of AI Interaction
أهلًا وسهلا بكم في العدد السابع والخمسين من النشرة الأسبوعية لاقرأ-تِك 🚀
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد السابع والخمسين من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية، من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة، ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
Model Context Protocol
Strategies for Read Heavy Systems
Reinforcement Learning in AI | From Dama to AlphaGo
Introduction Into Logging and Monitoring in .NET
الإصدار الأول من مدونات فطين في تصميم النظم
Model Context Protocol
الـ MCP هو اختصار لـ Model Context Protocol، وده ببساطة بروتوكول أو أسلوب تواصل بيخلي نماذج الذكاء الاصطناعي (زي ChatGPT و Claude و Deepseek وغيرها) تقدر تفهم وتتفاعل مع العالم الخارجي زي التعامل مع الملفات، والـ APIs، والأدوات المختلفة، وقواعد البيانات.
كأننا بنوصّل مخ الذكاء الاصطناعي بالعالم الخارجي بشكل منظم أكتر وآمن.
بداية المشكلة
لنتخيل إننا عندنا مساعد ذكي زي ChatGPT، وعاوزين نطلب منه الآتي:
احنا عندنا وليكن E-Commerce Application وعملنا Export لملف Excel بالـ Orders اللي وصلتنا وعاوز اطلب من ChatGPT يشوفلي كام عميل طلب منتج معين بدل ماعمل ده بشكل يدوي ، وعاوزه يقولي شوية احصائيات كده على الطلبات اللي موجودة ونسب الطلب عليها.
هنعمل ده ازاي ؟
في الحالة العادية: بنروح نكلم ChatGPT واكتبله الـ Prompt وبالشكل ده لاني بكلمه من الـ Browser على سبيل المثال فأنا بروح اخد البيانات بتاعتي Copy أو برفعله الملف عشان يكون ليه Access عليه ويبدأ يفهم الطلب بتاعي ويبدأ في تنفيذه مش كده ؟
النموذج في الحالة دي مش هيقدر يفتح ملفات على جهازنا من نفسه. هو "ذكي" أه، ولكن ملوش Access ومش مربوط بالعالم الخارجي. يعني مش شايف جهازنا، ولا المتصفح، ولا أي أدوات بره السياق بتاعه.
فلو عاوز اطلب منه مثلا يعمل Code-Review على Code انا كاتبه ، مش هعرف اديله Access على الـ Repo بتاعتي ولو قدرت اعمل ده فمش هعرف اعمله بطريقة آمنة.
طب فيها ايه لو كتبنا Script يعمل Integration بالموضوع ده ؟
هنكتب Script يقدر يقرأ السياق من الـ Local Repository
ويـ Integrate مع الـ LLM Model ويبعتلهم الـ Prompt
وبعدين ننفذ الكلام ده
هنا هنلاقي اننا محتاجين كل واحد يعمل الموضوع ده ، عشان بس نقدر ندي Access للـ LLM Models على سبيل المثال انها تقدر تقرأ الـ Repositories والـ Codebase بتاعنا مش كده ؟
وهنا بالظبط بييجي دور الـ MCP.
ربط الذكاء الاصطناعي بالعالم الخارجي
الـ MCP بيخلّي الذكاء الاصطناعي يقدر يتواصل مع الأدوات الخارجية من خلال (MCP Servers).
Strategies for Read Heavy Systems
لما نيجي نتكلم عن الأنظمة اللي بتركز على عمليات القراءة أكتر من الكتابة، يعني الـ Systems اللي بيكون فيها نسبة قراءة للبيانات أكبر بكتير من نسبة الكتابة.
فلو كان الـ System اللي بتبنيه بيتضمن من المتطلبات بتاعته انه يكون Read Heavy ففيه شوية استراتيجيات ممكن نستخدمها عشان نحسن من الأداء ونضمن إن النظام يشتغل بكفاءة عالية.
فورقة وقلم وتعالوا نتكلم عن بعض الاستراتيجيات اللي ممكن نستخدمها.
Caching
أول استراتيجية وأكتر واحدة مشهورة هي الـ Caching. وفكرة الـ Caching ببساطة هي إنك بتحتفظ بنسخة من البيانات اللي بتتقرا كتير في مكان سريع زي الـ RAM فبالتالي البيانات دي بتكون In-Memory.
لما المستخدم بيطلب البيانات دي تاني، النظام بدل ما يروح يجيبها من الـ Database، ويكون فيه Latency نتيجة قراءة البيانات دي من الـ Disk بيجيبها علطول من الـ Cache.
فده طبعًا بيقلل الوقت اللي الـ System محتاجه علشان يجيب البيانات وبالتالي يقلل الحمل على الـ Database.
وفيه أنواع كتير من الـ Caching زي:
الـ In-Memory Caching: زي استخدام Redis أو Memcached. ده بيكون مفيد لما تكون محتاج الوصول للبيانات بسرعة فائقة.
الـ Application-Level Caching: في النوع ده بتحتفظ بنسخة من البيانات في الـ Application نفسه، زي لما تعمل Cache لنتائج API Calls.
Indexing
الـ Indexing بيساعد في تسريع عمليات البحث في الـ Database. فلما يكون عندنا Table فيها ملايين الـ Records، البحث جواها ممكن ياخد وقت طويل.
لكن لو عاملين Index على الـ Column مثلا اللي بنبحث بيه كتير، هنلاقي إن البحث بقى أسرع بكتير. زي ما يكون عندك فهرس في كتاب، بدل ما تقعد تدور على الكلمة في كل صفحات الكتاب، بتروح للفهرس وتوصل للمعلومة بسرعة.
وطبعًا بنأكد على ان عمل Indexing لازم يتم بعناية وانك تكون فاهم كويس ايه الـ Column اللي فعلا ممكن تحتاج يتعملها Indexing عشان تساعد في تحسين الاداء.
أنواع الـ Indexes:
الـ B-Tree Index: ده النوع الافتراضي في معظم الـ Databases. بيكون فعال في معظم حالات البحث.
الـ Hash Index: بيكون أسرع في عمليات البحث عن القيم الدقيقة لكنه مش مفيد في عمليات البحث عن نطاق معين من القيم واللي بيعرف بالـ Range Based Queries.
Reinforcement Learning in AI | From Dama to AlphaGo
في عالم الذكاء الاصطناعي، التعلم المعزز بيعتبر من أهم الأساليب اللي ساعدت في تطوير الأنظمة الذكية. الفكرة دي بتعتمد على التجربة والخطأ، يعني الأنظمة بتتعلم من خلال اتخاذ قرارات والتفاعل مع البيئة بناءً على القرارات دي. واحد من أكبر التطبيقات اللي استخدمت التعلم المعزز هو في الألعاب، من الداما و الشطرنج لحد ما وصلنا ل ALPHAGO، البرنامج اللي غير بشكل كبير مفهوم الذكاء الاصطناعي في الألعاب.
ماذا يعني التعلم المُعزز (Reinforcement Learning)؟
التعلم المعزز (Reinforcement Learning) هو نوع من التعلم الآلي اللي فيه الوكيل (البرنامج الذكي) بياخد قرارات في بيئة معينة بهدف تحقيق أكبر مكافأة أو تقليل العقوبات على المدى الطويل. الوكيل ده بيتعلم من التجربة والخطأ، يعني كل مرة بياخد فيها قرار وبيشوف النتيجة، يقدر يحسن قراراته في المرات الجاية. الفكرة كلها إن الوكيل يتعلم من الأخطاء والتجارب علشان يحقق أفضل نتيجة.
التعلم المعزز في الألعاب التقليدية
من البداية، كانت الألعاب من أكتر المجالات اللي استخدموا فيها التعلم المعزز. ألعاب زي الداما و الشطرنج كانت بيئات مثالية لاختبار الأنظمة الذكية، لأنها تحتوي على قواعد واضحة وتفاعلات واضحة ممكن للوكيل إنه يتعلم منها ويحسن أدائه.
الداما:
في سنة 1959، بدأ آرثر صموئيل استخدام التعلم المعزز علشان يطور برنامج يتعلم يلعب الداما. البرنامج ده كان بيجرب حركات مختلفة ويتعلم منها حسب النتيجة، لو نجح أو فشل. والفكرة دي بينت قدرة الكمبيوتر على التكيف وتحسين أدائه مع مرور الوقت. زي ما الإنسان بيتعلم من أخطائه، الأنظمة الذكية كمان بتتعلم من تجاربها وتتحسن.
الشطرنج:
لعبة الشطرنج كانت واحدة من أبرز الألعاب اللي استخدم فيها التعلم المعزز. الشطرنج لعبة بتحتاج تفكير استراتيجي طويل المدى، ومن خلال التجارب المتكررة، الأنظمة الذكية بتتعلم إزاي تاخد أفضل الحركات بناءً على النتائج اللي حصلت عليها في التجارب السابقة. مع الوقت، الأنظمة دي قدرت تحقق مستويات عالية جدًا في الشطرنج، زي برنامج ديب بلو اللي هزم بطل العالم غاري كاسباروف في سنة 1997. التعلم المعزز هنا ساعد النظام في إنه يحسن أداءه مع كل تجربة جديدة.
خصم 50% على جميع خطط الاشتراك السنوية لفترة محدودة، تقدروا دلوقتي تشتركوا في اقرأ-تِك وتستمتعوا بكافة المقالات في كل ما يخص هندسة البرمجيات باللغة العربية والمحتوى المميز من ورقة وقلم ومدونات فطين اللي بيتميزوا بتصاميم ذات جودة عالية وكل ده بحرية كاملة وكمان مفاجآت اقرأ-تِك الجاية 🚀
وبرضو متاح الاشتراك من خلال InstaPay و VodafoneCash 🎁
مدونات فطين في تصميم النظم - الإصدار الأول 🚀
كتابة هذا الكتاب لم تكن قرارًا مخططًا... بل كانت نتيجة لتراكمات من الحيرة، الإحباط، والدهشة اللي بيواجهوا أغلب الشباب حاليًا خصوصًا في رحلة البحث عن تعلم مهارات تصميم النظم واللي أصبحت من المهارات الأساسية في الانترفيوهات بالإضافة لكونها مهمة فعلًا على جميع المستويات.
على مدار سنوات من العمل داخل شركات تكنولوجية متعددة، وجدت نفسي مرارًا أواجه بعض الأسئلة زي:
لماذا صُمّم هذا النظام بهذه الطريقة؟
لماذا لم نرَ المشكلة إلا بعد فوات الأوان؟
هل كان يمكن أن نصمم الأمر بشكل أبسط؟
الإجابات كانت دائمًا معقدة، وتعود لأبعاد تقنية وتنظيمية ونفسية أيضًا.
هذا الكتاب ليس دليلًا أكاديميًا، بل هو مجموعة من التجارب والخبرات العملية كتبتها بعين المهندس الذي يراقب، يسأل، ويُخطئ ثم يتعلّم. المجموعة دي لم يتم ترجمتها للعربية من مدونات الشركات العالمية .. بل تم اعادة شرحها وتبسيطها باللغة العربية بأسلوب مختلف حتى تتسم بالبساطة بالإضافة لتميزها بالرسوم التوضيحية الجذابة.
اخترت اسم "فَطين" لأنه الشخصية التي تمنيت لو كانت موجودة معي منذ البداية— يسأل الأسئلة الصحيحة، ويفكّر بصوت عالٍ، ويحكي لك الدروس المستفادة.
إن كنت مهندسًا في بداية الطريق، أو تعمل منذ سنين ولديك خبرة متوسطة أو متقدمة في تصميم وبناء النظم فهذا الكتاب كتبته لك ليكون مرجعًا عمليًا لك يساعدك في تطوير مهاراتك التحليلية والفكرية في بناء وتطوير النظم الضخمة.
يتناول الكتاب ما يعادل من 15 تجربة عملية مميزة من داخل الشركات العالمية في تصميم النظم الضخمة بأكتر من 160 صفحة ويضم الآتي :
Introduction Into System Design
How Uber Serves Over 40 Million Reads Per Second
How Discord Stores Trillions of Messages
Dropbox's Chrono: Scalable, Consistent and Metadata Caching Solution
Unlocking Notion's Power - The Data Model Explained
How Shopify Mitigates Deadlocks in High Concurrency Environments
How LinkedIn Improves Microservices Performance With Protobuf
How Figma Secures Internal Web Applications
How GitHub Improves Reliability of Code Push Processing
How Meta Leverages AI For Efficient Incident Response
How Stripe Architected Massive Scale Observability Solution on AWS
Change Data Capture at Pinterest
How Canva Built Scalable and Reliable Content Usage Counting Service
How Netflix Migrates Critical Traffic at Scale With No Downtime
How Slack Handles Billions of Tasks in Milliseconds
How YouTube Supports Billions of Users With MySQL
System Design Comprehensive Guide
تقدروا تشوفوا النسخة كاملة من هنا كـ E-Book ، وحاولنا نخليها بسعر رمزي يناسب الجميع 👇
وكمان وفرناه على Kindle عشان الناس اللي بتحب تجربة القراءة على الـ Kindle منحرمهاش من التجربة الممتعة دي 🎉
بفضل الله أصبح متاح حاليا دعمنا من خلال الرعاة والشراكات وفعلنا الـ Sponsorship واحنا بنرحب بجميع الشراكات مع المؤسسات والشركات وأصحاب الأعمال لبناء مجتمع عربي يشجع على القراءة والتعلم ومشاركة التجارب والخبرات العملية في هندسة البرمجيات.
دورك كشريك أو راعي هيكون محوري في دعم المحتوى وتوسيع نطاق تأثيره. فانضم لرحلتنا وكن جزءًا من صناعة مستقبل التكنولوجيا في المنطقة 🚀
تقدروا تشوفوا التفاصيل كاملة من هنا والـ Analytics بتاعتنا من خلال اقرأ-تِك والنشرة الأسبوعية 👇
Introduction Into Logging and Monitoring in .NET
التسجيل والمراقبة من أهم الأدوات التي لازم تكون موجودة في أي تطبيق ويب حديث. ده بيساعدك على تتبع الأخطاء وتحليل أداء التطبيق بشكل مستمر، وبيخليك قادر تلاحظ أي مشاكل أو مناطق محتاجة تحسين في الوقت الحقيقي.
ما هو الـ Logging
الـ Logging هو عملية تتبع وتسجيل الأحداث التي تحدث في النظام أثناء تشغيل التطبيق. ممكن تكون الأحداث دي عبارة عن أخطاء، تحذيرات، أو حتى أحداث مهمة زي دخول المستخدمين للتطبيق أو تنفيذ عمليات معينة. السجلات دي بتساعدك في التعرف على أي مشاكل ممكن تحصل وتحليل أداء التطبيق بشكل أفضل.
في .NET Core، عملية الـ Logging بتتم بشكل سهل ومرن، وبتسمح لك بتسجيل بيانات مفيدة لمراقبة التطبيق وحل أي مشاكل قد تظهر.
كيفية إضافة الـ Logging في .NET
لتفعيل التسجيل في تطبيقك، لازم تبدأ بتكوين خدمة الـ Logging في مشروعك. وده بيتم من خلال الـ Startup.cs، وهو الملف المسؤول عن إعداد خدمات التطبيق.
إعداد الـ Logger في Startup.cs:
أول خطوة هي أنك تضيف خدمة الـ Logging داخل ConfigureServices في ملف Startup.cs. دي خطوة أساسية عشان تقدر تستخدم الـ Logger في جميع أجزاء التطبيق:
الخطوة دي بتخلي التطبيق جاهز لاستخدام الـ Logger في أي مكان داخل التطبيق.
استخدام الـ Logger في الـ Controller
بعد ما تكون قدّمت خدمة الـ Logging في التطبيق، تقدر تستخدمها في أي Controller عاوز تسجل فيه الأحداث. بيكون عندك الـ ILogger كـ خدمة معتمدة (Dependency) اللي تقدر تستخدمها لتسجيل أي أحداث داخل التطبيق.
مثال على استخدام الـ Logger في الـ Controller:
هنا، احنا استخدمنا الـ ILogger داخل HomeController لتسجيل حدث لما المستخدم يزور الصفحة الرئيسية. بنستخدم LogInformation لتسجيل رسالة معلوماتية عن زيارة الصفحة. ده بيساعدك تتابع متى وأين تمت الزيارة.
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇