<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Azure | The .NET Blog</title><link>https://thedotnetblog.com/ar/tags/azure/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ar</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 25 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ar/tags/azure/index.xml" rel="self" type="application/rss+xml"/><item><title>Azure MCP Server الآن .mcpb — ثبّته بدون أي Runtime</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>Azure MCP Server متاح الآن كـ MCP Bundle (.mcpb) — نزّله، اسحبه إلى Claude Desktop وانتهى الأمر. لا Node.js ولا Python ولا .NET مطلوبة.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائيًا. للاطلاع على النسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;هل تعرف ما الذي كان مزعجًا في إعداد خوادم MCP؟ كنت بحاجة إلى runtime. Node.js لنسخة npm، وPython لـ pip/uvx، و.NET SDK لمتغير dotnet.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;غيّر Azure MCP Server كل ذلك للتو&lt;/a&gt;. أصبح متاحًا الآن كـ &lt;code&gt;.mcpb&lt;/code&gt; — MCP Bundle — والإعداد بالسحب والإفلات.&lt;/p&gt;
&lt;h2 id="ما-هو-mcp-bundle"&gt;ما هو MCP Bundle؟&lt;/h2&gt;
&lt;p&gt;فكّر فيه كامتداد VS Code (&lt;code&gt;.vsix&lt;/code&gt;) أو امتداد متصفح (&lt;code&gt;.crx&lt;/code&gt;)، ولكن لخوادم MCP. ملف &lt;code&gt;.mcpb&lt;/code&gt; هو أرشيف ZIP مكتفٍ بذاته يتضمن الملف الثنائي للخادم وجميع تبعياته.&lt;/p&gt;
&lt;h2 id="كيفية-التثبيت"&gt;كيفية التثبيت&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. نزّل الحزمة لمنصتك&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;انتقل إلى &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;صفحة GitHub Releases&lt;/a&gt; ونزّل ملف &lt;code&gt;.mcpb&lt;/code&gt; لنظام تشغيلك ومعماريتك.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. ثبّت في Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الطريقة الأسهل: اسحب ملف &lt;code&gt;.mcpb&lt;/code&gt; وأفلته في نافذة Claude Desktop بينما تكون على صفحة إعدادات الامتدادات (&lt;code&gt;☰ → ملف → الإعدادات → الامتدادات&lt;/code&gt;). راجع تفاصيل الخادم، انقر تثبيت، وأكّد.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. المصادقة على Azure&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az login
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;هذا كل شيء. يستخدم Azure MCP Server بيانات اعتماد Azure الموجودة لديك.&lt;/p&gt;
&lt;h2 id="للبدء"&gt;للبدء&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;التنزيل&lt;/strong&gt;: &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server-"&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;المستودع&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp"&gt;aka.ms/azmcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التوثيق&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp/docs"&gt;aka.ms/azmcp/docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;اطلع على &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;المقال الكامل&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>GPT-5.5 هنا ويأتي إلى Azure Foundry — ما يحتاج مطورو .NET معرفته</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</guid><description>GPT-5.5 متاح عمومًا في Microsoft Foundry. التطور من GPT-5 إلى 5.5، ما الذي تحسّن فعلًا وكيف تبدأ باستخدامه في وكلائك اليوم.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائيًا. للاطلاع على النسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;أعلنت Microsoft للتو أن &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;GPT-5.5 متاح عمومًا في Microsoft Foundry&lt;/a&gt;. إذا كنت تبني وكلاء على Azure، فهذا هو التحديث الذي كنت تنتظره.&lt;/p&gt;
&lt;h2 id="تطور-gpt-5"&gt;تطور GPT-5&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-5&lt;/strong&gt;: وحّد التفكير والسرعة في نظام واحد&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;: تفكير متعدد الخطوات أقوى، قدرات وكالية مبكرة للمؤسسات&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;: تفكير أعمق في السياق الطويل، تنفيذ وكالي أكثر موثوقية، كفاءة أفضل في الرموز&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ما-الذي-تغير-فعلا"&gt;ما الذي تغيّر فعلًا&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;برمجة وكالية محسّنة&lt;/strong&gt;: يحتفظ GPT-5.5 بالسياق عبر قواعد الشفرة الكبيرة، ويشخّص الإخفاقات المعمارية، ويتوقع متطلبات الاختبار. يستدل النموذج على &lt;em&gt;ما يؤثر فيه أيضًا&lt;/em&gt; الإصلاح قبل التصرف.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;كفاءة الرموز&lt;/strong&gt;: مخرجات أعلى جودة مع رموز أقل ومحاولات أقل. انخفاض مباشر في التكلفة والكمون في الإنتاج.&lt;/p&gt;
&lt;h2 id="التسعير"&gt;التسعير&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;النموذج&lt;/th&gt;
&lt;th&gt;المدخلات ($/M رمز)&lt;/th&gt;
&lt;th&gt;المدخلات المخزنة&lt;/th&gt;
&lt;th&gt;المخرجات ($/M رمز)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$30.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5 Pro&lt;/td&gt;
&lt;td&gt;$30.00&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$180.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="لماذا-يهم-foundry"&gt;لماذا يهم Foundry&lt;/h2&gt;
&lt;p&gt;يتيح لك Foundry Agent Service تعريف الوكلاء في YAML أو توصيلهم بـ Microsoft Agent Framework أو GitHub Copilot SDK أو LangGraph أو OpenAI Agents SDK — وتشغيلهم كوكلاء مستضافين معزولين مع نظام ملفات دائم وهوية Microsoft Entra مستقلة وتسعير بمقياس صفري.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aiProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-5.5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;أنت مساعد مفيد.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;وكيلي&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;اطلع على &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;الإعلان الكامل&lt;/a&gt; لجميع التفاصيل.&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes: نقطة نهاية واحدة لجميع أدوات وكلاء الذكاء الاصطناعي</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>أطلقت Microsoft Foundry ميزة Toolboxes في معاينة عامة — طريقة لإدارة أدوات وكلاء الذكاء الاصطناعي وعرضها عبر نقطة نهاية واحدة متوافقة مع MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المنشور تلقائيًا. للاطلاع على النسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ثمة مشكلة تبدو عادية حتى تواجهها بنفسك: تبني المؤسسة وكلاء ذكاء اصطناعي متعددة، كل منها يحتاج أدوات، وكل فريق يُهيؤها من الصفر. نفس تكامل البحث على الويب، نفس إعداد Azure AI Search، نفس اتصال خادم GitHub MCP — لكن في مستودع مختلف، من فريق مختلف، ببيانات اعتماد مختلفة، ودون أي حوكمة مشتركة.&lt;/p&gt;
&lt;p&gt;أطلقت Microsoft Foundry للتو &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; في معاينة عامة، وهو إجابة مباشرة على هذه المشكلة.&lt;/p&gt;
&lt;h2 id="ما-هو-toolbox"&gt;ما هو Toolbox؟&lt;/h2&gt;
&lt;p&gt;Toolbox هو حزمة أدوات مُسمّاة وقابلة لإعادة الاستخدام، تُعرَّف مرة واحدة في Foundry وتُعرض عبر نقطة نهاية واحدة متوافقة مع MCP. أي بيئة تشغيل وكيل تتحدث MCP يمكنها استهلاكه — دون قيد على Foundry Agents.&lt;/p&gt;
&lt;p&gt;الوعد بسيط: &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;. عرِّف الأدوات، هيِّئ المصادقة مركزيًا (OAuth passthrough، الهوية المُدارة في Entra)، انشر نقطة النهاية. كل وكيل يحتاج تلك الأدوات يتصل بنقطة النهاية ويحصل عليها جميعًا.&lt;/p&gt;
&lt;h2 id="الأركان-الأربعة-اثنان-متاحان-اليوم"&gt;الأركان الأربعة (اثنان متاحان اليوم)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الركن&lt;/th&gt;
&lt;th&gt;الحالة&lt;/th&gt;
&lt;th&gt;ما يفعله&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discover&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قريبًا&lt;/td&gt;
&lt;td&gt;إيجاد الأدوات المعتمدة دون بحث يدوي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;متاح&lt;/td&gt;
&lt;td&gt;تجميع الأدوات في حزمة قابلة لإعادة الاستخدام&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consume&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;متاح&lt;/td&gt;
&lt;td&gt;نقطة نهاية MCP واحدة تعرض جميع الأدوات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Govern&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قريبًا&lt;/td&gt;
&lt;td&gt;مصادقة مركزية + إمكانية مراقبة جميع استدعاءات الأدوات&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="مثال-عملي"&gt;مثال عملي&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.identity&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;FOUNDRY_PROJECT_ENDPOINT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;toolbox_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;toolboxes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_toolbox_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;toolbox_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;customer-feedback-triaging-toolbox&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;البحث في الوثائق والرد على issues في GitHub&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;web_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;البحث في الوثائق العامة&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;azure_ai_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;index_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;internal-docs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mcp_server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;server_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-github-mcp-server.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;بعد النشر، تُوفر Foundry نقطة نهاية موحدة. اتصال واحد، جميع الأدوات.&lt;/p&gt;
&lt;h2 id="لا-قيد-على-foundry-agents"&gt;لا قيد على Foundry Agents&lt;/h2&gt;
&lt;p&gt;تُنشأ Toolboxes وتُدار في Foundry، لكن سطح الاستهلاك هو بروتوكول MCP المفتوح. يمكن استخدامها من وكلاء مخصصة (Microsoft Agent Framework، LangGraph)، وGitHub Copilot وبيئات IDE الأخرى المتوافقة مع MCP.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-هذا-الآن"&gt;لماذا يهم هذا الآن&lt;/h2&gt;
&lt;p&gt;موجة الوكلاء المتعددة تصل إلى الإنتاج. كل وكيل جديد هو سطح جديد للإعداد المكرر والبيانات الاعتمادية القديمة والسلوك غير المتسق. أساس Build + Consume كافٍ للبدء في المركزة. حين يصل ركن Govern، ستتوفر طبقة أدوات قابلة للمراقبة الكاملة ومُتحكَّم بها مركزيًا لكامل أسطول الوكلاء.&lt;/p&gt;
&lt;h2 id="خلاصة"&gt;خلاصة&lt;/h2&gt;
&lt;p&gt;لا يزال مبكرًا — معاينة عامة، Python SDK أولًا، مع Discover وGovern في الطريق. لكن النموذج راسخ والتصميم الأصيل لـ MCP يعني أنه يعمل مع الأدوات التي تُبنى بالفعل. جميع التفاصيل في &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;الإعلان الرسمي&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: إعداد المشروع بالذكاء الاصطناعي وحل الأخطاء بذكاء</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>يتكامل Azure Developer CLI الآن مع GitHub Copilot لإنشاء بنية المشروع التحتية وحل أخطاء النشر — دون مغادرة الطرفية.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تُرجِمت هذه المقالة تلقائيًا. للاطلاع على النسخة الأصلية بالإنجليزية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;هل تعرف تلك اللحظة التي تريد فيها نشر تطبيق موجود على Azure فتجد نفسك تحدق في ملف &lt;code&gt;azure.yaml&lt;/code&gt; فارغ، محاولًا تذكر ما إذا كان Express API الخاص بك يجب أن يستخدم Container Apps أم App Service؟ تلك اللحظة أصبحت الآن أقصر بكثير.&lt;/p&gt;
&lt;p&gt;يتكامل Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) الآن مع GitHub Copilot بطريقتين عمليتين: سقالة المشروع بمساعدة الذكاء الاصطناعي خلال &lt;code&gt;azd init&lt;/code&gt;، واستكشاف الأخطاء وإصلاحها بذكاء عند فشل عمليات النشر. كلا الميزتين تعملان بالكامل داخل الطرفية.&lt;/p&gt;
&lt;h2 id="الإعداد-مع-copilot-أثناء-azd-init"&gt;الإعداد مع Copilot أثناء azd init&lt;/h2&gt;
&lt;p&gt;عند تشغيل &lt;code&gt;azd init&lt;/code&gt;، يظهر الآن خيار &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. اختره وسيحلل Copilot قاعدة التعليمات البرمجية الخاصة بك لإنشاء &lt;code&gt;azure.yaml&lt;/code&gt; وقوالب البنية التحتية ووحدات Bicep — بناءً على الكود الفعلي.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# اختر: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;المتطلبات:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 أو أحدث&lt;/strong&gt; — تحقق بـ &lt;code&gt;azd version&lt;/code&gt; أو حدّث بـ &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;اشتراك نشط في GitHub Copilot&lt;/strong&gt; (فردي أو للأعمال أو للمؤسسات)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;)&lt;/strong&gt; — سيطلب &lt;code&gt;azd&lt;/code&gt; تسجيل الدخول إذا لزم الأمر&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ما أجده مفيدًا حقًا: يعمل في الاتجاهين. تبني من الصفر؟ يساعدك Copilot على تهيئة خدمات Azure الصحيحة من البداية. لديك تطبيق موجود تريد نشره؟ وجّه Copilot إليه وسيُنشئ التهيئة دون الحاجة إلى إعادة هيكلة أي شيء.&lt;/p&gt;
&lt;h3 id="ما-الذي-يفعله-فعليا"&gt;ما الذي يفعله فعليًا&lt;/h3&gt;
&lt;p&gt;لنفترض أن لديك Node.js Express API يعتمد على PostgreSQL. بدلًا من اتخاذ قرار يدوي بين Container Apps وApp Service ثم كتابة Bicep من الصفر، يكتشف Copilot تقنياتك ويُنشئ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azure.yaml&lt;/code&gt; بالإعدادات الصحيحة لـ &lt;code&gt;language&lt;/code&gt; و&lt;code&gt;host&lt;/code&gt; و&lt;code&gt;build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;وحدة Bicep لـ Azure Container Apps&lt;/li&gt;
&lt;li&gt;وحدة Bicep لـ Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ويُجري فحوصات مسبقة قبل تغيير أي شيء — يتحقق من نظافة دليل git، ويطلب موافقتك على أدوات خادم MCP مسبقًا. لا شيء يحدث دون علمك بما سيتغير بالضبط.&lt;/p&gt;
&lt;h2 id="استكشاف-الأخطاء-وإصلاحها-مع-copilot"&gt;استكشاف الأخطاء وإصلاحها مع Copilot&lt;/h2&gt;
&lt;p&gt;أخطاء النشر لا مفر منها. معاملات مفقودة، مشكلات في الأذونات، توفر SKU — ونادرًا ما تخبرك رسالة الخطأ بالشيء الوحيد الذي تحتاج معرفته فعلًا: &lt;em&gt;كيف تُصلحه&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;بدون Copilot، الحلقة تبدو هكذا: انسخ الخطأ ← ابحث في المستندات ← اقرأ ثلاث إجابات Stack Overflow غير ذات صلة ← شغّل بعض أوامر &lt;code&gt;az&lt;/code&gt; CLI ← أعد المحاولة وتمنَّ. مع Copilot في &lt;code&gt;azd&lt;/code&gt;، تنهار هذه الحلقة. عند فشل أي أمر &lt;code&gt;azd&lt;/code&gt;، يعرض فورًا أربعة خيارات:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — شرح بلغة مبسطة لما حدث&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — تعليمات خطوة بخطوة لإصلاح المشكلة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — تحليل كامل + يطبق Copilot الإصلاح (بموافقتك) + إعادة محاولة اختيارية&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — التعامل معه بنفسك&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;النقطة الرئيسية: لدى Copilot بالفعل سياق مشروعك والأمر الفاشل وتفاصيل الخطأ. اقتراحاته خاصة بـ &lt;em&gt;وضعك&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="ضبط-السلوك-الافتراضي"&gt;ضبط السلوك الافتراضي&lt;/h3&gt;
&lt;p&gt;إذا كنت دائمًا تختار نفس الخيار، تجاوز الموجه التفاعلي:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.category troubleshoot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;القيم: &lt;code&gt;explain&lt;/code&gt; و&lt;code&gt;guidance&lt;/code&gt; و&lt;code&gt;troubleshoot&lt;/code&gt; و&lt;code&gt;fix&lt;/code&gt; و&lt;code&gt;skip&lt;/code&gt;. يمكنك أيضًا تمكين الإصلاح التلقائي وإعادة المحاولة:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.fix allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;العودة إلى الوضع التفاعلي في أي وقت:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config unset copilot.errorHandling.category
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="خاتمة"&gt;خاتمة&lt;/h2&gt;
&lt;p&gt;شغّل &lt;code&gt;azd update&lt;/code&gt; للحصول على أحدث إصدار وجرّب &lt;code&gt;azd init&lt;/code&gt; في مشروعك القادم.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;الإعلان الأصلي هنا&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>الضبط الدقيق RFT في Foundry أصبح أرخص وأذكى — إليك ما تغيّر</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</guid><description>شحنت Microsoft Foundry ثلاثة تحديثات RFT هذا الشهر: التدريب العالمي لـ o4-mini، ومُقيِّمات النماذج الجديدة GPT-4.1، ودليل أفضل الممارسات الذي سيوفّر عليك ساعات من التصحيح.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إذا كنت تبني تطبيقات .NET تعتمد على نماذج مضبوطة الضبط الدقيق، فتحديثات Foundry هذا الشهر تستحق الانتباه. الضبط الدقيق بالتعزيز (Reinforcement Fine-Tuning) أصبح أكثر سهولة في الوصول وأقل تكلفة بشكل ملموس.&lt;/p&gt;
&lt;p&gt;التفاصيل الكاملة في &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-foundry-finetune-april-2026/"&gt;الإعلان الرسمي&lt;/a&gt;، وهنا التفصيل العملي.&lt;/p&gt;
&lt;h2 id="التدريب-العالمي-لـ-o4-mini"&gt;التدريب العالمي لـ o4-mini&lt;/h2&gt;
&lt;p&gt;o4-mini هو النموذج المفضّل لأحمال العمل المكثفة بالاستدلال والتطبيقات الوكيلية. الخبر الكبير: يمكنك الآن إطلاق وظائف الضبط الدقيق من أكثر من 13 منطقة Azure بأسعار تدريب أقل للرمز الواحد مقارنةً بالتدريب القياسي. نفس البنية التحتية، نفس الجودة، نطاق أوسع.&lt;/p&gt;
&lt;p&gt;إذا كان فريقك موزعاً جغرافياً، فهذا يهمّك. لم تعد مقيّداً بعدد محدود من المناطق للتدريب.&lt;/p&gt;
&lt;p&gt;إليك استدعاء REST API لبدء وظيفة تدريب عالمية:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST &lt;span class="s2"&gt;&amp;#34;https://&amp;lt;your-resource&amp;gt;.openai.azure.com/openai/fine_tuning/jobs?api-version=2025-04-01-preview&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;api-key: &lt;/span&gt;&lt;span class="nv"&gt;$AZURE_OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;model&amp;#34;: &amp;#34;o4-mini&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;training_file&amp;#34;: &amp;#34;&amp;lt;your-training-file-id&amp;gt;&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;method&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;type&amp;#34;: &amp;#34;reinforcement&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;reinforcement&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;grader&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;type&amp;#34;: &amp;#34;string_check&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;name&amp;#34;: &amp;#34;answer-check&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;input&amp;#34;: &amp;#34;{{sample.output_text}}&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;reference&amp;#34;: &amp;#34;{{item.reference_answer}}&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;operation&amp;#34;: &amp;#34;eq&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;hyperparameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;n_epochs&amp;#34;: 2,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;compute_multiplier&amp;#34;: 1.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;trainingType&amp;#34;: &amp;#34;globalstandard&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;العلامة &lt;code&gt;trainingType: globalstandard&lt;/code&gt; هي الفارق الرئيسي.&lt;/p&gt;
&lt;h2 id="مقيمات-نماذج-جديدة-عائلة-gpt-41"&gt;مُقيِّمات نماذج جديدة: عائلة GPT-4.1&lt;/h2&gt;
&lt;p&gt;تُحدِّد المُقيِّمات إشارة المكافأة التي يُحسِّن النموذج استناداً إليها. حتى الآن، كانت المُقيِّمات المبنية على النماذج محدودة بمجموعة أصغر من النماذج. الآن تحصل على ثلاثة خيارات جديدة: GPT-4.1 وGPT-4.1-mini وGPT-4.1-nano.&lt;/p&gt;
&lt;p&gt;متى تلجأ إلى مُقيِّمات النماذج بدلاً من المحددة؟ عندما يكون مخرج مهمتك مفتوحاً، أو عندما تحتاج إلى تسجيل جزئي عبر أبعاد متعددة، أو عند بناء سير عمل وكيلية حيث تعتمد صحة استدعاء الأداة على السياق الدلالي.&lt;/p&gt;
&lt;p&gt;استراتيجية التدرّج عملية للغاية:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-nano&lt;/strong&gt; للتكرارات الأولية. تكلفة منخفضة، حلقات تغذية راجعة سريعة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-mini&lt;/strong&gt; بمجرد استقرار قواعد تقييمك وحاجتك إلى دقة أعلى.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1&lt;/strong&gt; للتقييم في الإنتاج أو القواعد المعقدة حيث تهمّ كل قرار تسجيل.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;يمكنك حتى دمج أنواع المُقيِّمات في وظيفة RFT واحدة. استخدم مطابقة السلاسل لبُعد &amp;ldquo;الإجابة الصحيحة&amp;rdquo; ومُقيِّم نموذج لتقييم جودة الاستدلال. هذه المرونة هي ما يجعل هذا مفيداً فعلاً لأحمال العمل الحقيقية.&lt;/p&gt;
&lt;h2 id="المشكلة-الخفية-في-تنسيق-بيانات-rft"&gt;المشكلة الخفية في تنسيق بيانات RFT&lt;/h2&gt;
&lt;p&gt;هذه النقطة تُوقع الناس في مشكلات. تنسيق بيانات RFT مختلف عن SFT. يجب أن تكون الرسالة الأخيرة في كل صف بدور User أو Developer — وليس Assistant. الإجابة المتوقعة تذهب في مفتاح من المستوى الأعلى مثل &lt;code&gt;reference_answer&lt;/code&gt; يرجع إليه المُقيِّم مباشرةً.&lt;/p&gt;
&lt;p&gt;إذا كنت تُجري الضبط الدقيق الخاضع للإشراف وتريد التبديل إلى RFT، فأنت بحاجة إلى إعادة هيكلة بيانات التدريب. لا تتخطّ هذه الخطوة وإلا ستفشل وظائفك بصمت.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-هذا-مطوري-net"&gt;لماذا يهمّ هذا مطوّري .NET&lt;/h2&gt;
&lt;p&gt;إذا كنت تستدعي النماذج مضبوطة الضبط الدقيق من تطبيقات .NET عبر Azure OpenAI SDK، فإن التدريب الأرخص يعني إمكانية التكرار بشكل أكثر جرأة. خيارات مُقيِّم النموذج تعني إمكانية الضبط الدقيق للمهام الدقيقة — لا سيناريوهات المطابقة التامة فحسب. ودليل أفضل الممارسات على &lt;a href="https://github.com/microsoft-foundry/fine-tuning/blob/main/Demos/Agentic_RFT_PrivatePreview/RFT_Best_Practice.md"&gt;GitHub&lt;/a&gt; سيوفّر عليك وقتاً حقيقياً في التصحيح.&lt;/p&gt;
&lt;p&gt;ابدأ بحجم صغير. من عشرة إلى مئة عيّنة. مُقيِّم بسيط. تحقق من صحة الحلقة. ثم قم بالتوسع.&lt;/p&gt;</content:encoded></item><item><title>تجاربك في الذكاء الاصطناعي على Azure تُهدر المال — إليك كيفية إصلاح ذلك</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</guid><description>أعباء عمل الذكاء الاصطناعي على Azure يمكن أن تُكلف كثيرًا بسرعة. نناقش هنا ما يُحدث فرقًا حقيقيًا في ضبط التكاليف دون إبطاء عملية التطوير.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إذا كنت تبني تطبيقات مدعومة بالذكاء الاصطناعي على Azure الآن، فربما لاحظت شيئًا: فاتورة السحابة لديك تبدو مختلفة عمّا اعتدت. ليس فقط أعلى — بل أغرب. متذبذبة. يصعب التنبؤ بها.&lt;/p&gt;
&lt;p&gt;نشرت Microsoft للتو مقالًا رائعًا حول &lt;a href="https://azure.microsoft.com/en-us/blog/cloud-cost-optimization-principles-that-still-matter/"&gt;مبادئ تحسين تكاليف السحابة التي لا تزال تهم&lt;/a&gt;، وصراحةً، التوقيت لا يمكن أن يكون أفضل. لأن أعباء عمل الذكاء الاصطناعي قد غيّرت قواعد اللعبة فيما يخص التكاليف.&lt;/p&gt;
&lt;h2 id="لماذا-تختلف-أعباء-عمل-الذكاء-الاصطناعي"&gt;لماذا تختلف أعباء عمل الذكاء الاصطناعي&lt;/h2&gt;
&lt;p&gt;إليك الحقيقة. أعباء عمل .NET التقليدية يمكن التنبؤ بها نسبيًا. أنت تعرف مستوى App Service الخاص بك، وتعرف وحدات SQL DTUs، ويمكنك تقدير الإنفاق الشهري بدقة معقولة. أما أعباء عمل الذكاء الاصطناعي؟ فالأمر مختلف تمامًا.&lt;/p&gt;
&lt;p&gt;أنت تختبر نماذج متعددة لمعرفة أيها يناسبك. تُشغّل بنية تحتية مدعومة بمعالجات GPU لضبط النماذج. تُجري استدعاءات API إلى Azure OpenAI حيث يتفاوت استهلاك الرموز المميزة بشكل كبير بحسب طول المطالبة وسلوك المستخدم. كل تجربة تكلف مالًا حقيقيًا، وقد تُجري عشرات التجارب قبل أن تصل إلى المقاربة الصحيحة.&lt;/p&gt;
&lt;p&gt;هذا عدم القدرة على التنبؤ هو ما يجعل تحسين التكاليف أمرًا بالغ الأهمية — ليس كفكرة لاحقة، بل من اليوم الأول.&lt;/p&gt;
&lt;h2 id="الإدارة-مقابل-التحسين--اعرف-الفرق"&gt;الإدارة مقابل التحسين — اعرف الفرق&lt;/h2&gt;
&lt;p&gt;هناك تمييز من المقال أعتقد أن المطورين يُغفلونه: هناك فرق بين &lt;em&gt;إدارة&lt;/em&gt; التكاليف و&lt;em&gt;تحسينها&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;الإدارة هي التتبع وإعداد التقارير. تضبط الميزانيات في Azure Cost Management، تتلقى التنبيهات، وترى لوحات المعلومات. هذا الحد الأدنى المطلوب.&lt;/p&gt;
&lt;p&gt;التحسين هو حيث تتخذ قرارات فعلية. هل تحتاج فعلًا إلى مستوى S3، أم أن S1 يتعامل مع الحمل؟ هل تلك الحوسبة الدائمة التشغيل تجلس خاملة في عطلات نهاية الأسبوع؟ هل يمكنك استخدام المثيلات الفورية (spot instances) لمهام التدريب؟&lt;/p&gt;
&lt;p&gt;بوصفنا مطوري .NET، نميل إلى التركيز على الكود وترك قرارات البنية التحتية لـ&amp;quot;فريق العمليات&amp;quot;. لكن إذا كنت تنشر على Azure، فتلك القرارات هي قراراتك أيضًا.&lt;/p&gt;
&lt;h2 id="ما-الذي-يحدث-فرقا-فعليا"&gt;ما الذي يُحدث فرقًا فعليًا&lt;/h2&gt;
&lt;p&gt;استنادًا إلى المقال وتجربتي الخاصة، إليك ما يُغير الأمور:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;اعرف ما تُنفقه وأين.&lt;/strong&gt; ضع وسومًا (tags) على مواردك. بجدية. إذا لم تستطع تحديد أي مشروع أو تجربة يستنزف ميزانيتك، فلن تتمكن من تحسين أي شيء. Azure Cost Management مع وسوم صحيحة هو أفضل أصدقائك.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ضع حواجز الحماية قبل أن تُجرّب.&lt;/strong&gt; استخدم Azure Policy لتقييد وحدات SKU المكلفة في بيئات التطوير والاختبار. ضع حدودًا للإنفاق على عمليات نشر Azure OpenAI الخاصة بك. لا تنتظر حتى تصل الفاتورة لتدرك أن شخصًا ما ترك مجموعة GPU تعمل طوال عطلة نهاية الأسبوع.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;أعد تحجيم الموارد باستمرار.&lt;/strong&gt; تلك الآلة الافتراضية التي اخترتها خلال النمذجة الأولية؟ على الأرجح أنها خاطئة للإنتاج. Azure Advisor يُقدم توصيات — انظر إليها فعلًا. راجع شهريًا لا سنويًا.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;فكّر في دورة الحياة.&lt;/strong&gt; موارد التطوير يجب أن تُوقف. بيئات الاختبار لا تحتاج إلى العمل على مدار الساعة طوال أيام الأسبوع. استخدم سياسات الإيقاف التلقائي. لأعباء عمل الذكاء الاصطناعي تحديدًا، فكّر في الخيارات بلا خادم حيث تدفع لكل تنفيذ بدلًا من إبقاء الحوسبة دافئة.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;قِس القيمة لا التكلفة فحسب.&lt;/strong&gt; هذه النقطة يسهل نسيانها. نموذج يكلف أكثر لكنه يُقدم نتائج أفضل بشكل ملحوظ قد يكون الخيار الصحيح. الهدف ليس الإنفاق بأقل قدر — بل الإنفاق بذكاء.&lt;/p&gt;
&lt;h2 id="الخلاصة"&gt;الخلاصة&lt;/h2&gt;
&lt;p&gt;تحسين تكاليف السحابة ليس تنظيفًا لمرة واحدة. إنه عادة. ومع أعباء عمل الذكاء الاصطناعي التي تجعل الإنفاق أقل قابلية للتنبؤ من أي وقت مضى، فإن بناء تلك العادة مبكرًا يُجنبك مفاجآت مؤلمة لاحقًا.&lt;/p&gt;
&lt;p&gt;إذا كنت مطور .NET تبني على Azure، ابدأ بالتعامل مع فاتورة السحابة كما تتعامل مع كودك — راجعها بانتظام، وأعد هيكلتها حين تُصبح فوضوية، ولا تنشر أبدًا دون أن تفهم ما سيكلفك.&lt;/p&gt;</content:encoded></item><item><title>أدوات Azure MCP مدمجة الآن في Visual Studio 2022 — لا حاجة إلى امتداد</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</guid><description>تُشحن أدوات Azure MCP كجزء من حمل عمل تطوير Azure في Visual Studio 2022. أكثر من 230 أداة، و45 خدمة Azure، وصفر امتدادات للتثبيت.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إذا كنت تستخدم أدوات Azure MCP في Visual Studio من خلال الامتداد المنفصل، فأنت تعرف العملية — تثبيت VSIX، إعادة التشغيل، والأمل ألا ينكسر، وإدارة تعارضات الإصدارات. لقد اختفى هذا الاحتكاك.&lt;/p&gt;
&lt;p&gt;أعلنت Yun Jung Choi &lt;a href="https://devblogs.microsoft.com/visualstudio/azure-mcp-tools-now-ship-built-into-visual-studio-2022-no-extension-required/"&gt;أن أدوات Azure MCP تُشحن الآن مباشرةً&lt;/a&gt; كجزء من حمل عمل تطوير Azure في Visual Studio 2022. بدون امتداد. بدون VSIX. بدون رقصة إعادة التشغيل.&lt;/p&gt;
&lt;h2 id="ما-الذي-يعنيه-هذا-فعلا"&gt;ما الذي يعنيه هذا فعلاً&lt;/h2&gt;
&lt;p&gt;ابتداءً من Visual Studio 2022 الإصدار 17.14.30، يأتي Azure MCP Server مجمّعاً مع حمل عمل تطوير Azure. إذا كان حمل العمل هذا مثبتاً بالفعل، فتحتاج فقط إلى تفعيله في GitHub Copilot Chat وستنتهي.&lt;/p&gt;
&lt;p&gt;أكثر من 230 أداة عبر 45 خدمة Azure — متاحة مباشرةً من نافذة الدردشة. سرّد حسابات التخزين لديك، انشر تطبيق ASP.NET Core، شخّص مشاكل App Service، استعلم Log Analytics — كل ذلك دون فتح أي علامة تبويب في المتصفح.&lt;/p&gt;
&lt;h2 id="لماذا-هذا-أهم-مما-يبدو"&gt;لماذا هذا أهم مما يبدو&lt;/h2&gt;
&lt;p&gt;إليك الأمر في أدوات المطورين: كل خطوة إضافية هي احتكاك، والاحتكاك يقتل الاستخدام. وجود MCP كامتداد منفصل كان يعني تعارض الإصدارات وفشل التثبيت وشيء آخر لتبقيه محدثاً. إدماجه في نظام حمل العمل يعني:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;مسار تحديث واحد&lt;/strong&gt; عبر Visual Studio Installer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;لا انجراف في الإصدارات&lt;/strong&gt; بين الامتداد وبيئة التطوير المتكاملة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;دائماً حديث&lt;/strong&gt; — يتحدث MCP Server مع إصدارات VS المنتظمة&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;بالنسبة للفرق التي تعتمد معياراً على Azure، هذا أمر مهم. تثبّت حمل العمل مرة واحدة، تفعّل الأدوات، وتكون موجودة في كل جلسة.&lt;/p&gt;
&lt;h2 id="ما-الذي-يمكنك-فعله-به"&gt;ما الذي يمكنك فعله به&lt;/h2&gt;
&lt;p&gt;تغطي الأدوات دورة التطوير الكاملة من خلال Copilot Chat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;التعلم&lt;/strong&gt; — اسأل عن خدمات Azure وأفضل الممارسات وأنماط البنية&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التصميم والتطوير&lt;/strong&gt; — احصل على توصيات الخدمة وضبط كود التطبيق&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;النشر&lt;/strong&gt; — زوّد الموارد وانشر مباشرةً من بيئة التطوير المتكاملة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;استكشاف الأخطاء&lt;/strong&gt; — استعلم السجلات وتحقق من صحة الموارد وشخّص مشاكل الإنتاج&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;مثال سريع — اكتب هذا في Copilot Chat:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;List my storage accounts in my current subscription.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;يستدعي Copilot أدوات Azure MCP في الخلفية، ويستعلم اشتراكاتك، ويعيد قائمة منسقة بالأسماء والمواقع وحيازات SKU. لا حاجة إلى البوابة الإلكترونية.&lt;/p&gt;
&lt;h2 id="كيفية-التفعيل"&gt;كيفية التفعيل&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;حدّث إلى Visual Studio 2022 &lt;strong&gt;17.14.30&lt;/strong&gt; أو أحدث&lt;/li&gt;
&lt;li&gt;تأكد من تثبيت حمل عمل &lt;strong&gt;Azure development&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;افتح GitHub Copilot Chat&lt;/li&gt;
&lt;li&gt;انقر على زر &lt;strong&gt;Select tools&lt;/strong&gt; (أيقونة المفكَّين)&lt;/li&gt;
&lt;li&gt;فعّل &lt;strong&gt;Azure MCP Server&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;هذا كل شيء. يبقى مفعّلاً عبر الجلسات.&lt;/p&gt;
&lt;h2 id="تحفظ-واحد"&gt;تحفظ واحد&lt;/h2&gt;
&lt;p&gt;الأدوات معطلة افتراضياً — تحتاج إلى الاشتراك الصريح. والأدوات الخاصة بـ VS 2026 غير متاحة في VS 2022. كما يعتمد توافر الأدوات على أذونات اشتراك Azure لديك، تماماً كما في البوابة الإلكترونية.&lt;/p&gt;
&lt;h2 id="الصورة-الأكبر"&gt;الصورة الأكبر&lt;/h2&gt;
&lt;p&gt;هذا جزء من اتجاه واضح: يصبح MCP الطريقة المعيارية لعرض أدوات السحابة في بيئات تطوير المطورين. رأينا بالفعل &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;إصدار Azure MCP Server 2.0 المستقر&lt;/a&gt; وتكاملات MCP عبر VS Code والمحررات الأخرى. دمجه في نظام حمل العمل في Visual Studio هو التطور الطبيعي.&lt;/p&gt;
&lt;p&gt;بالنسبة لنا كمطوري .NET الذين يعيشون داخل Visual Studio، يزيل هذا سبباً آخر للتحول إلى بوابة Azure. وبصراحة، كلما قل التبديل بين علامات التبويب، كان ذلك أفضل.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 يضيف MongoDB EF Core وAzure Data Lake — تكاملان يستحقان التجربة</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>يُضيف Aspire 13.2 تكاملَي MongoDB Entity Framework Core وAzure Data Lake Storage مع فحوصات صحة وسرد خدمات بدون إعداد. إليك شكلهما في التطبيق العملي.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;صدر Aspire 13.2 للتو مع &lt;a href="https://devblogs.microsoft.com/aspire/aspire-new-database-integrations/"&gt;تكاملَين جديدَين لقواعد البيانات&lt;/a&gt; يستحقان اهتمامك: MongoDB Entity Framework Core وAzure Data Lake Storage. إذا كنت تريد استخدام EF Core مع MongoDB في تطبيق Aspire، أو تحتاج إلى ربط أعباء عمل data lake مع سرد خدمات صحيح، فهذا الإصدار يقدّم الاثنين.&lt;/p&gt;
&lt;h2 id="mongodb-يلتقي-بـ-ef-core-في-aspire"&gt;MongoDB يلتقي بـ EF Core في Aspire&lt;/h2&gt;
&lt;p&gt;هذا هو ما أنا أكثر حماساً له. دعمت Aspire MongoDB لفترة، لكنه كان دائماً المشغّل الخام — لا EF Core، ولا &lt;code&gt;DbContext&lt;/code&gt;، ولا استعلامات LINQ مقابل مستنداتك. الآن تحصل على تجربة EF Core الكاملة مع MongoDB، بالإضافة إلى فحوصات الصحة التلقائية وسرد الخدمات من Aspire.&lt;/p&gt;
&lt;p&gt;الإعداد يتبع نمط Aspire المعتاد. في AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mongodb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithDataVolume&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithLifetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContainerLifetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Persistent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApiService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongodb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ثم في مشروعك المُستهلِك، أضف تكامل EF Core:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Aspire.MongoDB.EntityFrameworkCore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;وسجّل &lt;code&gt;DbContext&lt;/code&gt; الخاص بك:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;mydb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;من هنا، الأمر EF Core قياسي. عرّف كياناتك، استخدم &lt;code&gt;DbContext&lt;/code&gt; كما تفعل مع أي مزوّد آخر. يعالج التكامل تجميع الاتصالات وتتبعات OpenTelemetry وفحوصات الصحة خلف الكواليس.&lt;/p&gt;
&lt;p&gt;لمطوّري .NET الذين استخدموا MongoDB مع المشغّل الخام وربطوا سلاسل الاتصال يدوياً، هذا تحسين ملموس في جودة الحياة. تحصل على تجريد EF Core الكامل دون فقدان سرد خدمات Aspire.&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-ينضم-إلى-الحفلة"&gt;Azure Data Lake Storage ينضم إلى الحفلة&lt;/h2&gt;
&lt;p&gt;الإضافة الكبيرة الثانية هي &lt;a href="https://aspire.dev/integrations/cloud/azure/azure-storage-datalake/"&gt;تكامل Azure Data Lake Storage (ADLS)&lt;/a&gt;. إذا كنت تبني مسارات بيانات أو عمليات ETL أو منصات تحليلات، يمكنك الآن ربط موارد Data Lake بنفس الطريقة التي تربط بها أي تبعية Aspire أخرى.&lt;/p&gt;
&lt;p&gt;في AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;azure-storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dataLake&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;fileSystem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLakeFileSystem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;analyticsService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AnalyticsService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analytics&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataLake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSystem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;في المشروع المُستهلِك:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeServiceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeFileSystemClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;لا إدارة يدوية لسلاسل الاتصال، ولا بحث عن بيانات الاعتماد. تُوفّر Aspire الموارد وتحقنها. لمن يبنون تطبيقات .NET سحابية أصلية تلمس كلاً من البيانات التشغيلية وأعباء عمل التحليلات، يجعل هذا data lake مواطناً من الدرجة الأولى في نموذج Aspire.&lt;/p&gt;
&lt;h2 id="الإصلاحات-الصغيرة-التي-تهم"&gt;الإصلاحات الصغيرة التي تهمّ&lt;/h2&gt;
&lt;p&gt;بعيداً عن الميزات الرئيسية، هناك بعض تحسينات جودة الحياة التي تستحق الذكر:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;إصلاح سلسلة اتصال MongoDB&lt;/strong&gt; — الشرطة المائلة للأمام قبل اسم قاعدة البيانات تُعالَج الآن بشكل صحيح. إذا كنت تعمل حول هذه المشكلة، يمكنك إزالة الحل البديل&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تصدير SQL Server&lt;/strong&gt; — يُصدّر &lt;code&gt;Aspire.Hosting.SqlServer&lt;/code&gt; الآن خيارات إعداد خادم إضافية للتحكم الدقيق&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تحديثات المحاكيات&lt;/strong&gt; — محاكي ServiceBus 2.0.0، ومحاكي App Configuration 1.0.2، والمحاكي التجريبي لـ CosmosDB يتضمن الآن فحص الجاهزية&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Managed Redis&lt;/strong&gt; — يُعيَّن الآن افتراضياً إلى &lt;code&gt;rediss://&lt;/code&gt; (Redis Secure)، لذا الاتصالات مشفّرة بشكل افتراضي&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ذلك الأخير دقيق لكن مهمّ — Redis المشفّر افتراضياً يعني شيئاً أقل للإعداد في الإنتاج.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 إصدار تدريجي، لكن تكاملَي MongoDB EF Core وData Lake يسدّان فجوات حقيقية. إذا كنت تنتظر دعماً صحيحاً لـ EF Core مع MongoDB في Aspire، أو احتجت Data Lake أن يكون تبعية من الدرجة الأولى، &lt;a href="https://get.aspire.dev"&gt;قم بالترقية إلى 13.2&lt;/a&gt; وجرّبهما. يُسقّل الأمر &lt;code&gt;aspire add&lt;/code&gt; كل ما تحتاجه.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://aspire.dev/whats-new/aspire-13-2/#-integrations-updates"&gt;ملاحظات الإصدار الكاملة&lt;/a&gt; لمزيد من التفاصيل، واطّلع على &lt;a href="https://aspire.dev/integrations/gallery/"&gt;معرض التكاملات&lt;/a&gt; للقائمة الكاملة.&lt;/p&gt;</content:encoded></item><item><title>azd update — أمر واحد يتحكّم في جميع مديري الحزم</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>يمتلك Azure Developer CLI الآن أمر تحديث عالمياً يعمل بصرف النظر عن طريقة التثبيت — winget أو Homebrew أو Chocolatey أو سكريبت التثبيت.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;هل تعرف رسالة &amp;ldquo;إصدار جديد من azd متاح&amp;rdquo; التي تظهر كل أسابيع قليلة؟ تلك التي تتجاهلها لأنك لا تتذكر إن كنت قد ثبّتت &lt;code&gt;azd&lt;/code&gt; عبر winget أو Homebrew أو ذلك السكريبت curl الذي شغّلته قبل ستة أشهر؟ نعم، تمّ حلّ هذا الأمر أخيراً.&lt;/p&gt;
&lt;p&gt;شحنت Microsoft للتو &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — أمر واحد يُحدّث Azure Developer CLI إلى أحدث إصدار بصرف النظر عن طريقة تثبيتك الأصلية. Windows، macOS، Linux — لا يهم. أمر واحد.&lt;/p&gt;
&lt;h2 id="كيف-يعمل"&gt;كيف يعمل&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;هذا كل شيء. إن أردت الوصول المبكر إلى الميزات الجديدة، يمكنك التبديل إلى بناء الـ insiders اليومي:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;يكتشف الأمر طريقة التثبيت الحالية لديك ويستخدم آلية التحديث المناسبة داخلياً. لا مزيد من &amp;ldquo;انتظر، هل استخدمت winget أم choco على هذا الجهاز؟&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="التحفظ-الصغير"&gt;التحفّظ الصغير&lt;/h2&gt;
&lt;p&gt;يأتي &lt;code&gt;azd update&lt;/code&gt; ابتداءً من الإصدار 1.23.x. إن كنت على إصدار أقدم، ستحتاج إلى إجراء تحديث يدوي أخير باستخدام طريقة تثبيتك الأصلية. بعد ذلك، &lt;code&gt;azd update&lt;/code&gt; يتولى كل شيء من الآن فصاعداً.&lt;/p&gt;
&lt;p&gt;تحقق من إصدارك الحالي بـ &lt;code&gt;azd version&lt;/code&gt;. إن احتجت تثبيتاً جديداً، &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;وثائق التثبيت&lt;/a&gt; ستُرشدك.&lt;/p&gt;
&lt;h2 id="لماذا-هذا-مهم"&gt;لماذا هذا مهم&lt;/h2&gt;
&lt;p&gt;هذا تحسين صغير لجودة الحياة، لكن بالنسبة لأولئك منّا الذين يستخدمون &lt;code&gt;azd&lt;/code&gt; يومياً لنشر وكلاء الذكاء الاصطناعي وتطبيقات Aspire إلى Azure، البقاء محدّثاً يعني حالات أقل من &amp;ldquo;هذه الخطأ تمّ إصلاحها بالفعل في الإصدار الأخير&amp;rdquo;. شيء واحد أقل يجب التفكير فيه.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;الإعلان الكامل&lt;/a&gt; والغوص العميق لـ Jon Gallant &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;هنا&lt;/a&gt; لمزيد من السياق.&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier متاح للعموم — تحسين تكاليف تخزين Blob تلقائياً بدون قواعد دورة الحياة</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>أصبح Smart Tier في Azure Blob Storage متاحاً للعموم، حيث ينقل الكائنات تلقائياً بين الطبقات الساخنة والباردة والمتجمدة بناءً على أنماط الوصول الفعلية — دون الحاجة إلى قواعد دورة الحياة.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إذا قضيت وقتاً في ضبط سياسات دورة حياة Azure Blob Storage ثم شاهدتها تنهار عندما تتغير أنماط الوصول، فهذا المقال يخصك. أعلنت Microsoft للتو عن &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;التوافر العام لـ smart tier&lt;/a&gt; لـ Azure Blob وData Lake Storage — قدرة تدرّج مُدارة بالكامل تنقل الكائنات تلقائياً بين الطبقات الساخنة والباردة والمتجمدة بناءً على الاستخدام الفعلي.&lt;/p&gt;
&lt;h2 id="ما-الذي-يفعله-smart-tier-فعلا"&gt;ما الذي يفعله smart tier فعلاً&lt;/h2&gt;
&lt;p&gt;المفهوم واضح: يقيّم smart tier باستمرار وقت آخر وصول لكل كائن في حساب التخزين الخاص بك. البيانات التي يُوصل إليها بشكل متكرر تبقى في الطبقة الساخنة، وتنتقل البيانات غير النشطة إلى الطبقة الباردة بعد 30 يوماً، ثم إلى الطبقة المتجمدة بعد 60 يوماً أخرى. عند الوصول إلى البيانات مجدداً، تُرقَّى فوراً إلى الطبقة الساخنة. تبدأ الدورة من جديد.&lt;/p&gt;
&lt;p&gt;لا قواعد دورة حياة للضبط. لا تنبؤات بأنماط الوصول. لا ضبط يدوي.&lt;/p&gt;
&lt;p&gt;خلال فترة المعاينة، أفادت Microsoft بأن &lt;strong&gt;أكثر من 50% من السعة المُدارة بـ smart tier انتقلت تلقائياً إلى طبقات أبرد&lt;/strong&gt; بناءً على أنماط الوصول الفعلية. هذا تخفيض ذو معنى في التكاليف لحسابات التخزين الكبيرة.&lt;/p&gt;
&lt;h2 id="لماذا-هذا-مهم-لمطوري-net"&gt;لماذا هذا مهم لمطوري .NET&lt;/h2&gt;
&lt;p&gt;إذا كنت تبني تطبيقات تولّد سجلات أو بيانات قياس أو بيانات تحليلية أو أي نوع من ممتلكات البيانات المتنامية — وبصراحة، من لا يفعل — فتكاليف التخزين تتراكم بسرعة. النهج التقليدي كان كتابة سياسات إدارة دورة الحياة واختبارها وإعادة ضبطها عندما تتغير أنماط الوصول في تطبيقك. يزيل smart tier سير العمل بأكمله.&lt;/p&gt;
&lt;p&gt;بعض السيناريوهات العملية التي يساعد فيها هذا:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;بيانات القياس والسجلات&lt;/strong&gt; — ساخنة أثناء تصحيح الأخطاء، نادراً ما يُوصل إليها بعد أسابيع قليلة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مسارات البيانات ومخرجات ETL&lt;/strong&gt; — يُوصل إليها بكثافة أثناء المعالجة، ثم تبرد في معظمها&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;المحتوى الذي ينشئه المستخدمون&lt;/strong&gt; — التحميلات الحديثة ساخنة، والمحتوى الأقدم يبرد تدريجياً&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;بيانات النسخ الاحتياطي والأرشفة&lt;/strong&gt; — يُوصل إليها أحياناً للامتثال، في الغالب خاملة&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="كيفية-الإعداد"&gt;كيفية الإعداد&lt;/h2&gt;
&lt;p&gt;تفعيل smart tier إعداد لمرة واحدة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;الحسابات الجديدة&lt;/strong&gt;: اختر smart tier كطبقة الوصول الافتراضية أثناء إنشاء حساب التخزين (يُشترط التكرار المنطقي)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الحسابات القائمة&lt;/strong&gt;: بدّل طبقة الوصول للـ blob من افتراضيتك الحالية إلى smart tier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;الكائنات الأصغر من 128 كيلوبايت تبقى في الطبقة الساخنة ولا تتحمل رسوم المراقبة. لكل شيء آخر، تدفع أسعار السعة القياسية للطبقات الساخنة والباردة والمتجمدة بدون رسوم انتقال الطبقات، ولا رسوم حذف مبكر، ولا تكاليف استرداد البيانات. رسوم مراقبة شهرية لكل كائن تغطي التنسيق.&lt;/p&gt;
&lt;h2 id="المقايضة-التي-يجب-معرفتها"&gt;المقايضة التي يجب معرفتها&lt;/h2&gt;
&lt;p&gt;قواعد التدرّج في smart tier ثابتة (30 يوماً إلى بارد، 90 يوماً إلى متجمد). إذا احتجت إلى عتبات مخصصة — مثلاً الانتقال إلى البارد بعد 7 أيام لحمل عمل محدد — فقواعد دورة الحياة هي الحل المناسب. ولا تخلط بينهما: تجنب استخدام قواعد دورة الحياة على الكائنات المُدارة بـ smart tier، إذ يمكن أن تتعارض.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;هذا ليس ثورياً، لكنه يحل صداعاً تشغيلياً حقيقياً. إذا كنت تدير حسابات blob storage متنامية وتعبت من صيانة سياسات دورة الحياة، &lt;a href="https://learn.microsoft.com/en-us/azure/storage/blobs/access-tiers-smart"&gt;فعّل smart tier&lt;/a&gt; ودع Azure يتولى الأمر. إنه متاح اليوم في جميع مناطق السحابة العامة المنطقية تقريباً.&lt;/p&gt;</content:encoded></item><item><title>أين تستضيف وكلاء الذكاء الاصطناعي على Azure؟ دليل عملي للقرار</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>تُقدّم Azure ستة طرق لاستضافة وكلاء الذكاء الاصطناعي — من الحاويات الخام إلى Foundry Hosted Agents المُدارة بالكامل. إليك كيفية اختيار الخيار المناسب لعبء عمل .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إن كنت تبني وكلاء ذكاء اصطناعي بـ .NET في الوقت الراهن، ربما لاحظت شيئاً: ثمة &lt;em&gt;الكثير&lt;/em&gt; من طرق استضافتها على Azure. Container Apps، وAKS، وFunctions، وApp Service، وFoundry Agents، وFoundry Hosted Agents — وكلها تبدو معقولة حتى تحتاج فعلاً إلى اختيار واحدة. نشرت Microsoft للتو &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;دليلاً شاملاً لاستضافة وكلاء Azure AI&lt;/a&gt; يوضّح هذا الأمر، وأريد تحليله من منظور مطوّر .NET عملي.&lt;/p&gt;
&lt;h2 id="الخيارات-الستة-في-لمحة"&gt;الخيارات الستة في لمحة&lt;/h2&gt;
&lt;p&gt;إليك كيف أُلخّص المشهد:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الخيار&lt;/th&gt;
&lt;th&gt;الأنسب لـ&lt;/th&gt;
&lt;th&gt;أنت تُدير&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Container Apps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;التحكم الكامل في الحاويات دون تعقيد K8s&lt;/td&gt;
&lt;td&gt;إمكانية المراقبة، الحالة، دورة الحياة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AKS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الامتثال للمؤسسات، متعدد المجموعات، شبكات مخصصة&lt;/td&gt;
&lt;td&gt;كل شيء (هذا هو الهدف)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;المهام الوكيلة قصيرة الأمد المدفوعة بالأحداث&lt;/td&gt;
&lt;td&gt;شبه لا شيء — خادم حقيقي بلا خوادم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;وكلاء HTTP البسيطة، حركة المرور المتوقعة&lt;/td&gt;
&lt;td&gt;النشر، إعداد التوسّع&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;وكلاء بدون كود عبر البوابة/SDK&lt;/td&gt;
&lt;td&gt;شبه لا شيء&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Hosted Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;وكلاء بأُطر مخصصة مع بنية تحتية مُدارة&lt;/td&gt;
&lt;td&gt;كود وكيلك فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;الخيارات الأربعة الأولى هي حوسبة للأغراض العامة — &lt;em&gt;يمكنك&lt;/em&gt; تشغيل وكلاء عليها، لكنها لم تُصمَّم لذلك. الخياران الأخيران وكيل-أصيل: يفهمان المحادثات ومكالمات الأدوات ودورات حياة الوكلاء كمفاهيم أولى.&lt;/p&gt;
&lt;h2 id="foundry-hosted-agents--النقطة-الأمثل-لمطوري-وكلاء-net"&gt;Foundry Hosted Agents — النقطة الأمثل لمطوّري وكلاء .NET&lt;/h2&gt;
&lt;p&gt;ها هو ما لفت انتباهي. تقع Foundry Hosted Agents في المنتصف تماماً: تحصل على مرونة تشغيل كودك الخاص (Semantic Kernel، Agent Framework، LangGraph — ما تشاء) لكن المنصة تتولى إدارة البنية التحتية وإمكانية المراقبة وإدارة المحادثات.&lt;/p&gt;
&lt;p&gt;القطعة الرئيسية هي &lt;strong&gt;Hosting Adapter&lt;/strong&gt; — طبقة تجريد رفيعة تربط إطار وكيلك بمنصة Foundry. بالنسبة لـ Microsoft Agent Framework يبدو هكذا:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.agentserver.agentframework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;from_agent_framework&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ChatAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;chat_client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;AzureAIAgentClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_local_time&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;from_agent_framework&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;هذه هي قصة استضافتك بالكامل. يتولى المحوّل ترجمة البروتوكول، والبثّ عبر server-sent events، وسجل المحادثات، وتتبع OpenTelemetry — كل ذلك تلقائياً. لا middleware مخصص، لا سباكة يدوية.&lt;/p&gt;
&lt;h2 id="النشر-بسيط-بشكل-حقيقي"&gt;النشر بسيط بشكل حقيقي&lt;/h2&gt;
&lt;p&gt;نشرت وكلاء إلى Container Apps من قبل وتعمل، لكنك تنتهي بكتابة الكثير من كود الربط لإدارة الحالة وإمكانية المراقبة. مع Hosted Agents وـ&lt;code&gt;azd&lt;/code&gt;، يكون النشر:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# تثبيت إضافة وكلاء AI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ext install azure.ai.agents
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# التهيئة من قالب&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# بناء، رفع، نشر — انتهى&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ذلك الأمر الواحد &lt;code&gt;azd up&lt;/code&gt; يبني حاويتك، ويرفعها إلى ACR، ويُوفّر مشروع Foundry، ويُنشئ نقاط نهاية النماذج، ويُشغّل وكيلك. خمس خطوات في أمر واحد.&lt;/p&gt;
&lt;h2 id="إدارة-المحادثات-المدمجة"&gt;إدارة المحادثات المدمجة&lt;/h2&gt;
&lt;p&gt;هذا الجانب هو الذي يُوفّر أكثر الوقت في الإنتاج. بدلاً من بناء مخزن حالة محادثة خاص بك، تتولى Hosted Agents ذلك بشكل أصيل:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# إنشاء محادثة دائمة&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conversations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# الدور الأول&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MyAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Remember: my favorite number is 42.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# الدور الثاني — السياق محفوظ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MyAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Multiply my favorite number by 10.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;لا Redis. لا مخزن جلسات Cosmos DB. لا middleware مخصص لتسلسل الرسائل. المنصة تتولى الأمر ببساطة.&lt;/p&gt;
&lt;h2 id="إطاري-للقرار"&gt;إطاري للقرار&lt;/h2&gt;
&lt;p&gt;بعد مراجعة الخيارات الستة جميعها، إليك نموذجي الذهني السريع:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;هل تحتاج إلى بنية تحتية صفرية؟&lt;/strong&gt; ← Foundry Agents (بوابة/SDK، بلا حاويات)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;هل لديك كود وكيل مخصص لكنك تريد استضافة مُدارة؟&lt;/strong&gt; ← Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;هل تحتاج مهاماً وكيلة مدفوعة بالأحداث قصيرة الأمد؟&lt;/strong&gt; ← Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;هل تحتاج أقصى تحكم في الحاويات دون K8s؟&lt;/strong&gt; ← Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;هل تحتاج امتثالاً صارماً ومتعدد المجموعات؟&lt;/strong&gt; ← AKS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;هل لديك وكيل HTTP بسيط بحركة مرور متوقعة؟&lt;/strong&gt; ← App Service&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;لمعظم مطوّري .NET الذين يبنون بـ Semantic Kernel أو Microsoft Agent Framework، من المرجح أن تكون Hosted Agents نقطة البداية الصحيحة. تحصل على التوسّع إلى الصفر، وOpenTelemetry المدمج، وإدارة المحادثات، ومرونة الإطار — دون إدارة Kubernetes أو تمديد سلسلة إمكانية مراقبة خاصة بك.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;مشهد استضافة الوكلاء على Azure ينضج بسرعة. إن كنت تبدأ مشروع وكيل ذكاء اصطناعي جديداً اليوم، أُوصي بجدية بالنظر في Foundry Hosted Agents قبل الوصول إلى Container Apps أو AKS من عادة. البنية التحتية المُدارة توفّر وقتاً حقيقياً، ونمط Hosting Adapter يتيح لك الحفاظ على اختيار إطارك.&lt;/p&gt;
&lt;p&gt;اطّلع على &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;الدليل الكامل من Microsoft&lt;/a&gt; ومستودع &lt;a href="https://github.com/microsoft-foundry/foundry-samples/tree/main/samples/python/hosted-agents"&gt;Foundry Samples&lt;/a&gt; للحصول على أمثلة عملية.&lt;/p&gt;</content:encoded></item><item><title>مهارات الوكيل في .NET أصبحت أكثر مرونة من أي وقت مضى</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</guid><description>يدعم Microsoft Agent Framework الآن ثلاث طرق لتأليف المهارات — ملفات، وفئات، وكود مضمّن — وكلها تُركَّب عبر مزوّد واحد. إليك لماذا يهمّ هذا وكيف تستخدم كل طريقة.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إذا كنت تبني وكلاء باستخدام Microsoft Agent Framework، فأنت تعرف القاعدة: تعرّف المهارات، واربطها بمزوّد، واترك الوكيل يقرر أيّها يستدعي. الجديد هو &lt;em&gt;كيفية&lt;/em&gt; تأليف تلك المهارات — وقفزة المرونة ملموسة.&lt;/p&gt;
&lt;p&gt;يُقدّم التحديث الأحدث ثلاثة أنماط تأليف مميزة لمهارات الوكيل: &lt;strong&gt;مستندة إلى الملفات&lt;/strong&gt;، و&lt;strong&gt;مستندة إلى الفئات&lt;/strong&gt;، و&lt;strong&gt;محدّدة بكود مضمّن&lt;/strong&gt;. الثلاثة تتوصّل بـ &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt; واحد، أي يمكنك المزج والتوفيق دون أي منطق توجيه أو كود ربط خاص. دعني أرشدك عبر كل واحدة ومتى تلجأ إليها.&lt;/p&gt;
&lt;h2 id="المهارات-المستندة-إلى-الملفات-نقطة-البداية"&gt;المهارات المستندة إلى الملفات: نقطة البداية&lt;/h2&gt;
&lt;p&gt;المهارات المستندة إلى الملفات هي بالضبط ما يوحي به اسمها — دليل على القرص بملف &lt;code&gt;SKILL.md&lt;/code&gt;، وسكريبتات اختيارية، ومستندات مرجعية. فكّر في الأمر كأبسط طريقة لمنح وكيلك قدرات جديدة:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;skills/
└── onboarding-guide/
├── SKILL.md
├── scripts/
│ └── check-provisioning.py
└── references/
└── onboarding-checklist.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;تُعلن البيانات الأولية في &lt;code&gt;SKILL.md&lt;/code&gt; اسم المهارة ووصفها، ويخبر قسم التعليمات الوكيلَ كيف يستخدم السكريبتات والمراجع:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: onboarding-guide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: &amp;gt;-
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Walk new hires through their first-week setup checklist.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Instructions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; Ask for the employee&amp;#39;s name and start date.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Run &lt;span class="sb"&gt;`scripts/check-provisioning.py`&lt;/span&gt; to verify accounts.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Walk through &lt;span class="sb"&gt;`references/onboarding-checklist.md`&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Follow up on incomplete items.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ثم تربطها مع &lt;code&gt;SubprocessScriptRunner.RunAsync&lt;/code&gt; لتنفيذ السكريبت:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChatClientAgentOptions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;HRAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ChatOptions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Instructions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are a helpful HR assistant.&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AIContextProviders&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;skillsProvider&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deploymentName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;يكتشف الوكيل المهارة تلقائياً ويستدعي سكريبت التزويد عند الحاجة إلى التحقق من حالة الحساب. نظيف وبسيط.&lt;/p&gt;
&lt;h2 id="المهارات-المستندة-إلى-الفئات-الشحن-عبر-nuget"&gt;المهارات المستندة إلى الفئات: الشحن عبر NuGet&lt;/h2&gt;
&lt;p&gt;هنا تصبح الأمور مثيرة للاهتمام للفرق. المهارات المستندة إلى الفئات تشتق من &lt;code&gt;AgentClassSkill&amp;lt;T&amp;gt;&lt;/code&gt; وتستخدم سمات مثل &lt;code&gt;[AgentSkillResource]&lt;/code&gt; و&lt;code&gt;[AgentSkillScript]&lt;/code&gt; لكي يكتشف الإطار كل شيء عبر الانعكاس:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BenefitsEnrollmentSkill&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentClassSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="n"&gt;AgentSkillFrontmatter&lt;/span&gt; &lt;span class="n"&gt;Frontmatter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;benefits-enrollment&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Enroll an employee in health, dental, or vision plans.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Instructions&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;Read&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;plans&lt;/span&gt; &lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Confirm&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt; &lt;span class="n"&gt;wants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;3.&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;enroll&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;complete&lt;/span&gt; &lt;span class="n"&gt;enrollment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillResource(&amp;#34;available-plans&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [Description(&amp;#34;Plan options with monthly pricing.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;AvailablePlans&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="n"&gt;Available&lt;/span&gt; &lt;span class="n"&gt;Plans&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Health&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt; &lt;span class="n"&gt;HMO&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Premium&lt;/span&gt; &lt;span class="n"&gt;PPO&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Dental&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Standard&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Enhanced&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Vision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillScript(&amp;#34;enroll&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [Description(&amp;#34;Enrolls employee in the specified benefit plan.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Enroll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EnrollInPlan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;الجمال هنا أن فريقاً ما يمكنه تعبئة هذا كحزمة NuGet. تضيفها إلى مشروعك، وتُسقطها في المُنشئ، وتعمل جنباً إلى جنب مع مهاراتك المستندة إلى الملفات دون أي تنسيق:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;تظهر كلتا المهارتين في النص التوجيهي للنظام للوكيل. يقرر الوكيل أيّهما يستخدم بناءً على المحادثة — لا حاجة لكود توجيه.&lt;/p&gt;
&lt;h2 id="المهارات-المضمنة-الجسر-السريع"&gt;المهارات المضمّنة: الجسر السريع&lt;/h2&gt;
&lt;p&gt;تعرف تلك اللحظة حين يبني فريق آخر بالضبط المهارة التي تحتاجها، لكنها لن تُشحن لدورة تطوير كاملة؟ &lt;code&gt;AgentInlineSkill&lt;/code&gt; هو جسرك:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;timeOffSkill&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentInlineSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;time-off-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Calculate remaining vacation and sick days.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;Ask&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;provided&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;calculate&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;3.&lt;/span&gt; &lt;span class="n"&gt;Present&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;clearly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddScript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;calculate-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetAnnualAllowance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDaysUsed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;أضفها إلى المُنشئ تماماً كالأخريات:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeOffSkill&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;حين تُشحن حزمة NuGet أخيراً، تستبدل المهارة المضمّنة بالمستندة إلى الفئات. الوكيل لا يلاحظ الفرق.&lt;/p&gt;
&lt;p&gt;لكن المهارات المضمّنة ليست مجرد جسور. إنها أيضاً الخيار الصحيح حين تحتاج إلى توليد مهارات ديناميكياً في وقت التشغيل — فكّر في مهارة واحدة لكل وحدة عمل محمّلة من الإعداد — أو حين يحتاج سكريبت إلى الإغلاق على حالة محلية لا تنتمي إلى حاوية حقن التبعيات.&lt;/p&gt;
&lt;h2 id="موافقة-السكريبت-الإنسان-في-الحلقة"&gt;موافقة السكريبت: الإنسان في الحلقة&lt;/h2&gt;
&lt;p&gt;لنا نحن مطوّري .NET الذين يبنون وكلاء في الإنتاج، هذا هو الجزء الذي يفتح محادثات النشر فعلاً. بعض السكريبتات لها عواقب حقيقية — تسجيل شخص ما في المزايا، أو الاستعلام عن البنية التحتية للإنتاج. فعّل &lt;code&gt;UseScriptApproval&lt;/code&gt; ويتوقف الوكيل قبل تنفيذ أي سكريبت:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeOffSkill&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseScriptApproval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;حين يريد الوكيل تشغيل سكريبت، يُعيد طلب موافقة بدلاً من ذلك. تجمع تطبيقك القرار — موافقة أو رفض — ويستمر الوكيل وفقاً لذلك. في البيئات الخاضعة للتنظيم، هذا هو الفرق بين &amp;ldquo;يمكننا نشر هذا&amp;rdquo; و&amp;quot;الفريق القانوني يقول لا.&amp;quot;&lt;/p&gt;
&lt;h2 id="لماذا-يهم-هذا-التوليف"&gt;لماذا يهمّ هذا التوليف&lt;/h2&gt;
&lt;p&gt;القوة الحقيقية ليست في أي نمط تأليف منفرد — بل في التركيب. يمكنك:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;البدء صغيراً&lt;/strong&gt; بمهارة مستندة إلى ملفات، والتكرار على التعليمات، وشحنها دون كتابة C#&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;شحن مهارات قابلة لإعادة الاستخدام&lt;/strong&gt; كحزم NuGet تضيفها فرق أخرى بسطر واحد&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;سد الفجوات&lt;/strong&gt; بمهارات مضمّنة حين تحتاج شيئاً &lt;em&gt;الآن&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تصفية أدلة المهارات المشتركة&lt;/strong&gt; بمسندات حتى يحمّل وكيلك فقط ما ينبغي&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إضافة رقابة بشرية&lt;/strong&gt; للسكريبتات التي تلمس أنظمة الإنتاج&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;كل هذه تتركّب عبر &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;. لا توجيه خاص، ولا منطق شرطي، ولا فحوصات نوع المهارة.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;مهارات الوكيل في .NET أصبحت الآن تمتلك نموذج تأليف مرناً حقاً. سواء كنت مطوراً فردياً ترسم نموذجاً أولياً بمهارات مستندة إلى الملفات، أو فريق مؤسسة يشحن قدرات مُعبّأة عبر NuGet، فإن الأنماط تناسب الجميع. وآلية موافقة السكريبت تجعلها جاهزة للإنتاج في البيئات التي تحتاج فيها إلى تلك نقطة التفتيش البشرية.&lt;/p&gt;
&lt;p&gt;اطّلع على &lt;a href="https://devblogs.microsoft.com/agent-framework/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them/"&gt;الإعلان الأصلي&lt;/a&gt; للشرح الكامل، و&lt;a href="https://learn.microsoft.com/en-us/agent-framework/agents/skills"&gt;وثائق Agent Skills&lt;/a&gt; على Microsoft Learn، و&lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentSkills"&gt;أمثلة .NET على GitHub&lt;/a&gt; للتطبيق العملي.&lt;/p&gt;</content:encoded></item><item><title>إطلاق Azure MCP Server 2.0 — أتمتة السحابة الوكيلية المستضافة ذاتياً أصبحت حقيقة</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>يصل Azure MCP Server 2.0 إلى مرحلة الاستقرار مع نشر عن بُعد مستضاف ذاتياً، و276 أداة عبر 57 خدمة Azure، وأمان على مستوى المؤسسات — إليك ما يهم مطوري .NET الذين يبنون سير عمل وكيلية.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إذا كنت تبني أي شيء باستخدام MCP وAzure مؤخراً، فمن المحتمل أنك تعرف بالفعل أن التجربة المحلية تعمل بشكل جيد. توصّل بخادم MCP، دع وكيل الذكاء الاصطناعي يتحدث مع موارد Azure، وانتهيت. لكن في اللحظة التي تحتاج فيها إلى مشاركة هذا الإعداد عبر فريق؟ هنا تصبح الأمور معقدة.&lt;/p&gt;
&lt;p&gt;لم يعد الأمر كذلك. لقد &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;وصل Azure MCP Server للإصدار 2.0 المستقر&lt;/a&gt;، والميزة الرئيسية هي بالضبط ما طالبت به فرق المؤسسات: &lt;strong&gt;دعم خادم MCP البعيد المستضاف ذاتياً&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="ما-هو-azure-mcp-server"&gt;ما هو Azure MCP Server؟&lt;/h2&gt;
&lt;p&gt;مراجعة سريعة. ينفّذ Azure MCP Server مواصفة &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;بروتوكول سياق النموذج&lt;/a&gt; ويعرض قدرات Azure كأدوات منظمة وقابلة للاكتشاف يمكن لوكلاء الذكاء الاصطناعي استدعاؤها. فكر فيه كجسر موحد بين وكيلك وAzure — التزويد والنشر والمراقبة والتشخيص، كل ذلك من خلال واجهة واحدة متسقة.&lt;/p&gt;
&lt;p&gt;الأرقام تتحدث عن نفسها: &lt;strong&gt;276 أداة MCP عبر 57 خدمة Azure&lt;/strong&gt;. هذا تغطية جدية.&lt;/p&gt;
&lt;h2 id="الأمر-الكبير-نشر-عن-بعد-مستضاف-ذاتيا"&gt;الأمر الكبير: نشر عن بُعد مستضاف ذاتياً&lt;/h2&gt;
&lt;p&gt;إليك المسألة. تشغيل MCP محلياً على جهازك مناسب للتطوير والتجارب. لكن في سيناريو فريق حقيقي، تحتاج إلى:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;وصول مشترك للمطورين والأنظمة الوكيلية الداخلية&lt;/li&gt;
&lt;li&gt;تكوين مركزي (سياق المستأجر، افتراضيات الاشتراك، بيانات القياس)&lt;/li&gt;
&lt;li&gt;حدود شبكة المؤسسة وسياساتها&lt;/li&gt;
&lt;li&gt;التكامل في مسارات CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;يعالج Azure MCP Server 2.0 كل ذلك. يمكنك نشره كخدمة داخلية مُدارة مركزياً مع نقل بيانات يعتمد على HTTP، ومصادقة مناسبة، وحوكمة متسقة.&lt;/p&gt;
&lt;p&gt;للمصادقة، لديك خياران متينان:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — عند التشغيل جنباً إلى جنب مع &lt;a href="https://aka.ms/azmcp/self-host/foundry"&gt;Microsoft Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تدفق On-Behalf-Of (OBO)&lt;/strong&gt; — تفويض OpenID Connect يستدعي واجهات برمجية Azure باستخدام سياق المستخدم الذي سجّل الدخول&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;تدفق OBO هذا مثير للاهتمام بشكل خاص لنا كمطوري .NET. يعني أن سير العمل الوكيلية يمكن أن تعمل بالأذونات الفعلية للمستخدم، وليس ببعض حسابات الخدمة المفرطة الصلاحيات. مبدأ الصلاحية الأدنى، مدمج مباشرةً.&lt;/p&gt;
&lt;h2 id="تحصين-الأمان"&gt;تحصين الأمان&lt;/h2&gt;
&lt;p&gt;هذا ليس مجرد إصدار ميزات — إنه إصدار أمني أيضاً. يضيف إصدار 2.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;التحقق المعزز من نقاط النهاية&lt;/li&gt;
&lt;li&gt;الحماية من أنماط الحقن في الأدوات الموجهة بالاستعلامات&lt;/li&gt;
&lt;li&gt;ضوابط عزل أكثر إحكاماً لبيئات التطوير&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;إذا كنت ستعرض MCP كخدمة مشتركة، فهذه الضمانات مهمة. بشكل كبير.&lt;/p&gt;
&lt;h2 id="أين-يمكنك-استخدامه"&gt;أين يمكنك استخدامه؟&lt;/h2&gt;
&lt;p&gt;قصة توافق العملاء واسعة. يعمل Azure MCP Server 2.0 مع:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;بيئات التطوير المتكاملة&lt;/strong&gt;: VS Code، Visual Studio، IntelliJ، Eclipse، Cursor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;وكلاء سطر الأوامر&lt;/strong&gt;: GitHub Copilot CLI، Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مستقل&lt;/strong&gt;: خادم محلي للإعدادات البسيطة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;بعيد مستضاف ذاتياً&lt;/strong&gt;: النجم الجديد في إصدار 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;بالإضافة إلى ذلك، هناك دعم للسحابة السيادية لـ Azure US Government وAzure التي تشغّلها 21Vianet، وهو أمر حيوي للنشرات الخاضعة للتنظيم.&lt;/p&gt;
&lt;h2 id="لماذا-هذا-مهم-لمطوري-net"&gt;لماذا هذا مهم لمطوري .NET&lt;/h2&gt;
&lt;p&gt;إذا كنت تبني تطبيقات وكيلية باستخدام .NET — سواء كان ذلك Semantic Kernel أو Microsoft Agent Framework أو تنسيقك الخاص — يمنحك Azure MCP Server 2.0 طريقة جاهزة للإنتاج للسماح لوكلائك بالتفاعل مع بنية Azure التحتية. بدون أغلفة REST مخصصة. بدون أنماط تكامل خاصة بالخدمة. فقط MCP.&lt;/p&gt;
&lt;p&gt;بالاقتران مع &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;واجهة برمجية Fluent لتطبيقات MCP&lt;/a&gt; التي أُطلقت قبل أيام، تنضج منظومة .NET MCP بسرعة.&lt;/p&gt;
&lt;h2 id="البدء"&gt;البدء&lt;/h2&gt;
&lt;p&gt;اختر مسارك:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;مستودع GitHub&lt;/a&gt;&lt;/strong&gt; — الكود المصدري والوثائق وكل شيء&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;صورة Docker&lt;/a&gt;&lt;/strong&gt; — نشر في حاوية&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;امتداد VS Code&lt;/a&gt;&lt;/strong&gt; — تكامل مع بيئة التطوير المتكاملة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;دليل الاستضافة الذاتية&lt;/a&gt;&lt;/strong&gt; — الميزة الرئيسية في إصدار 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;Azure MCP Server 2.0 هو بالضبط نوع الترقية التحتية التي لا تبدو لامعة في العرض التوضيحي لكنها تغير كل شيء عملياً. خادم MCP البعيد المستضاف ذاتياً مع مصادقة مناسبة وتحصين أمني ودعم سحابة سيادية يعني أن MCP جاهز للفرق الحقيقية التي تبني سير عمل وكيلية حقيقية على Azure. إذا كنت تنتظر إشارة &amp;ldquo;جاهز للمؤسسات&amp;rdquo; — هذه هي.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry مارس 2026 — GPT-5.4 وإطلاق خدمة Agent وتحديث SDK الذي يغيّر كل شيء</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>تحديث Microsoft Foundry لمارس 2026 ضخم: خدمة Agent تصبح متاحة للعموم، GPT-5.4 يوفّر استدلالاً موثوقاً، حزمة azure-ai-projects SDK تصبح مستقرة عبر جميع اللغات، وFireworks AI تجلب النماذج المفتوحة إلى Azure.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;منشورات &amp;ldquo;ما الجديد في Microsoft Foundry&amp;rdquo; الشهرية عادةً مزيج من التحسينات التدريجية والميزة الرئيسية العَرَضية. &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;إصدار مارس 2026&lt;/a&gt;؟ إنه في الأساس كله ميزات رئيسية. خدمة Foundry Agent تصبح متاحة للعموم، وGPT-5.4 يُشحن للإنتاج، وSDK يحصل على إصدار مستقر رئيسي، وFireworks AI تجلب استدلال النماذج المفتوحة إلى Azure. دعني أُفصّل ما يهمّ مطوّري .NET.&lt;/p&gt;
&lt;h2 id="foundry-agent-service-جاهز-للإنتاج"&gt;Foundry Agent Service جاهز للإنتاج&lt;/h2&gt;
&lt;p&gt;هذه هي الكبرى. بيئة تشغيل الوكلاء من الجيل التالي متاحة للعموم — مبنية على OpenAI Responses API، ومتوافقة مع وكلاء OpenAI على مستوى البروتوكول، ومفتوحة للنماذج من مزوّدين متعددين. إذا كنت تبني بواجهة Responses API اليوم، فإن الهجرة إلى Foundry تضيف أمان المؤسسات، والشبكات الخاصة، وEntra RBAC، والتتبع الكامل، والتقييم — فوق منطق وكيلك الحالي.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;project_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_PROJECT_ENDPOINT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-enterprise-agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;definition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_MODEL_DEPLOYMENT_NAME&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;الإضافات الرئيسية: شبكات خاصة شاملة من طرف إلى طرف، وتوسيع مصادقة MCP (بما في ذلك OAuth passthrough)، وVoice Live في مرحلة المعاينة للوكلاء الكلامية، ووكلاء مستضافون في 6 مناطق جديدة.&lt;/p&gt;
&lt;h2 id="gpt-54--الموثوقية-فوق-الذكاء-الخام"&gt;GPT-5.4 — الموثوقية فوق الذكاء الخام&lt;/h2&gt;
&lt;p&gt;GPT-5.4 لا يتعلق بأن يكون أذكى. يتعلق بأن يكون أكثر موثوقية. استدلال أقوى عبر التفاعلات الطويلة، وامتثال أفضل للتعليمات، وإخفاقات أقل في منتصف سير العمل، وقدرات استخدام الحاسوب المدمجة. للوكلاء في الإنتاج، تلك الموثوقية أهم بكثير من نتائج المعايير المعيارية.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;النموذج&lt;/th&gt;
&lt;th&gt;السعر (لكل مليون رمز)&lt;/th&gt;
&lt;th&gt;الأفضل لـ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 (≤272K)&lt;/td&gt;
&lt;td&gt;$2.50 / $15 للمخرجات&lt;/td&gt;
&lt;td&gt;وكلاء الإنتاج، البرمجة، سير عمل المستندات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Pro&lt;/td&gt;
&lt;td&gt;$30 / $180 للمخرجات&lt;/td&gt;
&lt;td&gt;التحليل المعمّق، الاستدلال العلمي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;فعّال من حيث التكلفة&lt;/td&gt;
&lt;td&gt;التصنيف، الاستخراج، استدعاءات الأدوات الخفيفة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;الحركة الذكية هي استراتيجية توجيه: GPT-5.4 Mini يتعامل مع العمل عالي الحجم ومنخفض الزمن بينما يتولى GPT-5.4 الطلبات المكثفة بالاستدلال.&lt;/p&gt;
&lt;h2 id="sdk-مستقر-أخيرا"&gt;SDK مستقر أخيراً&lt;/h2&gt;
&lt;p&gt;حزمة &lt;code&gt;azure-ai-projects&lt;/code&gt; SDK أصدرت إصدارات مستقرة عبر جميع اللغات — Python 2.0.0 وJS/TS 2.0.0 وJava 2.0.0 و.NET 2.0.0 (الأول من أبريل). تبعية &lt;code&gt;azure-ai-agents&lt;/code&gt; اختفت — كل شيء يقع تحت &lt;code&gt;AIProjectClient&lt;/code&gt;. ثبّت بـ &lt;code&gt;pip install azure-ai-projects&lt;/code&gt; والحزمة تحزم &lt;code&gt;openai&lt;/code&gt; و&lt;code&gt;azure-identity&lt;/code&gt; كتبعيات مباشرة.&lt;/p&gt;
&lt;p&gt;لمطوّري .NET، هذا يعني حزمة NuGet واحدة لكامل سطح Foundry. لا مزيد من إدارة حزم وكلاء منفصلة.&lt;/p&gt;
&lt;h2 id="fireworks-ai-تجلب-النماذج-المفتوحة-إلى-azure"&gt;Fireworks AI تجلب النماذج المفتوحة إلى Azure&lt;/h2&gt;
&lt;p&gt;ربما الإضافة الأكثر أهمية معمارياً: Fireworks AI تعالج أكثر من 13 تريليون رمز يومياً بـ ~180,000 طلب/ثانية، متاحة الآن عبر Foundry. DeepSeek V3.2 وgpt-oss-120b وKimi K2.5 وMiniMax M2.5 عند الإطلاق.&lt;/p&gt;
&lt;p&gt;القصة الحقيقية هي &lt;strong&gt;إحضار أوزانك الخاصة&lt;/strong&gt; — حمّل أوزاناً مُكمَّمة أو مضبوطة الضبط الدقيق من أي مكان دون تغيير منظومة التقديم. انشر عبر الدفع حسب الاستخدام أو الإنتاجية المخصصة.&lt;/p&gt;
&lt;h2 id="أبرز-الإضافات-الأخرى"&gt;أبرز الإضافات الأخرى&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phi-4 Reasoning Vision 15B&lt;/strong&gt; — استدلال متعدد الوسائط للرسوم البيانية والمخططات وتخطيطات المستندات&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluations GA&lt;/strong&gt; — مُقيِّمات جاهزة للاستخدام مع مراقبة إنتاج مستمرة مُوصَلة إلى Azure Monitor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priority Processing&lt;/strong&gt; (معاينة) — مسار حوسبة مخصص لأحمال العمل الحساسة لزمن الاستجابة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voice Live&lt;/strong&gt; — بيئة تشغيل كلامية تتصل مباشرةً بوكلاء Foundry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing GA&lt;/strong&gt; — فحص كامل لتتبعات الوكلاء مع الفرز والتصفية&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إهمال PromptFlow&lt;/strong&gt; — الهجرة إلى Microsoft Framework Workflows بحلول يناير 2027&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="خلاصة"&gt;خلاصة&lt;/h2&gt;
&lt;p&gt;مارس 2026 نقطة تحوّل لـ Foundry. إتاحة خدمة Agent للعموم، وحزم SDK مستقرة عبر جميع اللغات، وGPT-5.4 لوكلاء إنتاج موثوقين، واستدلال النماذج المفتوحة عبر Fireworks AI — المنصة جاهزة لأحمال العمل الجادة.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;الملخص الكامل&lt;/a&gt; و&lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;ابنِ وكيلك الأول&lt;/a&gt; للبدء.&lt;/p&gt;</content:encoded></item><item><title>بناء واجهات مستخدم متعددة الوكلاء في الوقت الفعلي دون أن تبدو صندوقاً أسود</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</guid><description>يتعاون AG-UI مع إطار عمل Microsoft Agent لمنح مهام سير العمل متعددة الوكلاء واجهة أمامية حقيقية — مع بث فوري، وموافقات بشرية، ورؤية كاملة لما تفعله وكلاؤك.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إليك الحقيقة حول الأنظمة متعددة الوكلاء: تبدو رائعة في العروض التوضيحية. ثلاثة وكلاء يتبادلون العمل، ويحلّون المشكلات، ويتخذون القرارات. ثم تحاول عرضها أمام مستخدمين حقيقيين&amp;hellip; فلا شيء. مؤشر دوّار. ولا فكرة عن أيّ وكيل يفعل ماذا، أو لماذا النظام متوقف. هذا ليس منتجاً — هذه مشكلة ثقة.&lt;/p&gt;
&lt;p&gt;نشر فريق Microsoft Agent Framework للتو &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;شرحاً رائعاً&lt;/a&gt; حول دمج مهام سير عمل MAF مع &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI&lt;/a&gt;، وهو بروتوكول مفتوح لبث أحداث تنفيذ الوكيل إلى واجهة المستخدم الأمامية عبر Server-Sent Events. وبصراحة؟ هذا هو الجسر الذي كنا نفتقده.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-هذا-مطوري-net"&gt;لماذا يهمّ هذا مطوّري .NET&lt;/h2&gt;
&lt;p&gt;إذا كنت تبني تطبيقات مدعومة بالذكاء الاصطناعي، فمن المحتمل أنك اصطدمت بهذا الجدار. تنسيق الواجهة الخلفية يعمل بشكل رائع — يُسلّم الوكلاء العمل لبعضهم، وتنطلق الأدوات، وتُتخذ القرارات. لكن الواجهة الأمامية لا تعرف شيئاً مما يجري خلف الكواليس. يعالج AG-UI ذلك من خلال تعريف بروتوكول قياسي لبث أحداث الوكيل (مثل &lt;code&gt;RUN_STARTED&lt;/code&gt; و&lt;code&gt;STEP_STARTED&lt;/code&gt; و&lt;code&gt;TOOL_CALL_*&lt;/code&gt; و&lt;code&gt;TEXT_MESSAGE_*&lt;/code&gt;) مباشرةً إلى طبقة واجهة المستخدم عبر SSE.&lt;/p&gt;
&lt;p&gt;العرض التوضيحي الذي بنوه هو سير عمل دعم العملاء المؤلف من ثلاثة وكلاء: وكيل فرز يوجّه الطلبات، ووكيل استرداد يتعامل مع شؤون المال، ووكيل طلبات يدير الاستبدالات. لكل وكيل أدواته الخاصة، وطوبولوجيا التسليم معرّفة صراحةً — لا توجيه مبني على التخمين من النص التوجيهي.&lt;/p&gt;
&lt;h2 id="طوبولوجيا-التسليم-هي-النجم-الحقيقي"&gt;طوبولوجيا التسليم هي النجم الحقيقي&lt;/h2&gt;
&lt;p&gt;ما لفت انتباهي هو كيف يتيح لك &lt;code&gt;HandoffBuilder&lt;/code&gt; إعلان رسم بياني توجيه موجّه بين الوكلاء:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HandoffBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;participants&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;termination_condition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;termination_condition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Refunds, damaged-item claims...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement, exchange...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement logistics needed after refund.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;After replacement/shipping tasks complete.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;يُنشئ كل &lt;code&gt;add_handoff&lt;/code&gt; حافةً موجّهةً مع وصف بلغة طبيعية. يُولّد الإطار أدوات التسليم لكل وكيل بناءً على هذه الطوبولوجيا. وهكذا تكون قرارات التوجيه مرتكزةً على بنية التنسيق الخاصة بك، لا على ما يمليه نموذج اللغة الكبير. وهذا أمر بالغ الأهمية لموثوقية الإنتاج.&lt;/p&gt;
&lt;h2 id="الإنسان-في-الحلقة-بطريقة-فعلية"&gt;الإنسان في الحلقة بطريقة فعلية&lt;/h2&gt;
&lt;p&gt;يعرض هذا التوضيح نمطَي مقاطعة تحتاجهما أي تطبيق وكيل في العالم الحقيقي:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;مقاطعات موافقة الأدوات&lt;/strong&gt; — عندما يستدعي وكيل أداةً محدّدة بـ &lt;code&gt;approval_mode=&amp;quot;always_require&amp;quot;&lt;/code&gt;، يتوقف سير العمل ويُرسل حدثاً. تعرض الواجهة الأمامية نافذة موافقة باسم الأداة وحججها. لا حلقات إعادة محاولة تستهلك الرموز — مجرد تدفق توقف-موافقة-استئناف نظيف.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;مقاطعات طلبات المعلومات&lt;/strong&gt; — عندما يحتاج وكيل إلى مزيد من السياق من المستخدم (كمعرّف طلب مثلاً)، يتوقف ويسأل. تعرض الواجهة الأمامية السؤال، يردّ المستخدم، ويستأنف التنفيذ من حيث توقف بالضبط.&lt;/p&gt;
&lt;p&gt;يتدفق كلا النمطين كأحداث AG-UI قياسية، لذا لا تحتاج واجهتك الأمامية إلى منطق مخصص لكل وكيل — فهي تُصيّر أيّ حدث يأتي عبر اتصال SSE.&lt;/p&gt;
&lt;h2 id="الربط-بينهما-بسيط-بشكل-مفاجئ"&gt;الربط بينهما بسيط بشكل مفاجئ&lt;/h2&gt;
&lt;p&gt;التكامل بين MAF وAG-UI يتلخص في استدعاء دالة واحدة:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework.ag_ui&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_agent_framework_fastapi_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;workflow_factory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;_thread_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;create_handoff_workflow&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;add_agent_framework_fastapi_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/handoff_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;يُنشئ &lt;code&gt;workflow_factory&lt;/code&gt; سير عمل جديداً لكل خيط، لذا تحصل كل محادثة على حالة معزولة. تعالج نقطة النهاية كل تسليك SSE تلقائياً. إذا كنت تستخدم FastAPI بالفعل (أو يمكنك إضافته كطبقة خفيفة الوزن)، فهذا يكاد يكون بلا احتكاك.&lt;/p&gt;
&lt;h2 id="رأيي"&gt;رأيي&lt;/h2&gt;
&lt;p&gt;بالنسبة لنا كمطوّري .NET، السؤال الفوري هو: &amp;ldquo;هل يمكنني فعل هذا في C#؟&amp;rdquo; إطار عمل Agent متاح لكلٍّ من .NET وPython، وبروتوكول AG-UI مستقل عن اللغة (فهو مجرد SSE). لذا بينما يستخدم هذا العرض التوضيحي بالتحديد Python وFastAPI، فإن النمط ينتقل مباشرةً. يمكنك ربط ASP.NET Core minimal API بنقاط نهاية SSE باتباع نفس مخطط أحداث AG-UI.&lt;/p&gt;
&lt;p&gt;الخلاصة الأكبر هي أن واجهات المستخدم متعددة الوكلاء أصبحت مصدر قلق من الدرجة الأولى، لا فكرة لاحقة. إذا كنت تبني أي شيء تتفاعل فيه الوكلاء مع البشر — دعم العملاء، أو مسارات الموافقة، أو معالجة المستندات — فإن مجموعة تنسيق MAF وشفافية AG-UI هي النمط الواجب اتباعه.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;AG-UI + Microsoft Agent Framework يمنحانك أفضل ما في العالمين: تنسيق متين متعدد الوكلاء في الواجهة الخلفية، ورؤية في الوقت الفعلي في الواجهة الأمامية. لا مزيد من تفاعلات الوكيل كصندوق أسود.&lt;/p&gt;
&lt;p&gt;راجع &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;الشرح الكامل&lt;/a&gt; و&lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;مستودع بروتوكول AG-UI&lt;/a&gt; للتعمق أكثر.&lt;/p&gt;</content:encoded></item><item><title>تقييم التحديث من GitHub Copilot هو أفضل أداة ترحيل لا تستخدمها بعد</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>إضافة التحديث في GitHub Copilot لا تقترح تغييرات الكود فحسب — بل تُنتج تقييم ترحيل كاملًا مع مشكلات قابلة للتنفيذ ومقارنات لأهداف Azure وسير عمل تعاوني. إليك لماذا وثيقة التقييم هي مفتاح كل شيء.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ترحيل تطبيق .NET Framework قديم إلى .NET الحديث هو أحد تلك المهام التي يعلم الجميع أنه يجب القيام بها لكن لا أحد يريد البدء بها. إنها ليست مجرد &amp;ldquo;تغيير إطار العمل الهدف.&amp;rdquo; إنها واجهات API اختفت، وحزم لم تعد موجودة، ونماذج استضافة تعمل بشكل مختلف تمامًا، وملايين القرارات الصغيرة حول ما تضعه في حاوية، وما تُعيد كتابته، وما تتركه كما هو.&lt;/p&gt;
&lt;p&gt;نشر Jeffrey Fritz للتو &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;تعمقًا كاملًا في تقييم تحديث GitHub Copilot&lt;/a&gt;، وصراحةً؟ هذه أفضل أدوات الترحيل التي رأيتها لـ .NET. ليس بسبب توليد الكود — هذا أصبح أمرًا مفروغًا منه الآن. بل بسبب وثيقة التقييم التي تُنتجها.&lt;/p&gt;
&lt;h2 id="إنها-ليست-مجرد-محرك-اقتراحات-كود"&gt;إنها ليست مجرد محرك اقتراحات كود&lt;/h2&gt;
&lt;p&gt;تتبع إضافة VS Code نموذج &lt;strong&gt;تقييم ← تخطيط ← تنفيذ&lt;/strong&gt;. تُحلّل مرحلة التقييم قاعدة الكود بأكملها وتُنتج وثيقة منظمة تلتقط كل شيء: ما يحتاج إلى التغيير، وموارد Azure المراد توفيرها، ونموذج النشر المراد استخدامه. كل ما يلي — كود البنية التحتية، والحاويات، وبيانات النشر — ينبع مما يجده التقييم.&lt;/p&gt;
&lt;p&gt;يُخزَّن التقييم تحت &lt;code&gt;.github/modernize/assessment/&lt;/code&gt; في مشروعك. كل تشغيل يُنتج تقريرًا مستقلًا، لذا تبني سجلًا تاريخيًا ويمكنك تتبع كيف تتطور وضعية الترحيل لديك كلما أصلحت المشكلات.&lt;/p&gt;
&lt;h2 id="طريقتان-للبدء"&gt;طريقتان للبدء&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;التقييم الموصى به&lt;/strong&gt; — المسار السريع. اختر من بين المجالات المنسّقة (ترقية Java/.NET، جاهزية السحابة، الأمان) واحصل على نتائج ذات معنى دون لمس التكوين. رائع للنظرة الأولى على وضع تطبيقك.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;التقييم المخصص&lt;/strong&gt; — المسار المستهدف. قم بتكوين ما تريد تحليله بالضبط: الحوسبة المستهدفة (App Service، AKS، Container Apps)، نظام التشغيل المستهدف، تحليل الحاويات. اختر أهدافًا متعددة على Azure لمقارنة مناهج الترحيل جنبًا إلى جنب.&lt;/p&gt;
&lt;p&gt;عرض المقارنة مفيد حقًا. تطبيق به 3 مشكلات إلزامية لـ App Service قد يكون لديه 7 لـ AKS. رؤية كليهما يساعد في اتخاذ قرار الاستضافة قبل الالتزام بمسار الترحيل.&lt;/p&gt;
&lt;h2 id="تفصيل-المشكلات-قابل-للتنفيذ"&gt;تفصيل المشكلات قابل للتنفيذ&lt;/h2&gt;
&lt;p&gt;كل مشكلة تأتي بمستوى حرجية:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;إلزامية&lt;/strong&gt; — يجب إصلاحها وإلا يفشل الترحيل&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;محتملة&lt;/strong&gt; — قد تؤثر على الترحيل، تحتاج إلى حكم بشري&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;اختيارية&lt;/strong&gt; — تحسينات موصى بها، لن تعيق الترحيل&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;وكل مشكلة تربط بالملفات والأسطر المتأثرة، وتُقدم وصفًا تفصيليًا لما هو خاطئ ولماذا يهم ذلك للمنصة المستهدفة، وتُعطي خطوات معالجة ملموسة (ليس فقط &amp;ldquo;أصلح هذا&amp;rdquo;)، وتتضمن روابط للتوثيق الرسمي.&lt;/p&gt;
&lt;p&gt;يمكنك تسليم مشكلات فردية للمطورين وسيكون لديهم كل ما يحتاجون إليه للتصرف. هذا هو الفرق بين أداة تخبرك &amp;ldquo;هناك مشكلة&amp;rdquo; وأخرى تخبرك كيف تحلها.&lt;/p&gt;
&lt;h2 id="مسارات-الترقية-المدعومة"&gt;مسارات الترقية المدعومة&lt;/h2&gt;
&lt;p&gt;لـ .NET تحديدًا:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET Framework ← .NET 10&lt;/li&gt;
&lt;li&gt;ASP.NET ← ASP.NET Core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;كل مسار ترقية له قواعد كشف تعرف أي واجهات API أُزيلت، وأي أنماط ليس لها مقابل مباشر، وما هي مشكلات الأمان التي تحتاج إلى اهتمام.&lt;/p&gt;
&lt;p&gt;بالنسبة للفرق التي تدير تطبيقات متعددة، هناك أيضًا واجهة سطر أوامر (CLI) تدعم تقييمات دفعية متعددة المستودعات — استنسخ جميع المستودعات، وقيّمها جميعًا، واحصل على تقارير لكل تطبيق بالإضافة إلى عرض تجميعي للمحفظة.&lt;/p&gt;
&lt;h2 id="رأيي"&gt;رأيي&lt;/h2&gt;
&lt;p&gt;إذا كنت تجلس على تطبيقات .NET Framework قديمة (ولنكن صريحين، معظم فرق المؤسسات كذلك)، فهذه &lt;em&gt;هي&lt;/em&gt; الأداة التي تبدأ بها. وثيقة التقييم وحدها تستحق الوقت — إنها تحوّل &amp;ldquo;يجب أن نحدّث&amp;rdquo; الغامضة إلى قائمة ملموسة ذات أولويات من بنود العمل مع مسارات واضحة للمضي قدمًا.&lt;/p&gt;
&lt;p&gt;سير العمل التعاوني ذكي أيضًا: صدّر التقييمات، وشاركها مع فريقك، واستوردها دون إعادة التشغيل. مراجعات المعمارية حيث صانعو القرار ليسوا من يشغّل الأدوات؟ مغطاة.&lt;/p&gt;
&lt;h2 id="خلاصة"&gt;خلاصة&lt;/h2&gt;
&lt;p&gt;يحوّل تقييم تحديث GitHub Copilot ترحيل .NET من مشروع مخيف وغير محدد إلى عملية منظمة وقابلة للتتبع. ابدأ بتقييم موصى به لترى وضعك، ثم استخدم التقييمات المخصصة لمقارنة أهداف Azure وبناء خطة الترحيل.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;الشرح التفصيلي الكامل&lt;/a&gt; واحصل على &lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;إضافة VS Code&lt;/a&gt; لتجربتها على قاعدة الكود الخاصة بك.&lt;/p&gt;</content:encoded></item><item><title>خادم SQL MCP — الطريقة الصحيحة لمنح وكلاء الذكاء الاصطناعي وصولاً إلى قواعد البيانات</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>يمنح خادم SQL MCP من Data API builder وكلاءَ الذكاء الاصطناعي وصولاً آمناً وحتمياً إلى قواعد البيانات دون كشف المخططات أو الاعتماد على NL2SQL. يأتي مزوداً بتحكم في الصلاحيات، وتخزين مؤقت، ودعم لقواعد بيانات متعددة — كل ذلك مدمج فيه.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;لنكن صريحين: معظم خوادم MCP الخاصة بقواعد البيانات المتاحة اليوم مثيرة للقلق. تأخذ استعلاماً بلغة طبيعية، وتولّد SQL بشكل ديناميكي، وتشغّله مباشرةً على بياناتك الإنتاجية. ماذا يمكن أن يحدث بسبب ذلك؟ (كل شيء. كل شيء يمكن أن يحدث.)&lt;/p&gt;
&lt;p&gt;أعلن فريق Azure SQL للتو عن &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;خادم SQL MCP&lt;/a&gt;، وهو يتبع نهجاً مختلفاً جذرياً. مبنيٌّ كميزة في Data API builder (DAB) 2.0، يمنح وكلاءَ الذكاء الاصطناعي وصولاً منظّماً وحتمياً إلى عمليات قاعدة البيانات — دون NL2SQL، ودون كشف مخططك، وبتحكم كامل في الصلاحيات في كل خطوة.&lt;/p&gt;
&lt;h2 id="لماذا-لا-nl2sql"&gt;لماذا لا NL2SQL؟&lt;/h2&gt;
&lt;p&gt;هذا هو أكثر قرارات التصميم إثارةً للاهتمام. النماذج اللغوية ليست حتمية، والاستعلامات المعقدة هي الأكثر عرضة لإنتاج أخطاء دقيقة. الاستعلامات ذاتها التي يأمل المستخدمون أن يولّدها الذكاء الاصطناعي هي التي تحتاج أكبر قدر من التدقيق عند إنتاجها بطريقة غير حتمية.&lt;/p&gt;
&lt;p&gt;بدلاً من ذلك، يستخدم خادم SQL MCP نهج &lt;strong&gt;NL2DAB&lt;/strong&gt;. يتعامل الوكيل مع طبقة تجريد الكيانات في Data API builder ومنشئ الاستعلامات المدمج فيه لإنتاج T-SQL دقيق ومنسّق بشكل حتمي. النتيجة ذاتها للمستخدم، لكن دون مخاطر الـ JOINs المهلوسة أو الكشف غير المقصود للبيانات.&lt;/p&gt;
&lt;h2 id="سبعة-أدوات-لا-سبعمائة"&gt;سبعة أدوات، لا سبعمائة&lt;/h2&gt;
&lt;p&gt;يكشف خادم SQL MCP عن سبعة أدوات DML بالضبط، بغض النظر عن حجم قاعدة البيانات:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — اكتشاف الكيانات المتاحة والعمليات&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — إدراج صفوف&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — الاستعلام عن الجداول والعروض&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — تعديل الصفوف&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — حذف الصفوف&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — تشغيل الإجراءات المخزّنة&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — استعلامات التجميع&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;هذا ذكي لأن نوافذ السياق هي مساحة تفكير الوكيل. إغراقها بمئات من تعريفات الأدوات يقلص مساحة الاستدلال. سبعة أدوات ثابتة تُبقي الوكيل مركّزاً على &lt;em&gt;التفكير&lt;/em&gt; بدلاً من &lt;em&gt;التنقل&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;يمكن تمكين أو تعطيل كل أداة بشكل مستقل:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;runtime&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dml-tools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;describe-entities&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;create-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;read-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;update-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;delete-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;execute-entity&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;aggregate-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="البدء-بثلاثة-أوامر"&gt;البدء بثلاثة أوامر&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --database-type mssql &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;sql_connection_string&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --source dbo.Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --permissions &lt;span class="s2"&gt;&amp;#34;anonymous:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;هذا خادم SQL MCP يعمل ويكشف جدول Customers لديك. تعني طبقة تجريد الكيانات أنه بإمكانك تغيير الأسماء والأعمدة، وتقييد الحقول لكل دور، والتحكم بدقة فيما يراه الوكلاء — دون الكشف عن تفاصيل المخطط الداخلي.&lt;/p&gt;
&lt;h2 id="قصة-الأمان-متينة"&gt;قصة الأمان متينة&lt;/h2&gt;
&lt;p&gt;هنا تؤتي نضج Data API builder ثماره:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;التحكم في الصلاحيات في كل طبقة&lt;/strong&gt; — كل كيان يحدد الأدوار التي يمكنها القراءة والإنشاء والتحديث والحذف، والحقول المرئية لكل دور&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تكامل Azure Key Vault&lt;/strong&gt; — إدارة آمنة لسلاسل الاتصال والأسرار&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Entra + OAuth مخصص&lt;/strong&gt; — مصادقة جاهزة للإنتاج&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;سياسة أمان المحتوى&lt;/strong&gt; — يتفاعل الوكلاء عبر عقد محكوم، لا SQL خام&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;تجريد المخطط مهم بشكل خاص. أسماء الجداول والأعمدة الداخلية لا تُكشف أبداً للوكيل. تعرّف الكيانات والأسماء المستعارة والأوصاف التي تناسب تفاعل الذكاء الاصطناعي — لا ERD قاعدة بياناتك.&lt;/p&gt;
&lt;h2 id="قواعد-بيانات-وبروتوكولات-متعددة"&gt;قواعد بيانات وبروتوكولات متعددة&lt;/h2&gt;
&lt;p&gt;يدعم خادم SQL MCP كلاً من: Microsoft SQL وPostgreSQL وAzure Cosmos DB وMySQL. ولأنه ميزة DAB، فإنك تحصل على نقاط نهاية REST وGraphQL وMCP في آنٍ واحد من نفس الإعداد. نفس تعريفات الكيانات، ونفس قواعد التحكم في الصلاحيات، ونفس الأمان — عبر البروتوكولات الثلاثة.&lt;/p&gt;
&lt;p&gt;يمكن للإعداد التلقائي في DAB 2.0 فحص قاعدة بياناتك وبناء الإعداد بشكل ديناميكي، إذا كنت مرتاحاً لتجريد أقل في مرحلة النمذجة السريعة.&lt;/p&gt;
&lt;h2 id="رأيي"&gt;رأيي&lt;/h2&gt;
&lt;p&gt;هذه هي الطريقة الصحيحة للوصول المؤسسي إلى قواعد البيانات في وكلاء الذكاء الاصطناعي. ليس &amp;ldquo;هيا أيها LLM، اكتب لي بعض SQL ودعه يعمل على الإنتاج&amp;rdquo;. بدلاً من ذلك: طبقة كيانات محددة بوضوح، وتوليد استعلامات حتمي، وتحكم في الصلاحيات في كل خطوة، وتخزين مؤقت، ومراقبة، وقياسات أداء. إنه ممل بأفضل طريقة ممكنة.&lt;/p&gt;
&lt;p&gt;بالنسبة لمطوري .NET، قصة التكامل واضحة — DAB أداة .NET، يعمل خادم MCP كحاوية، ويتعامل مع Azure SQL الذي يستخدمه معظمنا. إذا كنت تبني وكلاء ذكاء اصطناعي تحتاج وصولاً إلى البيانات، فابدأ من هنا.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;خادم SQL MCP مجاني ومفتوح المصدر ويعمل في أي مكان. إنه النهج التوجيهي من Microsoft لمنح وكلاء الذكاء الاصطناعي وصولاً آمناً إلى قواعد البيانات. اطلع على &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;المقال الكامل&lt;/a&gt; و&lt;a href="https://aka.ms/sql/mcp"&gt;الوثائق&lt;/a&gt; للبدء.&lt;/p&gt;</content:encoded></item><item><title>ربط خوادم MCP على Azure Functions بوكلاء Foundry — إليك الطريقة</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>أنشئ خادم MCP مرة واحدة، وانشره على Azure Functions، وربطه بوكلاء Microsoft Foundry مع المصادقة المناسبة. أدواتك تعمل في كل مكان — VS Code وCursor والآن وكلاء الذكاء الاصطناعي المؤسسي.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ثمة شيء أحبه في منظومة MCP البيئية: تبني خادمك مرة واحدة ويعمل في كل مكان. VS Code وVisual Studio وCursor وChatGPT — كل عميل MCP يستطيع اكتشاف أدواتك واستخدامها. الآن، تضيف Microsoft مستهلكاً جديداً إلى تلك القائمة: وكلاء Foundry.&lt;/p&gt;
&lt;p&gt;نشرت Lily Ma من فريق Azure SDK &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;دليلاً عملياً&lt;/a&gt; حول ربط خوادم MCP المنشورة على Azure Functions بوكلاء Microsoft Foundry. إذا كان لديك خادم MCP بالفعل، فهذا إضافة قيمة صافية — لا إعادة بناء مطلوبة.&lt;/p&gt;
&lt;h2 id="لماذا-هذا-التركيب-منطقي"&gt;لماذا هذا التركيب منطقي&lt;/h2&gt;
&lt;p&gt;يمنحك Azure Functions بنية تحتية قابلة للتوسع، ومصادقة مدمجة، وفوترة بدون خادم لاستضافة خوادم MCP. يمنحك Microsoft Foundry وكلاء ذكاء اصطناعي يستطيعون التفكير والتخطيط واتخاذ الإجراءات. ربط الاثنين يعني أن أدواتك المخصصة — الاستعلام عن قاعدة بيانات، أو استدعاء واجهة برمجية تجارية، أو تشغيل منطق التحقق — تصبح قدرات يستطيع وكلاء الذكاء الاصطناعي المؤسسي اكتشافها واستخدامها بصورة مستقلة.&lt;/p&gt;
&lt;p&gt;النقطة الجوهرية: خادم MCP الخاص بك يبقى كما هو. أنت تضيف Foundry فحسب كمستهلك إضافي. الأدوات ذاتها التي تعمل في إعداد VS Code الخاص بك تشغّل الآن وكيل ذكاء اصطناعي يتفاعل معه فريقك أو عملاؤك.&lt;/p&gt;
&lt;h2 id="خيارات-المصادقة"&gt;خيارات المصادقة&lt;/h2&gt;
&lt;p&gt;هنا تكمن القيمة الحقيقية للمقال. أربع طرق للمصادقة تبعاً لسيناريوك:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الطريقة&lt;/th&gt;
&lt;th&gt;حالة الاستخدام&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;مبنية على مفتاح&lt;/strong&gt; (افتراضية)&lt;/td&gt;
&lt;td&gt;التطوير أو الخوادم التي لا تستخدم Entra auth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Entra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الإنتاج مع الهويات المُدارة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OAuth identity passthrough&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الإنتاج حيث يُصادق كل مستخدم بشكل فردي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;بدون مصادقة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;التطوير/الاختبار أو البيانات العامة فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;للإنتاج، Entra Microsoft مع هوية الوكيل هي المسار الموصى به. OAuth identity passthrough مخصص للحالات التي يهمّ فيها سياق المستخدم — يطلب الوكيل من المستخدمين تسجيل الدخول، ويحمل كل طلب رمز المستخدم الخاص به.&lt;/p&gt;
&lt;h2 id="الإعداد"&gt;الإعداد&lt;/h2&gt;
&lt;p&gt;التدفق على مستوى عالٍ:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;انشر خادم MCP على Azure Functions&lt;/strong&gt; — نماذج متاحة لـ &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt; وPython وTypeScript وJava&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;فعّل مصادقة MCP المدمجة&lt;/strong&gt; في تطبيق الدالة الخاص بك&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;احصل على URL نقطة النهاية&lt;/strong&gt; — &lt;code&gt;https://&amp;lt;FUNCTION_APP_NAME&amp;gt;.azurewebsites.net/runtime/webhooks/mcp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أضف خادم MCP كأداة في Foundry&lt;/strong&gt; — انتقل إلى وكيلك في البوابة، أضف أداة MCP جديدة، وأدخل نقطة النهاية وبيانات الاعتماد&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ثم اختبره في ملعب Agent Builder بإرسال موجّه يُشغّل إحدى أدواتك.&lt;/p&gt;
&lt;h2 id="رأيي"&gt;رأيي&lt;/h2&gt;
&lt;p&gt;قصة إمكانية التركيب هنا تزداد قوةً بشكل حقيقي. أنشئ خادم MCP مرة واحدة بـ .NET (أو Python أو TypeScript أو Java)، وانشره على Azure Functions، وكل عميل متوافق مع MCP يستطيع استخدامه — أدوات البرمجة، وتطبيقات الدردشة، والآن وكلاء الذكاء الاصطناعي المؤسسي. هذا نمط &amp;ldquo;اكتب مرة واحدة، استخدم في كل مكان&amp;rdquo; يعمل فعلاً.&lt;/p&gt;
&lt;p&gt;لمطوّري .NET تحديداً، &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;امتداد Azure Functions MCP&lt;/a&gt; يجعل هذا أمراً مباشراً. تعرّف على أدواتك كـ Azure Functions، وانشر، وستحصل على خادم MCP جاهز للإنتاج مع كل الأمان والتوسعية التي يوفرها Azure Functions.&lt;/p&gt;
&lt;h2 id="خلاصة"&gt;خلاصة&lt;/h2&gt;
&lt;p&gt;إذا كانت لديك أدوات MCP تعمل على Azure Functions، فإن ربطها بوكلاء Foundry هو مكسب سريع — أدواتك المخصصة تصبح قدرات ذكاء اصطناعي مؤسسية مع مصادقة مناسبة ودون تغييرات في كود الخادم.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;الدليل الكامل&lt;/a&gt; للحصول على تعليمات خطوة بخطوة لكل طريقة مصادقة، وراجع &lt;a href="https://learn.microsoft.com/azure/azure-functions/functions-mcp-foundry-tools?tabs=entra%2Cmcp-extension%2Cfoundry"&gt;الوثائق التفصيلية&lt;/a&gt; لإعدادات الإنتاج.&lt;/p&gt;</content:encoded></item><item><title>هندسة المنصات الوكيلية تصبح حقيقة — Git-APE يُظهر كيف</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>يضع مشروع Git-APE من Microsoft هندسة المنصات الوكيلية موضع التطبيق — باستخدام وكلاء GitHub Copilot وAzure MCP لتحويل الطلبات باللغة الطبيعية إلى بنية تحتية سحابية مُتحقَّق منها.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;كانت هندسة المنصات من تلك المصطلحات التي تبدو رائعة في محادثات المؤتمرات لكنها عادةً ما تعني &amp;ldquo;أنشأنا بوابة داخلية وغلافاً لـ Terraform.&amp;rdquo; الوعد الحقيقي — بنية تحتية ذاتية الخدمة آمنة فعلاً ومُحكَّمة وسريعة — كانت دائماً على بُعد خطوات.&lt;/p&gt;
&lt;p&gt;نشر فريق Azure للتو &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;الجزء الثاني من سلسلة هندسة المنصات الوكيلية&lt;/a&gt;، وهذا الجزء يتعلق بالتطبيق العملي. يطلقون عليه &lt;strong&gt;Git-APE&lt;/strong&gt; (نعم، الاختصار مقصود)، وهو مشروع مفتوح المصدر يستخدم وكلاء GitHub Copilot بالإضافة إلى خوادم Azure MCP لتحويل الطلبات باللغة الطبيعية إلى بنية تحتية مُتحقَّق منها ومنشورة.&lt;/p&gt;
&lt;h2 id="ما-الذي-يفعله-git-ape-فعلا"&gt;ما الذي يفعله Git-APE فعلاً&lt;/h2&gt;
&lt;p&gt;الفكرة الجوهرية: بدلاً من تعلّم المطوّرين وحدات Terraform، أو التنقل في واجهات المستخدم للبوابات، أو تقديم تذاكر إلى فريق المنصة، يتحدثون مع وكيل Copilot. يفسّر الوكيل النية، ويولّد البنية التحتية كأكواد، ويتحقق منها مقابل السياسات، وينشر — كل ذلك داخل VS Code.&lt;/p&gt;
&lt;p&gt;إليك الإعداد:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/Azure/git-ape
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; git-ape
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;افتح مساحة العمل في VS Code، وتُكتشف ملفات إعداد الوكيل تلقائياً بواسطة GitHub Copilot. تتفاعل مع الوكيل مباشرةً:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape deploy a function app with storage in West Europe
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;يستخدم الوكيل Azure MCP Server خلف الكواليس للتفاعل مع خدمات Azure. يُمكّن إعداد MCP في إعدادات VS Code قدرات محددة:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.serverMode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.enabledServices&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;deploy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bestpractices&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;group&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;subscription&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;functionapp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;sql&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;monitor&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.readOnly&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="لماذا-يهم-هذا"&gt;لماذا يهمّ هذا&lt;/h2&gt;
&lt;p&gt;لمن يبنون على Azure، يحوّل هذا محادثة هندسة المنصات من &amp;ldquo;كيف نبني بوابة&amp;rdquo; إلى &amp;ldquo;كيف نصف حواجز الحماية كواجهات برمجية.&amp;rdquo; حين تكون واجهة منصتك وكيل ذكاء اصطناعي، تصبح جودة قيودك وسياساتك هي المنتج.&lt;/p&gt;
&lt;p&gt;وضع الجزء الأول من المدوّنة النظرية: الواجهات البرمجية الموصوفة جيداً، ومخططات التحكم، وحواجز الحماية الصريحة تجعل المنصات جاهزة للوكلاء. يُثبت الجزء الثاني أنها تعمل من خلال شحن أدوات فعلية. الوكيل لا يولّد الموارد بشكل أعمى — بل يتحقق مقابل أفضل الممارسات، ويحترم اصطلاحات التسمية، ويطبّق سياسات مؤسستك.&lt;/p&gt;
&lt;p&gt;التنظيف بسيط بالقدر نفسه:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape destroy my-resource-group
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="رأيي"&gt;رأيي&lt;/h2&gt;
&lt;p&gt;لأكن صريحاً — هذا يتعلق بالنمط أكثر من الأداة المحددة. Git-APE نفسه هو بنية مرجعية/توضيحية. لكن الفكرة الكامنة — الوكلاء كواجهة لمنصتك، وMCP كبروتوكول، وGitHub Copilot كمضيف — هي وجهة تجربة المطوّر في المؤسسات.&lt;/p&gt;
&lt;p&gt;إذا كنت فريق منصة تبحث عن كيفية جعل أدواتك الداخلية صديقةً للوكلاء، فلا يوجد نقطة بداية أفضل. وإذا كنت مطوّر .NET تتساءل عن كيفية ارتباط هذا بعالمك: يعمل Azure MCP Server ووكلاء GitHub Copilot مع أي عبء عمل على Azure. واجهة برمجة ASP.NET Core، ومكدّس .NET Aspire، والخدمات المُعبّأة في حاويات — كل ذلك يمكن أن يكون هدفاً لتدفق نشر وكيلي.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;Git-APE هو نظرة مبكرة لكن ملموسة على هندسة المنصات الوكيلية في التطبيق. استنسخ &lt;a href="https://github.com/Azure/git-ape"&gt;المستودع&lt;/a&gt;، وجرّب العرض التوضيحي، وابدأ في التفكير في كيفية احتياج واجهات برمجية منصتك وسياساتها للظهور حتى يستطيع الوكيل استخدامها بأمان.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;المقال الكامل&lt;/a&gt; للشرح التفصيلي والعروض التوضيحية المرئية.&lt;/p&gt;</content:encoded></item><item><title>azd يتيح الآن تشغيل وكلاء الذكاء الاصطناعي وتصحيح أخطائها محلياً — إليك ما تغيّر في مارس 2026</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>شحنت واجهة Azure Developer CLI سبعة إصدارات في مارس 2026. أبرزها: حلقة تشغيل وتصحيح محلية لوكلاء الذكاء الاصطناعي، وتكامل GitHub Copilot في إعداد المشاريع، ودعم Container App Jobs.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;سبعة إصدارات في شهر واحد. هذا ما دفعه فريق Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) في مارس 2026، والميزة الرئيسية هي التي كنت أنتظرها: &lt;strong&gt;حلقة تشغيل وتصحيح محلية لوكلاء الذكاء الاصطناعي&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;نشر PC Chan &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;الملخص الكامل&lt;/a&gt;، ومع أن المحتوى غزير، دعني أُصفّيه إلى ما يهم فعلاً مطوّري .NET الذين يبنون تطبيقات مدعومة بالذكاء الاصطناعي.&lt;/p&gt;
&lt;h2 id="تشغيل-وكلاء-الذكاء-الاصطناعي-وتصحيح-أخطائها-دون-نشر"&gt;تشغيل وكلاء الذكاء الاصطناعي وتصحيح أخطائها دون نشر&lt;/h2&gt;
&lt;p&gt;هذه هي الكبرى. تُضيف إضافة &lt;code&gt;azure.ai.agents&lt;/code&gt; الجديدة مجموعة من الأوامر التي توفّر لك تجربة حلقة داخلية حقيقية لوكلاء الذكاء الاصطناعي:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — يُشغّل وكيلك محلياً&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — يُرسل رسائل إليه (محلياً أو بعد النشر)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — يعرض حالة الحاوية وسلامتها&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — يبثّ سجلات الحاوية في الوقت الفعلي&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;قبل هذا، كان اختبار وكيل ذكاء اصطناعي يعني النشر إلى Microsoft Foundry في كل مرة تُجري فيها تغييراً. الآن يمكنك التكرار محلياً، واختبار سلوك وكيلك، والنشر فقط حين تكون مستعداً. إن كنت تبني وكلاء باستخدام Microsoft Agent Framework أو Semantic Kernel، فهذا يُغيّر سير عملك اليومي.&lt;/p&gt;
&lt;p&gt;يعمل أمر invoke مقابل الوكلاء المحليين والمنشورين على حدٍّ سواء، مما يعني أنك تستطيع استخدام سير عمل الاختبار ذاته بصرف النظر عن مكان تشغيل الوكيل. هذا هو النوع من التفاصيل التي تُوفّر عليك الحاجة إلى صيانة مجموعتين من نصوص الاختبار.&lt;/p&gt;
&lt;h2 id="github-copilot-ينشئ-السقالات-لمشروع-azd-الخاص-بك"&gt;GitHub Copilot يُنشئ السقالات لمشروع azd الخاص بك&lt;/h2&gt;
&lt;p&gt;بات &lt;code&gt;azd init&lt;/code&gt; يُقدّم خياراً &amp;ldquo;إعداد مع GitHub Copilot (معاينة)&amp;rdquo;. بدلاً من الإجابة يدوياً على الأسئلة حول بنية مشروعك، يُهيّئ وكيل Copilot الإعداد نيابةً عنك. يتحقق من وجود دليل عمل غير نظيف قبل تعديل أي شيء، ويطلب موافقة على أدوات خادم MCP مسبقاً.&lt;/p&gt;
&lt;p&gt;حين يفشل أمر ما، يُقدّم &lt;code&gt;azd&lt;/code&gt; الآن استكشاف أخطاء بمساعدة الذكاء الاصطناعي: اختر فئة (شرح، توجيه، استكشاف أخطاء، أو تخطّي)، ودع الوكيل يقترح حلاً، ثم أعد المحاولة — كل ذلك دون مغادرة الطرفية. لإعدادات البنية التحتية المعقدة، هذا توفير حقيقي للوقت.&lt;/p&gt;
&lt;h2 id="container-app-jobs-وتحسينات-النشر"&gt;Container App Jobs وتحسينات النشر&lt;/h2&gt;
&lt;p&gt;بعض ميزات النشر الجديرة بالإشارة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt;: يُنشر &lt;code&gt;azd&lt;/code&gt; الآن &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; من خلال إعداد &lt;code&gt;host: containerapp&lt;/code&gt; الموجود. يُحدّد قالب Bicep الخاص بك ما إذا كان الهدف Container App أم Job — لا إعداد إضافي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مهل نشر قابلة للتهيئة&lt;/strong&gt;: خيار &lt;code&gt;--timeout&lt;/code&gt; الجديد في &lt;code&gt;azd deploy&lt;/code&gt; وحقل &lt;code&gt;deployTimeout&lt;/code&gt; في &lt;code&gt;azure.yaml&lt;/code&gt;. لا مزيد من التخمين حول الحد الافتراضي البالغ 1200 ثانية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;احتياطي البناء المحلي&lt;/strong&gt;: حين يفشل البناء عن بُعد في ACR، ينتقل &lt;code&gt;azd&lt;/code&gt; تلقائياً إلى البناء المحلي باستخدام Docker/Podman.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التحقق المحلي المسبق للنشر&lt;/strong&gt;: يتم التحقق من معاملات Bicep محلياً قبل النشر، مما يكتشف المعاملات المفقودة دون رحلة ذهاب وإياب إلى Azure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="تحسينات-تجربة-المطور"&gt;تحسينات تجربة المطوّر&lt;/h2&gt;
&lt;p&gt;بعض التحسينات الأصغر التي تتراكم لتُحدث فارقاً:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;الكشف التلقائي عن pnpm/yarn&lt;/strong&gt; لمشاريع JS/TS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;دعم pyproject.toml&lt;/strong&gt; لتعبئة Python&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أدلة قوالب محلية&lt;/strong&gt; — يقبل &lt;code&gt;azd init --template&lt;/code&gt; الآن مسارات نظام الملفات للتكرار دون اتصال&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;رسائل خطأ أفضل&lt;/strong&gt; في وضع &lt;code&gt;--no-prompt&lt;/code&gt; — تُبلَّغ جميع القيم المفقودة دفعة واحدة مع أوامر الحل&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;متغيرات بيئة البناء&lt;/strong&gt; مُحقونة في جميع العمليات الفرعية لبناء الأطر (.NET، Node.js، Java، Python)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;هذه الأخيرة دقيقة لكنها مهمة: بناء .NET الخاص بك لديه الآن وصول إلى متغيرات بيئة &lt;code&gt;azd&lt;/code&gt;، مما يعني أنك تستطيع إجراء حقن إعداد وقت البناء دون نصوص إضافية.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;حلقة تصحيح أخطاء وكيل الذكاء الاصطناعي المحلية هي نجمة هذا الإصدار، لكن تراكم تحسينات النشر وصقل تجربة المطوّر يجعل &lt;code&gt;azd&lt;/code&gt; يبدو أكثر نضجاً من أي وقت مضى. إن كنت تنشر تطبيقات .NET إلى Azure — خاصةً وكلاء الذكاء الاصطناعي — فهذا التحديث يستحق التثبيت.&lt;/p&gt;
&lt;p&gt;تحقق من &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;ملاحظات الإصدار الكاملة&lt;/a&gt; لكل التفاصيل، أو ابدأ بـ &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;تثبيت azd&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>KubeCon أوروبا 2026: ما يجب أن يهتمّ به مطوّرو .NET فعلاً</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>أطلقت Microsoft حزمة ضخمة من إعلانات Kubernetes في KubeCon أوروبا 2026. هذه النسخة المصفّاة — فقط تحديثات AKS والسحابة الأصيلة التي تهمّك إذا كنت تشحن تطبيقات .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;تعرف ذلك الشعور حين يصدر منشور إعلانات ضخم وأنت تتصفحه تفكّر &amp;ldquo;رائع، لكن ما الذي يغيّره هذا فعلاً بالنسبة لي&amp;rdquo;؟ هذا بالضبط شعوري في كل موسم KubeCon.&lt;/p&gt;
&lt;p&gt;نشرت Microsoft للتوّ &lt;a href="https://opensource.microsoft.com/blog/2026/03/24/whats-new-with-microsoft-in-open-source-and-kubernetes-at-kubecon-cloudnativecon-europe-2026/"&gt;ملخصها الكامل لـ KubeCon Europe 2026&lt;/a&gt; — كتبه Brendan Burns بنفسه — وفي الحقيقة؟ ثمة مضمون حقيقي هنا. لا مجرد مربعات اختيار للميزات، بل تحسينات تشغيلية من النوع الذي يغيّر طريقة تشغيل الأشياء في الإنتاج.&lt;/p&gt;
&lt;p&gt;دعني أُفصّل ما يهمّ فعلاً لنا كمطوّري .NET.&lt;/p&gt;
&lt;h2 id="mtls-دون-ضريبة-service-mesh"&gt;mTLS دون ضريبة service mesh&lt;/h2&gt;
&lt;p&gt;إليك الحقيقة بشأن شبكات الخدمات: الجميع يريد ضمانات الأمان، ولا أحد يريد الأعباء التشغيلية. AKS يسدّ تلك الفجوة أخيراً.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; يمنحك TLS المتبادل، والتفويض الواعي بالتطبيق، وبيانات تتبع حركة المرور — دون نشر شبكة كاملة ثقيلة بالحاويات الجانبية. مدمجاً مع &lt;a href="https://aka.ms/acns/cilium-mtls"&gt;Cilium mTLS في Advanced Container Networking Services&lt;/a&gt;، تحصل على اتصال مشفّر بين الـ pods باستخدام شهادات X.509 وSPIRE لإدارة الهوية.&lt;/p&gt;
&lt;p&gt;ما يعنيه هذا عملياً: واجهات ASP.NET Core APIs تتحدث إلى العمال الخلفيين، وخدمات gRPC تستدعي بعضها — كل ذلك مشفّر ومُتحقق من الهوية على مستوى الشبكة، بدون أي تغييرات في كود التطبيق. هذا ضخم.&lt;/p&gt;
&lt;p&gt;للفرق التي تنقل من &lt;code&gt;ingress-nginx&lt;/code&gt;، ثمة أيضاً &lt;a href="https://aka.ms/aks/app-routing/gateway-api"&gt;Application Routing with Meshless Istio&lt;/a&gt; مع دعم كامل لـ Kubernetes Gateway API. لا حاويات جانبية. قائم على المعايير. وشحنوا أداة &lt;code&gt;ingress2gateway&lt;/code&gt; للهجرة التدريجية.&lt;/p&gt;
&lt;h2 id="إمكانية-مراقبة-gpu-ليست-ملحقة-بعد-الواقعة"&gt;إمكانية مراقبة GPU ليست مُلحقةً بعد الواقعة&lt;/h2&gt;
&lt;p&gt;إذا كنت تشغّل استدلال الذكاء الاصطناعي جنباً إلى جنب مع خدمات .NET (وبصراحة، من لا يبدأ في فعل ذلك؟)، فربما اصطدمت بنقطة عمياء في مراقبة GPU. كنت تحصل على لوحات معلومات رائعة للمعالج والذاكرة، ثم&amp;hellip; لا شيء لـ GPUs دون تجهيز أدوات تصدير يدوياً.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS يعرض الآن مقاييس GPU بشكل أصلي&lt;/a&gt; إلى Prometheus وGrafana المُدارَين. نفس المنظومة، نفس لوحات المعلومات، نفس خط أنابيب التنبيه. لا أدوات تصدير مخصصة، لا وكلاء من جهات خارجية.&lt;/p&gt;
&lt;p&gt;على صعيد الشبكة، أضافوا رؤية لكل تدفق لحركة HTTP وgRPC وKafka مع &lt;a href="https://learn.microsoft.com/en-us/azure/aks/container-network-observability-logs"&gt;تجربة Azure Monitor بنقرة واحدة&lt;/a&gt;. عناوين IP، والمنافذ، وأحمال العمل، واتجاه التدفق، وقرارات السياسة — كل ذلك في لوحات معلومات مدمجة.&lt;/p&gt;
&lt;p&gt;وإليك ما أوقفني مندهشاً: &lt;a href="https://learn.microsoft.com/en-us/azure/aks/advanced-container-networking-services-overview"&gt;شبكات الحاويات الوكيلية&lt;/a&gt; تضيف واجهة ويب تتيح لك طرح أسئلة باللغة الطبيعية حول حالة شبكة مجموعتك. &amp;ldquo;لماذا لا يصل pod X إلى الخدمة Y؟&amp;rdquo; ← تشخيصات للقراءة فقط من بيانات تتبع حية. هذا مفيد فعلاً في الساعة الثانية صباحاً.&lt;/p&gt;
&lt;h2 id="شبكة-متعددة-العناقيد-لا-تتطلب-شهادة-دكتوراه"&gt;شبكة متعددة العناقيد لا تتطلب شهادة دكتوراه&lt;/h2&gt;
&lt;p&gt;كان Kubernetes متعدد العناقيد تاريخياً تجربة &amp;ldquo;أحضر معك الصمغ الشبكي الخاص بك&amp;rdquo;. يشحن Azure Kubernetes Fleet Manager الآن &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;شبكة متعددة العناقيد&lt;/a&gt; عبر شبكة Cilium cluster mesh المُدارة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;اتصال موحّد عبر عناقيد AKS&lt;/li&gt;
&lt;li&gt;سجل خدمات عالمي للاكتشاف متعدد العناقيد&lt;/li&gt;
&lt;li&gt;تهيئة مُدارة مركزياً، لا تكرار لكل عنقود&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;إذا كنت تشغّل خدمات .NET المصغّرة عبر مناطق متعددة للمرونة أو الامتثال، فهذا يستبدل الكثير من التجهيزات المخصصة الهشّة. الخدمة A في West Europe تستطيع اكتشاف واستدعاء الخدمة B في East US عبر الشبكة، مع سياسات توجيه وأمان متسقة.&lt;/p&gt;
&lt;h2 id="ترقيات-لا-تتطلب-شجاعة"&gt;ترقيات لا تتطلب شجاعة&lt;/h2&gt;
&lt;p&gt;لنكن صريحين — ترقيات Kubernetes في الإنتاج مُجهِدة. &amp;ldquo;رقّي وتأمّل الخير&amp;rdquo; كانت الاستراتيجية الفعلية لفرق كثيرة جداً، وهي السبب الرئيسي في تخلّف العناقيد عن الإصدارات.&lt;/p&gt;
&lt;p&gt;قدرتان جديدتان تُغيّران هذا:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ترقيات agent pool بالأزرق والأخضر&lt;/strong&gt; تُنشئ pool عقد موازياً بالتهيئة الجديدة. تحقق من السلوك، وانقل حركة المرور تدريجياً، واحتفظ بمسار تراجع واضح. لا مزيد من التعديلات في المكان على عقد الإنتاج.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;التراجع عن agent pool&lt;/strong&gt; يتيح لك العودة بـ pool العقد إلى إصدار Kubernetes وصورة العقدة السابقة بعد ترقية فاشلة — دون إعادة بناء العنقود.&lt;/p&gt;
&lt;p&gt;معاً، تمنح هذه القدرات المشغّلين أخيراً تحكماً حقيقياً في دورة حياة الترقية. لفرق .NET، هذا مهم لأن سرعة المنصة تُحدِّد مباشرةً مدى سرعة تبنّي بيئات التشغيل الجديدة وتصحيحات الأمان وقدرات الشبكة.&lt;/p&gt;
&lt;h2 id="أحمال-العمل-بالذكاء-الاصطناعي-تصبح-مواطنين-من-الدرجة-الأولى-في-kubernetes"&gt;أحمال العمل بالذكاء الاصطناعي تصبح مواطنين من الدرجة الأولى في Kubernetes&lt;/h2&gt;
&lt;p&gt;العمل مفتوح المصدر في المنبع لا يقل أهمية. Dynamic Resource Allocation (DRA) وصل للإتاحة العامة في Kubernetes 1.36، مما يجعل جدولة GPU ميزة من الدرجة الأولى بدلاً من حلّ مؤقت.&lt;/p&gt;
&lt;p&gt;عدة مشاريع تستحق المتابعة:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;المشروع&lt;/th&gt;
&lt;th&gt;ما يفعله&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kaito-project/kubeairunway"&gt;AI Runway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;واجهة Kubernetes مشتركة للاستدلال — انشر النماذج دون معرفة K8s، مع اكتشاف HuggingFace وتقديرات التكلفة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cncf.io/blog/2026/01/07/holmesgpt-agentic-troubleshooting-built-for-the-cloud-native-era/"&gt;HolmesGPT&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تشخيص وكيلي لبيئات السحابة الأصيلة — أصبح الآن مشروع CNCF Sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/project-dalec/dalec"&gt;Dalec&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;إنشاء صور حاويات تصريحي مع توليد SBOM — ثغرات أمنية أقل في مرحلة البناء&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;الاتجاه واضح: يجب أن تعمل واجهة .NET API الخاصة بك، وطبقة تنسيق Semantic Kernel، وأحمال عمل الاستدلال جميعها على نموذج منصة متسق واحد. نحن في طريقنا إلى ذلك.&lt;/p&gt;
&lt;h2 id="من-أين-أبدأ-هذا-الأسبوع"&gt;من أين أبدأ هذا الأسبوع&lt;/h2&gt;
&lt;p&gt;إذا كنت تُقيِّم هذه التغييرات لفريقك، فإليك قائمة الأولويات الصادقة:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;إمكانية المراقبة أولاً&lt;/strong&gt; — فعّل مقاييس GPU وسجلات تدفق الشبكة في عنقود غير الإنتاج. انظر ما الذي كنت تفتقده.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;جرّب ترقيات الأزرق والأخضر&lt;/strong&gt; — اختبر سير عمل التراجع قبل ترقية عنقود الإنتاج التالية. ابنِ الثقة في العملية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;جرّب الشبكة الواعية بالهوية&lt;/strong&gt; — اختر مسار خدمة داخلي واحد وفعّل mTLS مع Cilium. قِس الأعباء الإضافية (تنبيه: إنها ضئيلة).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;قيّم Fleet Manager&lt;/strong&gt; — إذا كنت تشغّل أكثر من عنقودين، فإن الشبكة متعددة العناقيد تؤتي ثمارها في تقليل التجهيزات المخصصة.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;تجارب صغيرة، تغذية راجعة سريعة. هذه دائماً هي الحركة الصحيحة.&lt;/p&gt;
&lt;h2 id="خلاصة"&gt;خلاصة&lt;/h2&gt;
&lt;p&gt;إعلانات KubeCon قد تكون ساحقة، لكن هذه الدفعة تُحرِّك الإبرة فعلاً لفرق .NET على AKS. أمان شبكي أفضل دون أعباء شبكة الخدمات، وإمكانية مراقبة GPU حقيقية، وترقيات أكثر أماناً، وأسس بنية تحتية للذكاء الاصطناعي أقوى.&lt;/p&gt;
&lt;p&gt;إذا كنت على AKS بالفعل، فهذه لحظة رائعة لتحسين مستوى عملياتك. وإذا كنت تخطط لنقل أحمال عمل .NET إلى Kubernetes — المنصة أصبحت للتوّ أكثر جاهزيةً للإنتاج بشكل ملموس.&lt;/p&gt;</content:encoded></item><item><title>خادم SQL MCP، وCopilot في SSMS، ومحور قواعد البيانات بالوكلاء: ما الذي يهمّ فعلاً من SQLCon 2026</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</guid><description>أعلنت Microsoft عن مجموعة من تحديثات قواعد البيانات في SQLCon 2026. إليك ما يهمّ فعلاً إذا كنت تبني تطبيقات مدعومة بالذكاء الاصطناعي على Azure SQL.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;أطلقت Microsoft للتو &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;SQLCon 2026 بالتزامن مع FabCon في أتلانتا&lt;/a&gt;، وهناك الكثير لاستيعابه. يغطي الإعلان الأصلي كل شيء من خطط التوفير إلى ميزات الامتثال للمؤسسات. سأتجاوز شرائح تسعير المؤسسات وأركّز على الأجزاء التي تهمّ إذا كنت مطوراً يبني أشياء باستخدام Azure SQL والذكاء الاصطناعي.&lt;/p&gt;
&lt;h2 id="خادم-sql-mcp-في-معاينة-عامة"&gt;خادم SQL MCP في معاينة عامة&lt;/h2&gt;
&lt;p&gt;هذا هو العنوان الرئيسي بالنسبة لي. تمتلك Azure SQL Database Hyperscale الآن &lt;strong&gt;خادم SQL MCP&lt;/strong&gt; في معاينة عامة يتيح لك توصيل بيانات SQL بأمان بالوكلاء والـ Copilots باستخدام &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;إذا كنت تتابع موجة MCP — وبصراحة، يصعب تفاديها الآن — فهذا أمر مهمّ. بدلاً من بناء مسارات بيانات مخصصة لتزويد وكلاء الذكاء الاصطناعي بسياق من قاعدة بياناتك، تحصل على بروتوكول موحّد لكشف بيانات SQL مباشرةً. يمكن لوكلائك الاستعلام عن معلومات قاعدة البيانات الحية والتفكير فيها والتصرف بناءً عليها.&lt;/p&gt;
&lt;p&gt;لمن يبنون وكلاء ذكاء اصطناعي باستخدام Semantic Kernel أو Microsoft Agent Framework، يفتح هذا مساراً تكاملياً نظيفاً. يحتاج وكيلك التحقق من المخزون؟ البحث عن سجل عميل؟ التحقق من صحة طلب؟ يمنحه MCP طريقة منظمة للقيام بذلك دون أن تكتب كود جلب بيانات مخصصاً لكل سيناريو.&lt;/p&gt;
&lt;h2 id="github-copilot-في-ssms-22-أصبح-متاحا-عموما"&gt;GitHub Copilot في SSMS 22 أصبح متاحاً عموماً&lt;/h2&gt;
&lt;p&gt;إذا كنت تقضي وقتاً في SQL Server Management Studio — ولنكن صادقين، معظمنا لا يزال يفعل ذلك — فإن GitHub Copilot متاح الآن عموماً في SSMS 22. نفس تجربة Copilot التي تستخدمها بالفعل في VS Code وVisual Studio، لكن لـ T-SQL.&lt;/p&gt;
&lt;p&gt;القيمة العملية هنا واضحة: مساعدة تعتمد على المحادثة لكتابة الاستعلامات، وإعادة هيكلة الإجراءات المخزنة، واستكشاف مشكلات الأداء، والتعامل مع مهام الإدارة. لا شيء ثوري في المفهوم، لكن وجوده مباشرةً في SSMS يعني أنك لست مضطراً إلى التبديل إلى محرر آخر فقط للحصول على مساعدة ذكاء اصطناعي في عمل قاعدة البيانات.&lt;/p&gt;
&lt;h2 id="فهارس-المتجهات-حصلت-على-تحسين-جوهري"&gt;فهارس المتجهات حصلت على تحسين جوهري&lt;/h2&gt;
&lt;p&gt;تمتلك Azure SQL Database الآن فهارس متجهات أسرع وأكثر قدرةً مع دعم كامل للإدراج والتحديث والحذف. هذا يعني أن بيانات المتجهات تبقى حديثة في الوقت الفعلي — لا حاجة لإعادة الفهرسة الدفعية.&lt;/p&gt;
&lt;p&gt;إليك ما هو جديد:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;التكميم&lt;/strong&gt; لأحجام فهارس أصغر دون خسارة دقة كبيرة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التصفية التكرارية&lt;/strong&gt; للحصول على نتائج أدق&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تكامل أوثق مع محسّن الاستعلامات&lt;/strong&gt; لأداء متوقع&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;إذا كنت تقوم بالتوليد المعزز بالاسترجاع (RAG) باستخدام Azure SQL كمخزن متجهات، فهذه التحسينات مفيدة مباشرةً. يمكنك الاحتفاظ بمتجهاتك إلى جانب بياناتك العلائقية في نفس قاعدة البيانات، مما يبسّط بنيتك بشكل ملحوظ مقارنةً بتشغيل قاعدة بيانات متجهات منفصلة.&lt;/p&gt;
&lt;p&gt;تتوفر تحسينات المتجهات نفسها أيضاً في SQL database في Fabric، نظراً لأن كليهما يعمل على نفس محرك SQL في الأساس.&lt;/p&gt;
&lt;h2 id="محور-قواعد-البيانات-في-fabric-الإدارة-الوكيلية"&gt;محور قواعد البيانات في Fabric: الإدارة الوكيلية&lt;/h2&gt;
&lt;p&gt;هذا يتطلع إلى المستقبل أكثر، لكنه مثير للاهتمام. أعلنت Microsoft عن &lt;strong&gt;محور قواعد البيانات في Microsoft Fabric&lt;/strong&gt; (وصول مبكر)، الذي يمنحك لوحة تحكم موحّدة عبر Azure SQL وCosmos DB وPostgreSQL وMySQL وSQL Server عبر Arc.&lt;/p&gt;
&lt;p&gt;الزاوية المثيرة للاهتمام ليست مجرد العرض الموحّد — بل النهج الوكيلي للإدارة. تراقب وكلاء الذكاء الاصطناعي باستمرار مجموعة قواعد البيانات، وتكشف ما تغيّر، وتوضح لماذا يهمّ، وتقترح ما يجب فعله بعد ذلك. إنه نموذج يضع الإنسان في الحلقة حيث يقوم الوكيل بالعمل الشاق وأنت تتخذ القرارات.&lt;/p&gt;
&lt;p&gt;للفرق التي تدير أكثر من عدد قليل من قواعد البيانات، قد يقلل هذا فعلاً من الضوضاء التشغيلية. بدلاً من القفز بين البوابات والتحقق يدوياً من المقاييس، يجلب الوكيل الإشارة إليك.&lt;/p&gt;
&lt;h2 id="ما-يعنيه-هذا-لمطوري-net"&gt;ما يعنيه هذا لمطوّري .NET&lt;/h2&gt;
&lt;p&gt;الخيط الرابط لكل هذه الإعلانات واضح: تُدمج Microsoft وكلاء الذكاء الاصطناعي في كل طبقة من طبقات مكدّس قواعد البيانات. ليس كحيلة، بل كطبقة أدوات عملية.&lt;/p&gt;
&lt;p&gt;إذا كنت تبني تطبيقات .NET تعتمد على Azure SQL، إليك ما سأفعله فعلاً:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;جرّب خادم SQL MCP&lt;/strong&gt; إذا كنت تبني وكلاء ذكاء اصطناعي. إنه أنظف طريقة لمنح وكلائك وصولاً إلى قاعدة البيانات دون تسليك مخصص.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;فعّل Copilot في SSMS&lt;/strong&gt; إذا لم تكن قد فعلت ذلك بعد — مكسب إنتاجية مجاني للعمل اليومي بـ SQL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ابحث في فهارس المتجهات&lt;/strong&gt; إذا كنت تقوم بـ RAG وتشغّل حالياً مخزن متجهات منفصلاً. التوحيد إلى Azure SQL يعني خدمة أقل للإدارة.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;الإعلان الكامل يحتوي على المزيد — خطط التوفير، ومساعدو الترحيل، وميزات الامتثال — لكن قصة المطوّر تكمن في خادم MCP، وتحسينات المتجهات، وطبقة الإدارة الوكيلية. هذه هي القطع التي تغيّر طريقة بنائك، لا مجرد ميزانيتك.&lt;/p&gt;
&lt;p&gt;اطّلع على &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;الإعلان الكامل من Shireesh Thota&lt;/a&gt; للصورة الكاملة، و&lt;a href="https://aka.ms/database-hub"&gt;سجّل للوصول المبكر إلى محور قواعد البيانات&lt;/a&gt; إذا أردت تجربة تجربة الإدارة الجديدة.&lt;/p&gt;</content:encoded></item><item><title>الاستجابات في الخلفية في Microsoft Agent Framework: لا مزيد من القلق من انتهاء المهلة</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>يتيح لك Microsoft Agent Framework الآن تفريغ مهام الذكاء الاصطناعي طويلة التشغيل باستخدام رموز الاستمرارية. إليك كيفية عمل الاستجابات في الخلفية ولماذا تهم وكلاء .NET الخاصة بك.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إذا بنيت أي شيء باستخدام نماذج التفكير مثل o3 أو GPT-5.2، فأنت تعرف المعاناة. يبدأ وكيلك في التفكير في مهمة معقدة، يجلس العميل ينتظر، وفي مكان ما بين &amp;ldquo;كل شيء على ما يرام&amp;rdquo; و&amp;quot;هل تعطل؟&amp;quot; تنتهي مهلة اتصالك. كل ذلك العمل؟ ضاع.&lt;/p&gt;
&lt;p&gt;أصدر Microsoft Agent Framework للتو &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;الاستجابات في الخلفية&lt;/a&gt; — وبصراحة، هذه من الميزات التي كان يجب أن تكون موجودة منذ اليوم الأول.&lt;/p&gt;
&lt;h2 id="مشكلة-الاستدعاءات-الحاجبة"&gt;مشكلة الاستدعاءات الحاجبة&lt;/h2&gt;
&lt;p&gt;في نمط الطلب-الاستجابة التقليدي، يحجب عميلك حتى ينتهي الوكيل. هذا يعمل بشكل جيد للمهام السريعة. لكن عندما تطلب من نموذج تفكير إجراء بحث معمق أو تحليل متعدد الخطوات أو إنشاء تقرير من 20 صفحة؟ أنت تتطلع إلى دقائق من الوقت الفعلي. خلال تلك الفترة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;يمكن أن تنتهي مهل اتصالات HTTP&lt;/li&gt;
&lt;li&gt;تقلبات الشبكة تقتل العملية بأكملها&lt;/li&gt;
&lt;li&gt;يحدق مستخدمك في مؤشر تحميل متسائلاً إذا كان أي شيء يحدث&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;الاستجابات في الخلفية تقلب هذا رأساً على عقب.&lt;/p&gt;
&lt;h2 id="كيفية-عمل-رموز-الاستمرارية"&gt;كيفية عمل رموز الاستمرارية&lt;/h2&gt;
&lt;p&gt;بدلاً من الحجب، تطلق مهمة الوكيل وتحصل على &lt;strong&gt;رمز استمرارية&lt;/strong&gt;. فكر فيه كتذكرة مطالبة في ورشة إصلاح — لا تقف عند الكاونتر تنتظر، بل تعود عندما يكون جاهزاً.&lt;/p&gt;
&lt;p&gt;سير العمل مباشر:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;أرسل طلبك مع &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;إذا كان الوكيل يدعم المعالجة في الخلفية، تحصل على رمز استمرارية&lt;/li&gt;
&lt;li&gt;استعلم حسب جدولك حتى يعود الرمز &lt;code&gt;null&lt;/code&gt; — هذا يعني أن النتيجة جاهزة&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;إليك الإصدار بـ .NET:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://&amp;lt;myresource&amp;gt;.openai.azure.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;deployment-name&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentResponse&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Poll until complete&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;إذا أكمل الوكيل فوراً (المهام البسيطة، النماذج التي لا تحتاج معالجة في الخلفية)، لا يُعاد رمز استمرارية. كودك يعمل فقط — بدون معالجة خاصة.&lt;/p&gt;
&lt;h2 id="البث-مع-الاستئناف-السحر-الحقيقي"&gt;البث مع الاستئناف: السحر الحقيقي&lt;/h2&gt;
&lt;p&gt;الاستعلام مناسب لسيناريوهات &amp;ldquo;أطلق وانسَ&amp;rdquo;، لكن ماذا عن عندما تريد تقدماً في الوقت الفعلي؟ الاستجابات في الخلفية تدعم أيضاً البث مع استئناف مدمج.&lt;/p&gt;
&lt;p&gt;كل تحديث مبث يحمل رمز استمراريته الخاص. إذا انقطع اتصالك في منتصف البث، تستأنف من حيث توقفت تماماً:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentResponseUpdate&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunStreamingAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Simulate a network interruption&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Resume from exactly where we left off&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunStreamingAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;يستمر الوكيل في المعالجة من جانب الخادم بغض النظر عما يحدث مع عميلك. هذا تحمّل للأعطال مدمج دون كتابة منطق إعادة المحاولة أو قواطع الدائرة.&lt;/p&gt;
&lt;h2 id="متى-تستخدم-هذا-فعلا"&gt;متى تستخدم هذا فعلاً&lt;/h2&gt;
&lt;p&gt;ليست كل استدعاءات الوكيل تحتاج إلى استجابات في الخلفية. للإكمالات السريعة، أنت تضيف تعقيداً بدون سبب. لكن إليك أين تتألق:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;مهام التفكير المعقدة&lt;/strong&gt; — تحليل متعدد الخطوات وبحث معمق وأي شيء يجعل نموذج التفكير يفكر فعلاً&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;توليد محتوى طويل&lt;/strong&gt; — تقارير تفصيلية ووثائق متعددة الأجزاء وتحليل مستفيض&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الشبكات غير الموثوقة&lt;/strong&gt; — عملاء الجوال ونشرات الحافة وشبكات VPN المؤسسية المتذبذبة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أنماط واجهة المستخدم غير المتزامنة&lt;/strong&gt; — أرسل مهمة، اذهب افعل شيئاً آخر، عد للنتائج&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;بالنسبة لنا كمطوري .NET الذين يبنون تطبيقات مؤسسية، النقطة الأخيرة مثيرة للاهتمام بشكل خاص. فكر في تطبيق Blazor حيث يطلب مستخدم تقريراً معقداً — تطلق مهمة الوكيل، تعرض له مؤشر تقدم، وتتركه يستمر في العمل. بدون مشاكل WebSocket، بدون بنية تحتية مخصصة للطوابير، فقط رمز واستعلام دوري.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;الاستجابات في الخلفية متاحة الآن في .NET وPython من خلال Microsoft Agent Framework. إذا كنت تبني وكلاء يفعلون أي شيء أكثر تعقيداً من الأسئلة والأجوبة البسيطة، فهذا يستحق إضافته إلى أدواتك. نمط رمز الاستمرارية يبقي الأمور بسيطة مع حل مشكلة إنتاجية حقيقية جداً.&lt;/p&gt;
&lt;p&gt;اطلع على &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;الوثائق الكاملة&lt;/a&gt; للرجوع الكامل إلى واجهة برمجية والمزيد من الأمثلة.&lt;/p&gt;</content:encoded></item><item><title>خادم Azure DevOps MCP يصل إلى Microsoft Foundry: ما الذي يعنيه هذا لوكلاء الذكاء الاصطناعي لديك</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</guid><description>أصبح خادم Azure DevOps MCP متاحاً الآن في Microsoft Foundry. اربط وكلاء الذكاء الاصطناعي مباشرةً بسير عمل DevOps — عناصر العمل والمستودعات والمسارات — ببضع نقرات.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;يمر MCP (بروتوكول سياق النموذج) بلحظته المميزة. إذا كنت تتابع منظومة وكلاء الذكاء الاصطناعي، فلاحظت على الأرجح انتشار خوادم MCP في كل مكان — حيث تمنح الوكلاء القدرة على التفاعل مع الأدوات والخدمات الخارجية من خلال بروتوكول موحد.&lt;/p&gt;
&lt;p&gt;الآن &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;أصبح خادم Azure DevOps MCP متاحاً في Microsoft Foundry&lt;/a&gt;، وهذه من التكاملات التي تجعلك تفكر في الإمكانات العملية.&lt;/p&gt;
&lt;h2 id="ما-الذي-يحدث-فعلا"&gt;ما الذي يحدث فعلاً&lt;/h2&gt;
&lt;p&gt;أصدرت Microsoft بالفعل خادم Azure DevOps MCP كـ&lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview"&gt;معاينة عامة&lt;/a&gt; — ذلك هو الخادم نفسه. الجديد هو التكامل مع Foundry. يمكنك الآن إضافة خادم Azure DevOps MCP إلى وكلاء Foundry مباشرةً من كتالوج الأدوات.&lt;/p&gt;
&lt;p&gt;لمن لم يتعرف على Foundry بعد: إنها المنصة الموحدة من Microsoft لبناء وإدارة التطبيقات والوكلاء المدعومة بالذكاء الاصطناعي على نطاق واسع. الوصول إلى النماذج، والتنسيق، والتقييم، والنشر — كل ذلك في مكان واحد.&lt;/p&gt;
&lt;h2 id="كيفية-الإعداد"&gt;كيفية الإعداد&lt;/h2&gt;
&lt;p&gt;الإعداد مباشر بشكل مفاجئ:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;في وكيل Foundry الخاص بك، انتقل إلى &lt;strong&gt;Add Tools&lt;/strong&gt; &amp;gt; &lt;strong&gt;Catalog&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ابحث عن &amp;ldquo;Azure DevOps&amp;rdquo;&lt;/li&gt;
&lt;li&gt;اختر Azure DevOps MCP Server (preview) وانقر &lt;strong&gt;Create&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;أدخل اسم مؤسستك وتواصل&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;هذا كل شيء. الوكيل لديك الآن وصول إلى أدوات Azure DevOps.&lt;/p&gt;
&lt;h2 id="التحكم-في-ما-يمكن-للوكيل-الوصول-إليه"&gt;التحكم في ما يمكن للوكيل الوصول إليه&lt;/h2&gt;
&lt;p&gt;هذا هو الجانب الذي أقدره: لست مقيداً بنهج &amp;ldquo;الكل أو لا شيء&amp;rdquo;. يمكنك تحديد الأدوات المتاحة لوكيلك. لذا إذا أردته فقط قراءة عناصر العمل دون لمس المسارات، يمكنك ضبط ذلك. مبدأ الصلاحية الأدنى، مطبقاً على وكلاء الذكاء الاصطناعي لديك.&lt;/p&gt;
&lt;p&gt;هذا مهم في سيناريوهات المؤسسات حيث لا تريد أن يُشغّل الوكيل مسار نشر بالخطأ لأن أحدهم طلب منه &amp;ldquo;المساعدة في الإصدار&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="لماذا-هذا-مثير-للاهتمام-لفرق-net"&gt;لماذا هذا مثير للاهتمام لفرق .NET&lt;/h2&gt;
&lt;p&gt;فكر في ما يتيحه هذا عملياً:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;مساعدو تخطيط السبرينت&lt;/strong&gt; — وكلاء يسحبون عناصر العمل ويحللون بيانات السرعة ويقترحون سعة السبرينت&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;بوتات مراجعة الكود&lt;/strong&gt; — وكلاء يفهمون سياق طلب السحب الخاص بك لأنهم يستطيعون فعلاً قراءة المستودعات وعناصر العمل المرتبطة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الاستجابة للحوادث&lt;/strong&gt; — وكلاء يمكنهم إنشاء عناصر عمل والاستعلام عن النشرات الأخيرة وربط الأخطاء بالتغييرات الأخيرة&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تأهيل المطورين&lt;/strong&gt; — &amp;ldquo;ما الذي يجب أن أعمل عليه؟&amp;rdquo; تحصل على إجابة حقيقية مستندة إلى بيانات المشروع الفعلية&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;بالنسبة لفرق .NET التي تستخدم بالفعل Azure DevOps لمسارات CI/CD وإدارة المشاريع، فإن امتلاك وكيل ذكاء اصطناعي يمكنه التفاعل مع تلك الأنظمة مباشرةً خطوة مهمة نحو أتمتة مفيدة حقيقية (وليس مجرد روبوت محادثة كخدمة).&lt;/p&gt;
&lt;h2 id="الصورة-الأكبر-لـ-mcp"&gt;الصورة الأكبر لـ MCP&lt;/h2&gt;
&lt;p&gt;هذا جزء من اتجاه أوسع: تصبح خوادم MCP الطريقة المعيارية التي تتفاعل بها وكلاء الذكاء الاصطناعي مع العالم الخارجي. نراها لـ GitHub وAzure DevOps وقواعد البيانات وواجهات برمجية SaaS — وتصبح Foundry المحور الذي تجتمع فيه هذه الاتصالات.&lt;/p&gt;
&lt;p&gt;إذا كنت تبني وكلاء في منظومة .NET، فإن MCP يستحق الاهتمام. البروتوكول موحد، والأدوات تنضج، وتكامل Foundry يجعله في متناول يدك دون الحاجة إلى توصيل خوادم يدوياً.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;خادم Azure DevOps MCP في Foundry في مرحلة المعاينة، لذا توقع أن يتطور. لكن سير العمل الأساسي متين: اتصل، وضبط وصول الأدوات، واترك وكلاءك يعملون مع بيانات DevOps الخاصة بك. إذا كنت بالفعل في منظومة Foundry، فهذا على بُعد بضع نقرات. جربه وانظر إلى سير العمل التي يمكنك بناؤها.&lt;/p&gt;
&lt;p&gt;اطلع على &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;الإعلان الكامل&lt;/a&gt; للحصول على خطوات الإعداد التفصيلية والمزيد من المعلومات.&lt;/p&gt;</content:encoded></item><item><title>خدمة Foundry Agent متاحة للعموم: ما يهمّ فعلاً لبنّائي وكلاء .NET</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>أصبحت خدمة Foundry Agent من Microsoft متاحة للعموم مع دعم الشبكات الخاصة، وVoice Live، وتقييمات الإنتاج، وبيئة تشغيل متعددة النماذج ومفتوحة. إليك ما تحتاج إلى معرفته.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;لنكن صريحين — بناء نموذج أولي لوكيل ذكاء اصطناعي هو الجزء السهل. الجزء الصعب هو كل ما يأتي بعده: نقله إلى بيئة الإنتاج مع عزل الشبكة المناسب، وتشغيل تقييمات ذات معنى حقيقي، ومعالجة متطلبات الامتثال، وتجنّب الأعطال في الساعة الثانية صباحاً.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;خدمة Foundry Agent أصبحت الآن متاحة للعموم&lt;/a&gt;، وهذا الإصدار مركّز تماماً على سدّ تلك الفجوة في &amp;ldquo;كل ما يأتي بعده&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="مبنية-على-responses-api"&gt;مبنية على Responses API&lt;/h2&gt;
&lt;p&gt;هذا هو العنوان الرئيسي: خدمة Foundry Agent من الجيل التالي مبنية على OpenAI Responses API. إذا كنت تبني بالفعل باستخدام هذا البروتوكول، فإن الهجرة إلى Foundry تستلزم تغييرات طفيفة في الكود. ما ستكسبه: أمان المؤسسات، والشبكات الخاصة، وEntra RBAC، والتتبع الكامل، والتقييم — فوق منطق وكيلك الحالي.&lt;/p&gt;
&lt;p&gt;البنية مفتوحة عن قصد. لست مقيّداً بمزوّد نماذج واحد أو إطار تنسيق واحد. استخدم DeepSeek للتخطيط، وOpenAI للتوليد، وLangGraph للتنسيق — بيئة التشغيل تتولى طبقة الاتساق.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_PROJECT_ENDPOINT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_openai_client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-enterprise-agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;definition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_MODEL_DEPLOYMENT_NAME&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conversations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;What are best practices for building AI agents?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;إذا كنت قادماً من حزمة &lt;code&gt;azure-ai-agents&lt;/code&gt;، فإن الوكلاء أصبحوا الآن عمليات من الدرجة الأولى على &lt;code&gt;AIProjectClient&lt;/code&gt; في &lt;code&gt;azure-ai-projects&lt;/code&gt;. أزل التبعية المنفصلة واستخدم &lt;code&gt;get_openai_client()&lt;/code&gt; لتشغيل الاستجابات.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="الشبكات-الخاصة-العقبة-المؤسسية-أزيلت"&gt;الشبكات الخاصة: العقبة المؤسسية أُزيلت&lt;/h2&gt;
&lt;p&gt;هذه هي الميزة التي تفتح الطريق أمام تبنّي المؤسسات. تدعم Foundry الآن الشبكات الخاصة الكاملة من طرف إلى طرف مع BYO VNet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;لا خروج عام&lt;/strong&gt; — لا تلمس حركة مرور الوكيل شبكة الإنترنت العامة أبداً&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;حقن الحاوية/الشبكة الفرعية&lt;/strong&gt; في شبكتك للاتصال المحلي&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;اتصال الأدوات مشمول&lt;/strong&gt; — خوادم MCP، وAzure AI Search، ووكلاء بيانات Fabric تعمل جميعها عبر مسارات خاصة&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;هذه النقطة الأخيرة بالغة الأهمية. لا تبقى طلبات الاستدلال فحسب خاصة — كل استدعاء لأداة وكل طلب استرجاع يبقى داخل حدود شبكتك أيضاً. للفرق العاملة في ظل سياسات تصنيف البيانات التي تحظر التوجيه الخارجي، هذا هو ما كان مفقوداً.&lt;/p&gt;
&lt;h2 id="مصادقة-mcp-بالطريقة-الصحيحة"&gt;مصادقة MCP بالطريقة الصحيحة&lt;/h2&gt;
&lt;p&gt;تدعم اتصالات خادم MCP الآن الطيف الكامل من أنماط المصادقة:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;طريقة المصادقة&lt;/th&gt;
&lt;th&gt;متى تستخدمها&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;مبنية على المفتاح&lt;/td&gt;
&lt;td&gt;وصول مشترك بسيط للأدوات الداخلية على مستوى المؤسسة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;من خدمة إلى خدمة؛ الوكيل يُصادق بهويته الخاصة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;عزل على مستوى المشروع؛ لا إدارة لبيانات الاعتماد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;وصول مُفوَّض من المستخدم؛ الوكيل يعمل نيابةً عن المستخدمين&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OAuth Identity Passthrough هو الأكثر إثارةً للاهتمام. عندما يحتاج المستخدمون إلى منح وكيل حق الوصول إلى بياناتهم الشخصية — OneDrive الخاص بهم، أو مؤسسة Salesforce الخاصة بهم، أو واجهة برمجية SaaS مقيّدة بالمستخدم — يعمل الوكيل نيابةً عنهم من خلال تدفقات OAuth القياسية. لا هوية نظام مشتركة تتظاهر بأنها الجميع.&lt;/p&gt;
&lt;h2 id="voice-live-الكلام-إلى-الكلام-دون-التعقيدات"&gt;Voice Live: الكلام إلى الكلام دون التعقيدات&lt;/h2&gt;
&lt;p&gt;كان إضافة الصوت إلى وكيل يعني سابقاً تجميع STT وLLM وTTS معاً — ثلاث خدمات، وثلاث نقاط تأخير، وثلاثة أسطح للفوترة، كلها متزامنة يدوياً. &lt;strong&gt;Voice Live&lt;/strong&gt; يدمج ذلك كله في واجهة برمجية موحّدة مُدارة مع:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;الكشف الدلالي عن نشاط الصوت ونهاية الدور (يفهم المعنى، لا الصمت فحسب)&lt;/li&gt;
&lt;li&gt;قمع الضوضاء وإلغاء الصدى من جانب الخادم&lt;/li&gt;
&lt;li&gt;دعم المقاطعة (يمكن للمستخدمين المقاطعة في منتصف الاستجابة)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;تمرّ تفاعلات الصوت عبر نفس بيئة تشغيل الوكيل كالنص. نفس المُقيِّمات، ونفس التتبعات، ونفس رؤية التكاليف. لسيناريوهات دعم العملاء، والخدمة الميدانية، أو إمكانية الوصول، يستبدل هذا ما كان يستلزم سابقاً خط أنابيب صوتياً مخصصاً.&lt;/p&gt;
&lt;h2 id="التقييمات-من-مربع-اختيار-إلى-مراقبة-مستمرة"&gt;التقييمات: من مربّع اختيار إلى مراقبة مستمرة&lt;/h2&gt;
&lt;p&gt;هنا تأخذ Foundry جودة الإنتاج بجدية. يمتلك نظام التقييم الآن ثلاث طبقات:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;مُقيِّمات جاهزة للاستخدام&lt;/strong&gt; — التماسك، والصلة، والتأريض، وجودة الاسترجاع، والسلامة. اربطها بمجموعة بيانات أو حركة المرور الحية واحصل على النتائج.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;مُقيِّمات مخصصة&lt;/strong&gt; — شفّر منطقك التجاري الخاص، ومعايير النبرة، وقواعد الامتثال الخاصة بمجالك.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;التقييم المستمر&lt;/strong&gt; — تأخذ Foundry عيّنات من حركة مرور الإنتاج الحية، وتشغّل مجموعة مُقيِّماتك، وتعرض النتائج عبر لوحات المعلومات. اضبط تنبيهات Azure Monitor لحالات انخفاض التأريض أو خرق عتبات السلامة.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;كل شيء يُنشر إلى Azure Monitor Application Insights. جودة الوكيل، وصحة البنية التحتية، والتكلفة، وتتبع التطبيق — كل ذلك في مكان واحد.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;eval_object&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;evals&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Agent Quality Evaluation&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data_source_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DataSourceConfigCustom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;item_schema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;object&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;properties&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;required&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;include_sample_schema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testing_criteria&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;azure_ai_evaluator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fluency&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;evaluator_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;builtin.fluency&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;initialization_parameters&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;deployment_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_MODEL_DEPLOYMENT_NAME&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;data_mapping&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{item.query}}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;response&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{sample.output_text}}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ستة-مناطق-جديدة-للوكلاء-المستضافين"&gt;ستة مناطق جديدة للوكلاء المستضافين&lt;/h2&gt;
&lt;p&gt;الوكلاء المستضافون متاحون الآن في East US وNorth Central US وSweden Central وSoutheast Asia وJapan East وغيرها. هذا مهم لمتطلبات إقامة البيانات ولضغط زمن الاستجابة عندما يعمل وكيلك قريباً من مصادر بياناته.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-هذا-مطوري-net"&gt;لماذا يهمّ هذا مطوّري .NET&lt;/h2&gt;
&lt;p&gt;على الرغم من أن نماذج الكود في إعلان الإتاحة للعموم تُقدَّم بـ Python أولاً، فإن البنية التحتية الأساسية مستقلة عن اللغة — وحزمة .NET SDK الخاصة بـ &lt;code&gt;azure-ai-projects&lt;/code&gt; تتبع نفس الأنماط. واجهة Responses API، وإطار التقييم، والشبكات الخاصة، ومصادقة MCP — كل هذا متاح من .NET.&lt;/p&gt;
&lt;p&gt;إذا كنت تنتظر أن تنتقل وكلاء الذكاء الاصطناعي من &amp;ldquo;عرض توضيحي رائع&amp;rdquo; إلى &amp;ldquo;يمكنني فعلاً شحن هذا في العمل&amp;rdquo;، فإن إصدار الإتاحة للعموم هذا هو الإشارة. الشبكات الخاصة، والمصادقة المناسبة، والتقييم المستمر، ومراقبة الإنتاج — هذه هي القطع التي كانت مفقودة.&lt;/p&gt;
&lt;h2 id="خلاصة"&gt;خلاصة&lt;/h2&gt;
&lt;p&gt;خدمة Foundry Agent متاحة الآن. ثبّت حزمة SDK، وافتح &lt;a href="https://ai.azure.com"&gt;البوابة&lt;/a&gt;، وابدأ البناء. &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;دليل البدء السريع&lt;/a&gt; يأخذك من الصفر إلى وكيل عامل في دقائق.&lt;/p&gt;
&lt;p&gt;للتعمق التقني الكامل مع جميع نماذج الكود، راجع &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;إعلان الإتاحة للعموم&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>من الحاسوب المحمول إلى الإنتاج: نشر وكلاء الذكاء الاصطناعي إلى Microsoft Foundry بأمرين</title><link>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>Azure Developer CLI يمتلك الآن أوامر 'azd ai agent' التي تأخذ وكيل الذكاء الاصطناعي الخاص بك من التطوير المحلي إلى نقطة نهاية Foundry حية في دقائق. إليك سير العمل الكامل.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;تعرف تلك الهوّة بين &amp;ldquo;يعمل على جهازي&amp;rdquo; و&amp;quot;منشور ويخدم حركة المرور&amp;quot;؟ بالنسبة لوكلاء الذكاء الاصطناعي، كانت تلك الهوّة واسعة بشكل مؤلم. تحتاج إلى توفير الموارد، ونشر النماذج، وربط الهوية، وإعداد المراقبة — وهذا قبل أن يتمكن أي شخص من استدعاء وكيلك فعليًا.&lt;/p&gt;
&lt;p&gt;Azure Developer CLI جعل للتو هذا &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;أمرًا من خطوتين&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="سير-عمل-azd-ai-agent-الجديد"&gt;سير عمل &lt;code&gt;azd ai agent&lt;/code&gt; الجديد&lt;/h2&gt;
&lt;p&gt;دعني أستعرض كيف يبدو هذا فعليًا. لديك مشروع وكيل ذكاء اصطناعي — لنقل وكيل كونسيرج فندقي. يعمل محليًا. تريده يعمل على Microsoft Foundry.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;هذا كل شيء. أمران اثنان. &lt;code&gt;azd ai agent init&lt;/code&gt; يُنشئ كود البنية التحتية في مستودعك، و&lt;code&gt;azd up&lt;/code&gt; يُوفِّر كل شيء على Azure وينشر وكيلك. تحصل على رابط مباشر لوكيلك في بوابة Foundry.&lt;/p&gt;
&lt;h2 id="ما-يحدث-تحت-الغطاء"&gt;ما يحدث تحت الغطاء&lt;/h2&gt;
&lt;p&gt;يُولِّد أمر &lt;code&gt;init&lt;/code&gt; قوالب Bicep حقيقية قابلة للفحص في مستودعك:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Foundry Resource&lt;/strong&gt; (الحاوية ذات المستوى الأعلى)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foundry Project&lt;/strong&gt; (حيث يعيش وكيلك)&lt;/li&gt;
&lt;li&gt;تكوين &lt;strong&gt;نشر النموذج&lt;/strong&gt; (GPT-4o، إلخ.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Managed identity&lt;/strong&gt; مع تعيينات أدوار RBAC المناسبة&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azure.yaml&lt;/code&gt; لخريطة الخدمة&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent.yaml&lt;/code&gt; مع بيانات الوكيل الوصفية ومتغيرات البيئة&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;إليك الجزء المهم: أنت تملك كل هذا. إنه Bicep موثَّق في مستودعك. يمكنك فحصه وتخصيصه وإيداعه جنبًا إلى جنب مع كود وكيلك. لا صناديق سحرية مبهمة.&lt;/p&gt;
&lt;h2 id="حلقة-التطوير-الداخلية"&gt;حلقة التطوير الداخلية&lt;/h2&gt;
&lt;p&gt;ما يعجبني حقًا هو قصة التطوير المحلي. حين تكرر على منطق الوكيل، لا تريد إعادة النشر في كل مرة تغيّر فيها مطالبة:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;يُشغّل هذا وكيلك محليًا. اقرنه مع &lt;code&gt;azd ai agent invoke&lt;/code&gt; لإرسال مطالبات اختبارية، وستحصل على حلقة تغذية راجعة محكمة. عدّل الكود، أعد التشغيل، استدعِ، كرّر.&lt;/p&gt;
&lt;p&gt;أمر &lt;code&gt;invoke&lt;/code&gt; ذكي في التوجيه أيضًا — عندما يعمل وكيل محلي، يستهدفه تلقائيًا. وعندما لا يعمل، يضرب نقطة النهاية البعيدة.&lt;/p&gt;
&lt;h2 id="المراقبة-في-الوقت-الفعلي"&gt;المراقبة في الوقت الفعلي&lt;/h2&gt;
&lt;p&gt;هذه هي الميزة التي أقنعتني. بمجرد نشر وكيلك:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent monitor --follow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;كل طلب واستجابة يتدفقان عبر وكيلك يتدفقان إلى طرفيتك في الوقت الفعلي. لتصحيح مشكلات الإنتاج، هذا لا يُقدَّر بثمن. لا حاجة للبحث في log analytics، ولا انتظار لتجميع المقاييس — ترى ما يحدث الآن.&lt;/p&gt;
&lt;h2 id="مجموعة-الأوامر-الكاملة"&gt;مجموعة الأوامر الكاملة&lt;/h2&gt;
&lt;p&gt;إليك المرجع السريع:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الأمر&lt;/th&gt;
&lt;th&gt;ما يفعله&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;إنشاء مشروع وكيل Foundry مع كود البنية التحتية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd up&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;توفير موارد Azure ونشر الوكيل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;إرسال مطالبات إلى الوكيل البعيد أو المحلي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;تشغيل الوكيل محليًا للتطوير&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;بث السجلات في الوقت الفعلي من الوكيل المنشور&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;التحقق من صحة الوكيل وحالته&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd down&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;تنظيف جميع موارد Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="لماذا-يهم-هذا-مطوري-net"&gt;لماذا يهم هذا مطوري .NET&lt;/h2&gt;
&lt;p&gt;على الرغم من أن المثال في الإعلان مبني على Python، فإن قصة البنية التحتية مستقلة عن اللغة. وكيل .NET الخاص بك يحصل على نفس سقالة Bicep، ونفس إعداد managed identity، ونفس خط المراقبة. وإذا كنت تستخدم بالفعل &lt;code&gt;azd&lt;/code&gt; لتطبيقات .NET Aspire أو عمليات نشر Azure، فهذا يندرج بسلاسة في سير عملك الحالي.&lt;/p&gt;
&lt;p&gt;لقد كانت هوّة النشر لوكلاء الذكاء الاصطناعي إحدى أكبر نقاط الاحتكاك في المنظومة. الانتقال من نموذج أولي يعمل إلى نقطة نهاية إنتاجية مع هوية وشبكة ومراقبة مناسبة لا ينبغي أن يستغرق أسبوعًا من عمل DevOps. الآن يستغرق أمرين وبضع دقائق.&lt;/p&gt;
&lt;h2 id="خلاصة"&gt;خلاصة&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd ai agent&lt;/code&gt; متاح الآن. إذا كنت تُؤجل نشر وكلاء الذكاء الاصطناعي الخاصة بك لأن إعداد البنية التحتية بدا يستلزم جهدًا كبيرًا، جرّب هذا. اطّلع على &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;الشرح التفصيلي الكامل&lt;/a&gt; للخطوات الكاملة بما في ذلك تكامل تطبيق الدردشة الأمامي.&lt;/p&gt;</content:encoded></item></channel></rss>