<?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>AI Agents | The .NET Blog</title><link>https://thedotnetblog.com/ar/tags/ai-agents/</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>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ar/tags/ai-agents/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft Agent Framework الجزء الثالث: من الأدوات إلى سير العمل — تتشابك قطع البناء في مكانها</title><link>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/</guid><description>يغطي الجزء الثالث من سلسلة Building Blocks for AI في .NET إطار عمل Microsoft Agent Framework — من الوكلاء المفردين بالأدوات إلى سير عمل متعدد الوكلاء مع الذاكرة. إليك ما يهم حقاً.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذه المقالة تلقائياً. للاطلاع على النسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;إذا كنت تتابع سلسلة Building Blocks for AI في .NET، فأنت تعلم: الجزء الأول أعطانا &lt;code&gt;IChatClient&lt;/code&gt; (الواجهة العالمية للنماذج)، والجزء الثاني أعطانا &lt;code&gt;Microsoft.Extensions.VectorData&lt;/code&gt; (البحث الدلالي وRAG). كلاهما أساسي ومفيد بمفرده. لكن هنا يبدأ كل شيء في الاتصال ببعضه.&lt;/p&gt;
&lt;p&gt;الجزء الثالث عن &lt;a href="https://github.com/microsoft/agent-framework"&gt;Microsoft Agent Framework&lt;/a&gt; — وبصراحة، هذه القطعة التي كنت أنتظر رؤيتها في .NET. الإصدار 1.0 شُحن في أبريل. الواجهة البرمجية مستقرة. حان وقت بناء وكلاء حقيقيين.&lt;/p&gt;
&lt;h2 id="ما-هو-الوكيل-فعلا-مقابل-روبوت-المحادثة"&gt;ما هو الوكيل فعلاً (مقابل روبوت المحادثة)&lt;/h2&gt;
&lt;p&gt;قبل الخوض في الكود، لنوضح هذا التمييز. روبوت المحادثة يستقبل المدخلات، يستدعي النموذج، يُعيد المخرجات. حلقة بسيطة.&lt;/p&gt;
&lt;p&gt;الوكيل لديه &lt;em&gt;استقلالية&lt;/em&gt;. يمكنه التفكير في مهمة، وتحديد الأدوات التي سيستخدمها، واستدعائها، وتقييم النتائج، والتقرير بما يفعله بعد ذلك — كل هذا دون كتابة منطق خطوة بخطوة لكل سيناريو. تعطيه الأدوات والتعليمات، ويتولى التنسيق بنفسه.&lt;/p&gt;
&lt;p&gt;فكر في الأمر هكذا: &lt;code&gt;IChatClient&lt;/code&gt; كإجراء محادثة. الوكيل كتفويض قائمة مهام لشخص ما.&lt;/p&gt;
&lt;h2 id="وكيلك-الأول-في-10-أسطر"&gt;وكيلك الأول في 10 أسطر&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;dotnet add package Microsoft.Agents.AI
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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="n"&gt;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="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;GetChatClient&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;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 class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are good at telling jokes.&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Joker&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="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="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="s"&gt;&amp;#34;Tell me a joke about a pirate.&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;code&gt;.AsAIAgent()&lt;/code&gt; هو الجسر. نفس النمط مثل &lt;code&gt;.AsIChatClient()&lt;/code&gt; من MEAI — يلف SDK الموفر في تجريد مستقر. يعمل مع Azure OpenAI وOpenAI وGitHub Models وMicrosoft Foundry أو النماذج المحلية.&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="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="s"&gt;&amp;#34;Tell me a joke about a pirate.&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;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&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;هنا يتوقف الوكلاء عن كونهم روبوتات محادثة متطورة. الأدوات هي وظائف يمكن للنموذج أن يقرر استدعاءها بناءً على طلب المستخدم. لا حاجة لمنطق توجيه من جانبك — النموذج يكتشف ذلك بنفسه.&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="na"&gt;[Description(&amp;#34;Get the weather for a given location.&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;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;GetWeather&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="na"&gt; [Description(&amp;#34;The location to get the weather for.&amp;#34;)]&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&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;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;$&amp;#34;The weather in {location} is cloudy with a high of 15°C.&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="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;chatClient&lt;/span&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 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 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="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;AIFunctionFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetWeather&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;code&gt;AIFunctionFactory&lt;/code&gt; من MEAI — نفس مصنع الأدوات الذي ستستخدمه مع &lt;code&gt;IChatClient&lt;/code&gt; العادي. إذا عرّفت أدوات لسيناريوهات الدردشة بالفعل، فهي تعمل هنا أيضاً.&lt;/p&gt;
&lt;p&gt;ثانياً، سمات &lt;code&gt;Description&lt;/code&gt; مهمة جداً. هذه هي الطريقة التي يفهم بها النموذج ما تفعله الأداة ومتى يستخدمها. تعامل معها كتوثيق لذكاءك الاصطناعي، لا للبشر.&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-csharp" data-lang="csharp"&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;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="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="s"&gt;&amp;#34;Tell me a joke about a pirate.&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&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="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;Now add some emojis and tell it in the voice of a pirate&amp;#39;s parrot.&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;session&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;code&gt;RunAsync&lt;/code&gt; عديم الحالة. مع الجلسة، الوكيل يعرف النكتة التي تشير إليها. &lt;code&gt;AgentSession&lt;/code&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-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;JsonElement&lt;/span&gt; &lt;span class="n"&gt;sessionState&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;SerializeSessionAsync&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&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;restoredSession&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;DeserializeSessionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sessionState&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;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="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="s"&gt;&amp;#34;What were we just talking about?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;restoredSession&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;هذا أمر بالغ الأهمية إذا كان وكيلك يعمل في بيئة serverless أو مُوسَّعة أفقياً.&lt;/p&gt;
&lt;h2 id="aicontextprovider-ذاكرة-دائمة-عبر-الجلسات"&gt;AIContextProvider: ذاكرة دائمة عبر الجلسات&lt;/h2&gt;
&lt;p&gt;الجلسات تحافظ على تاريخ المحادثة &lt;em&gt;داخل&lt;/em&gt; جلسة. ولكن ماذا عن معرفة أشياء عن مستخدم عبر الجلسات؟ &lt;code&gt;AIContextProvider&lt;/code&gt; يتعامل مع ذلك.&lt;/p&gt;
&lt;p&gt;له خطافان:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ProvideAIContextAsync&lt;/code&gt;&lt;/strong&gt; — يعمل &lt;em&gt;قبل&lt;/em&gt; كل تفاعل، يحقن سياقاً في الوكيل&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StoreAIContextAsync&lt;/code&gt;&lt;/strong&gt; — يعمل &lt;em&gt;بعد&lt;/em&gt; كل تفاعل، يتيح التعلم والاستمرارية&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;النمط أنيق: يمكنك تكديس موفرين متعددين — واحد لتفضيلات المستخدم، وآخر للتفاعلات الأخيرة، وآخر يستعلم من مخزن VectorData الخاص بك عن المستندات ذات الصلة. هذا الأخير هو بالضبط نمط RAG من الجزء الثاني، يعمل الآن تلقائياً كجزء من كل استدعاء للوكيل.&lt;/p&gt;
&lt;h2 id="سير-عمل-متعدد-الوكلاء"&gt;سير عمل متعدد الوكلاء&lt;/h2&gt;
&lt;p&gt;هنا يستحق الإطار اسمه. يتضمن نظام سير عمل قائم على الرسم البياني حيث يتصل المنفذون (الوكلاء، الوظائف، أياً كان) عبر الحواف.&lt;/p&gt;
&lt;p&gt;بعض الأنماط المدعومة أصلاً:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;تسلسلي&lt;/strong&gt;: مخرجات الوكيل A تغذي الوكيل B&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;li&gt;&lt;strong&gt;سير عمل فرعية&lt;/strong&gt;: تأليف سير العمل بشكل هرمي&lt;/li&gt;
&lt;/ul&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;WorkflowBuilder&lt;/span&gt; &lt;span class="n"&gt;builder&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;writerAgent&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&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;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;criticAgent&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;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsApproved&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;WithOutputFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsApproved&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;workflow&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;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;/p&gt;
&lt;p&gt;يحتوي الإطار على دعم مدمج لهذا عبر &lt;code&gt;FunctionApprovalRequestContent&lt;/code&gt; و&lt;code&gt;FunctionApprovalResponseContent&lt;/code&gt;. الوكيل يقترح استدعاء الأداة، كود تطبيقك يعرضه للمستخدم، والاستجابة تحدد ما إذا كان التنفيذ يستمر.&lt;/p&gt;
&lt;p&gt;هذه هي الطريقة الصحيحة للتفكير في الوكلاء في البيئات المؤسسية: ليس مستقلاً بالكامل، بل &lt;em&gt;استقلالية بضوابط&lt;/em&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;MEAI&lt;/strong&gt; يمنحك واجهة عالمية لأي نموذج&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VectorData&lt;/strong&gt; يمنح وكلاءك الوصول إلى معرفة مؤسستك عبر البحث الدلالي&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Framework&lt;/strong&gt; ينسق كل شيء — يستخدم &lt;code&gt;IChatClient&lt;/code&gt; داخلياً، يتكامل مع موفري السياق، وينسق عبر سير العمل&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;كل قطعة صُممت لتتكامل مع الأخريات. راجع &lt;a href="https://devblogs.microsoft.com/dotnet/microsoft-agent-framework-building-blocks-for-ai-part-3/"&gt;المنشور الأصلي لـ Jeremy Likness&lt;/a&gt; و&lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet"&gt;مستودع GitHub لـ Agent Framework&lt;/a&gt; للحصول على الأمثلة الكاملة.&lt;/p&gt;
&lt;h2 id="الخلاصة"&gt;الخلاصة&lt;/h2&gt;
&lt;p&gt;منشور الجزء الثالث من Microsoft Agent Framework يُغلق حلقة سلسلة Building Blocks. لمطوري .NET الذين يريدون بناء وكلاء الذكاء الاصطناعي — ليس فقط روبوتات المحادثة، بل وكلاء حقيقيين يستخدمون الأدوات ويتذكرون الأشياء وينسقون — هذا هو طريقك للأمام.&lt;/p&gt;
&lt;p&gt;الإصدار المستقر 1.0 يعني أنه يمكنك البناء بهذا في الإنتاج. إذا كنت تنتظر للقفز في تطوير الوكلاء في .NET، فالوقت الآن مناسب.&lt;/p&gt;</content:encoded></item><item><title>خادم SQL MCP على Azure App Service — بدون حاويات</title><link>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</guid><description>يمكن لخادم SQL MCP الآن العمل على Azure App Service بدون Docker أو Kubernetes. ماذا يعني ذلك لمطوري .NET الذين يبنون وكلاء ذكاء اصطناعي تتواصل مع قواعد بيانات SQL.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذه المقالة تلقائياً. للاطلاع على النسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;لأكن صريحاً: في كل مرة أرى &amp;ldquo;يتطلب حاوية&amp;rdquo; في برنامج تعليمي، يخرج مني تنهيدة صغيرة. الحاويات رائعة — حتى لا يكون لدى فريقك استراتيجية للحاويات، وفجأة تصطدم ميزة بدت بسيطة بتعقيد تنسيق غير متوقع لم يخطط له أحد.&lt;/p&gt;
&lt;p&gt;لهذا السبب استرعى هذا انتباهي. يمكن لخادم SQL MCP الآن العمل على Azure App Service — بدون Docker، بدون Kubernetes، فقط مع نفس ملف تكوين Data API Builder (DAB) الذي يكشف قاعدة بيانات SQL الخاصة بك عبر MCP وREST وGraphQL.&lt;/p&gt;
&lt;h2 id="ما-هو-خادم-sql-mcp"&gt;ما هو خادم SQL MCP؟&lt;/h2&gt;
&lt;p&gt;مقدمة سريعة إن لم تكن على دراية بعد. يجلس خادم SQL MCP بين وكيل الذكاء الاصطناعي وقاعدة بيانات SQL. بدلاً من منح الوكيل وصولاً مباشراً إلى قاعدة البيانات (فكرة سيئة جداً)، يكشف جداولك ومشاهداتك كطبقة تجريد — كيانات بأذونات محددة.&lt;/p&gt;
&lt;p&gt;مبني على &lt;a href="https://learn.microsoft.com/ar-sa/azure/data-api-builder/"&gt;Data API Builder&lt;/a&gt;، مما يعني أن ملف تكوين واحد يدير MCP &lt;em&gt;و&lt;/em&gt; REST &lt;em&gt;و&lt;/em&gt; GraphQL في آنٍ واحد. يتحدث وكيلك مع نقطة نهاية MCP. يتحدث تطبيقك التقليدي مع REST أو GraphQL. نفس التكوين، نفس بيئة التشغيل، واجهات مختلفة.&lt;/p&gt;
&lt;p&gt;هذا مفيد حقاً — لا داعي للحفاظ على طبقتي API منفصلتين.&lt;/p&gt;
&lt;h2 id="مشكلة-الحاوية-والحل"&gt;مشكلة الحاوية (والحل)&lt;/h2&gt;
&lt;p&gt;استخدم نموذج النشر الأصلي لخادم SQL MCP الحاويات. يعمل بشكل جيد في كثير من الفرق — لكن ليس في جميعها. تعتمد كثير من فرق .NET معياراً على Azure App Service أو الأجهزة الافتراضية. إلزام بيئة تشغيل حاويات فقط لكشف نقطة نهاية SQL يضيف احتكاكاً لم يطلبه أحد.&lt;/p&gt;
&lt;p&gt;يُظهر الإرشاد الجديد كيفية تخطي الحاوية تماماً. كل شيء يعمل بأمر &lt;code&gt;dab start&lt;/code&gt;، مستضافاً على App Service كعملية ويب .NET 8 قياسية.&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;# تثبيت Data API Builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet tool install microsoft.dataapibuilder --prerelease -g
&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;dab init --database-type mssql --host-mode Development --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;&lt;span class="c1"&gt;# إضافة كيان&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add products --source dbo.products --permissions &lt;span class="s2"&gt;&amp;#34;authenticated:*&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;&lt;span class="c1"&gt;# تكوين موفر مصادقة App Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab configure --runtime.host.authentication.provider AppService
&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;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;عند هذه النقطة لديك MCP على &lt;code&gt;/mcp&lt;/code&gt;، وREST وGraphQL من نفس العملية — ولا شيء يعمل في حاوية.&lt;/p&gt;
&lt;h2 id="المصادقة-بدون-مفاتيح-api-مشتركة"&gt;المصادقة بدون مفاتيح API مشتركة&lt;/h2&gt;
&lt;p&gt;هذا هو الجزء الذي أقدّره أكثر. عند النشر على App Service، تقوم بتكوين Microsoft Entra ID كموفر مصادقة. لا أسرار مشتركة في ملفات التكوين، ولا مفاتيح API للتدوير.&lt;/p&gt;
&lt;p&gt;تبقى سلسلة الاتصال في متغيرات بيئة App Service (وليس في &lt;code&gt;dab-config.json&lt;/code&gt;)، ونقطة نهاية MCP محمية بمصادقة المنصة. إذا كانت أحمال عمل Azure لديك متوافقة بالفعل مع Entra ID، فهذا يندمج بشكل طبيعي.&lt;/p&gt;
&lt;p&gt;للتطوير المحلي، انتقل إلى وضع &lt;code&gt;Simulator&lt;/code&gt; ونقل STDIO. عُد إلى وضع &lt;code&gt;AppService&lt;/code&gt; قبل النشر. نظيف وصريح.&lt;/p&gt;
&lt;h2 id="النشر-على-app-service"&gt;النشر على App Service&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;az appservice plan create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;plan-name&amp;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; --resource-group &amp;lt;resource-group&amp;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; --sku B1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --is-linux
&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;az webapp create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;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; --resource-group &amp;lt;resource-group&amp;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; --plan &amp;lt;plan-name&amp;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; --runtime &lt;span class="s2"&gt;&amp;#34;DOTNETCORE:8.0&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;az webapp config &lt;span class="nb"&gt;set&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; --name &amp;lt;app-name&amp;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; --resource-group &amp;lt;resource-group&amp;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; --startup-file &lt;span class="s2"&gt;&amp;#34;dab start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ثم انشر مشروع DAB الخاص بك باستخدام أسلوب نشر الكود الذي يستخدمه فريقك بالفعل. التفصيل الرئيسي: هذا نشر &lt;strong&gt;كود&lt;/strong&gt;، وليس نشر حاوية.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-مطوري-net"&gt;لماذا يهم مطوري .NET&lt;/h2&gt;
&lt;p&gt;إذا كنت تبني وكلاء ذكاء اصطناعي في .NET، فإن وكيلك سيحتاج في نهاية المطاف إلى التواصل مع قاعدة بيانات. يمنحك خادم SQL MCP طريقة منظمة للقيام بذلك دون الكشف عن سلاسل الاتصال الخام.&lt;/p&gt;
&lt;p&gt;راجع الإرشاد الكامل في &lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/"&gt;المقالة الأصلية&lt;/a&gt; و&lt;a href="https://github.com/Azure-Samples/SQL-MCP-NoContainer"&gt;مستودع العينات على GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="الخلاصة"&gt;الخلاصة&lt;/h2&gt;
&lt;p&gt;خادم SQL MCP على App Service خيار عملي لفرق .NET التي تريد منح وكلائها وصولاً منظماً إلى بيانات SQL بدون استراتيجية حاويات. جرّبه — سيقدّر وكلاؤك واجهة API النظيفة.&lt;/p&gt;</content:encoded></item><item><title>تحديث Visual Studio لأبريل: تكامل Cloud Agent لسير عمل .NET</title><link>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/</guid><description>جولة تفصيلية في تحديث Visual Studio لأبريل وما يغيّره تكامل Cloud Agent في سير عمل .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المنشور تلقائياً. للنسخة الأصلية &lt;a href="https://thedotnetblog.com/ar/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/"&gt;Visual Studio April Update: Cloud Agent Integration for .NET Workflows&lt;/a&gt; يستحق اهتماماً دقيقاً إذا كنت تبني أو تشغّل أنظمة .NET على نطاق واسع.&lt;/p&gt;
&lt;p&gt;من وجهة نظري، الأمر المهم ليس الميزة الرئيسية بل كم يمكن لفريق أن يحوّلها بسرعة إلى سير عمل هندسي أكثر أماناً وقابلاً للتكرار.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-ذلك-لفرق-net"&gt;لماذا يهمّ ذلك لفرق .NET&lt;/h2&gt;
&lt;p&gt;تُوازن معظم الفرق بين سرعة التسليم، واتساق المنصة، والحوكمة. هذا التحديث مفيد لأنه يمنحك مساراً أكثر تحديداً لتحسين أحد هذه القيود دون إعادة كتابة كل شيء.&lt;/p&gt;
&lt;h2 id="الخطوات-العملية-التالية"&gt;الخطوات العملية التالية&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;اختبر الميزة في تجربة .NET صغيرة ببيانات مشابهة للإنتاج.&lt;/li&gt;
&lt;li&gt;أضف نقاط تفتيش واضحة للتراجع والمراقبة قبل الطرح الأوسع.&lt;/li&gt;
&lt;li&gt;سجّل نمط التنفيذ في قوالبك الداخلية حتى تتمكن الفرق الأخرى من إعادة استخدامه.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="المصدر"&gt;المصدر&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;المقالة الأصلية: &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/"&gt;https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>حوكمة استدعاءات أدوات MCP في .NET باستخدام Agent Governance Toolkit</title><link>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/</guid><description>كيفية إدخال الحوكمة وفحوصات السياسة وتنفيذ أدوات أكثر أماناً لوكلاء .NET المستندين إلى MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المنشور تلقائياً. للنسخة الأصلية &lt;a href="https://thedotnetblog.com/ar/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/"&gt;Governing MCP Tool Calls in .NET with the Agent Governance Toolkit&lt;/a&gt; يستحق اهتماماً دقيقاً إذا كنت تبني أو تشغّل أنظمة .NET على نطاق واسع.&lt;/p&gt;
&lt;p&gt;من وجهة نظري، الأمر المهم ليس الميزة الرئيسية بل كم يمكن لفريق أن يحوّلها بسرعة إلى سير عمل هندسي أكثر أماناً وقابلاً للتكرار.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-ذلك-لفرق-net"&gt;لماذا يهمّ ذلك لفرق .NET&lt;/h2&gt;
&lt;p&gt;تُوازن معظم الفرق بين سرعة التسليم، واتساق المنصة، والحوكمة. هذا التحديث مفيد لأنه يمنحك مساراً أكثر تحديداً لتحسين أحد هذه القيود دون إعادة كتابة كل شيء.&lt;/p&gt;
&lt;h2 id="الخطوات-العملية-التالية"&gt;الخطوات العملية التالية&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;اختبر الميزة في تجربة .NET صغيرة ببيانات مشابهة للإنتاج.&lt;/li&gt;
&lt;li&gt;أضف نقاط تفتيش واضحة للتراجع والمراقبة قبل الطرح الأوسع.&lt;/li&gt;
&lt;li&gt;سجّل نمط التنفيذ في قوالبك الداخلية حتى تتمكن الفرق الأخرى من إعادة استخدامه.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="المصدر"&gt;المصدر&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;المقالة الأصلية: &lt;a href="https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/"&gt;https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>