![]()
حتى هذه النقطة في الدورة، قمت ببناء وكلاء يعملون على جهاز الكمبيوتر المحمول الخاص بك، داخل دفتر الملاحظات، مدفوعين بـ az login ومجموعة من متغيرات البيئة. هذه هي الطريقة الصحيحة تمامًا للتعلم. لكنها ليست الطريقة الصحيحة لتشغيل وكيل يعتمد عليه آلاف العملاء في الساعة 3 صباحًا.
هذا الدرس حول الفجوة بين “يعمل على جهازي” و “يعمل بشكل موثوق وبسعر معقول في الإنتاج.” نغلق هذه الفجوة باستخدام Microsoft Foundry و خدمة وكيل Microsoft Foundry، ونقوم بذلك من خلال بناء وكيل دعم عملاء حقيقي يحتوي على أدوات، استرجاع، ذاكرة، تقييم، ومراقبة.
سيغطي هذا الدرس:
بعد إكمال هذا الدرس، ستعرف كيف:
يفترض هذا الدرس أنك أتممت الدروس السابقة وتشعر بالراحة مع:
ستحتاج أيضًا إلى:
az login).requirements.txt.يشارك وكيل النموذج الأولي ووكيل الإنتاج نفس الحلقة الأساسية — التفكير، استدعاء الأدوات، الاستجابة. ما يتغير هو كل شيء ملتف حول تلك الحلقة. النموذج يمثل ربما 20% من وكيل الإنتاج؛ والـ 80% الآخر هو الهيكل التشغيلي.
| الشاغل | نموذج أولي | الإنتاج |
|---|---|---|
| الاستضافة | يعمل في دفتر ملاحظاتك | يعمل كخدمة مستضافة، مُدارة ونشرت تدريجيًا |
| الهوية | رمز دخول az login الخاص بك |
هوية مدارة مع صلاحيات RBAC محددة |
| الحالة | في الذاكرة، تفقد عند إعادة التشغيل | خارجية (مخزن الخيوط، خدمة الذاكرة) |
| الفشل | ترى تتبع الاستدعاء | إعادة المحاولة، التراجع، رسائل الموت، التنبيهات |
| التكلفة | “إنها بضعة سنتات” | تتبع لكل طلب، توجيه، تخزين مؤقت، ميزانية |
| الجودة | تراقب المخرجات بعينيك | يُقيم تلقائيًا قبل كل إصدار |
| الثقة | توافق على كل إجراء بنفسك | سياسة + تدخل بشري في الحلقة للإجراءات الخطرة |
تذكر هذا الجدول. كل قسم أدناه يطابق واحدة من هذه الصفوف.
هناك ثلاثة أنماط ستستخدمها، غالبًا معًا.
كائن الوكيل يعيش داخل عملية تطبيقك. يستدعي كودك مزود النموذج مباشرة؛ حلقة التفكير تعمل في خدمتك. هذا ما قام به كل درس سابق.
يُسجل الوكيل كـ مورد في Microsoft Foundry. تستضيف Foundry حلقة التفكير، تخزن الخيوط، تفرض سلامة المحتوى وصلاحيات RBAC، وتجعل الوكيل مرئيًا في بوابة Foundry. يصبح تطبيقك عميلًا نحيفًا ينشئ الخيوط ويقرأ الاستجابات.
يتم تركيب عدة وكلاء (وأدوات) في رسم بياني مع تدفق تحكم صريح — خطوات متسلسلة، تفرعات، عقد موافقة بشرية، ونقاط تحقق دائمة يمكن أن توقف وتستأنف. هذه هي قدرة سير العمل لإطار عمل Microsoft Agent عند تطبيقها على نطاق النشر.
flowchart TB
subgraph P1[مستضاف من قبل العميل]
A1[عملية تطبيقك] --> M1[مزود النموذج]
end
subgraph P2[الوكيل المستضاف]
A2[عميل خفيف] --> F2[خدمة وكيل الفاوندرِ]
F2 --> M2[النموذج + الأدوات + مخزن المحادثات]
end
subgraph P3[سير عمل الوكيل]
A3[المنسق] --> S1[وكيل الفرز]
S1 --> S2[وكيل الحل]
S2 --> H[عقدة الموافقة البشرية]
H --> S3[وكيل الإجراء]
end
نشر وكيل ليس عملية push تتم مرة واحدة. إنها حلقة، وتشبه إلى حد كبير دورة إصدار البرمجيات لأنها في الحقيقة كذلك.
flowchart LR
Create[إنشاء / مؤلف] --> Version[الإصدار]
Version --> Evaluate[التقييم دون اتصال]
Evaluate -->|يجتاز البوابة| Deploy[النشر المستضاف]
Evaluate -->|يفشل في البوابة| Create
Deploy --> Observe[المراقبة عبر الإنترنت]
Observe --> Improve[جمع الإخفاقات]
Improve --> Create
Deploy --> Retire[التقاعد للإصدار القديم]
الفكرة الأساسية، المنقولة من الدرس 10: التقييم في وضع عدم الاتصال هو بوابة، وليس تفكيرًا لاحقًا. لا يتم شحن إصدار وكيل جديد إلا إذا اجتاز عتبات التقييم الخاصة بك. ثم تغذي المراقبة عبر الإنترنت حالات الفشل الواقعية إلى مجموعة اختبار عدم الاتصال الخاصة بك. هذه هي الحلقة بأكملها.
توسيع وكيل يختلف عن توسيع واجهة برمجة تطبيقات ويب بلا حالة، لأن كل طلب يمكن أن يثير عدة استدعاءات مكلفة للنموذج والأدوات. أربع تقنيات تحمل معظم الحمل.
معالجة الطلبات بلا حالة. لا تحتفظ بأي حالة لكل مستخدم في ذاكرة العملية. قم بالحفاظ على خيوط المحادثة في مخزن الخيوط Foundry أو خدمة ذاكرة حتى يمكن لأي مثيل التعامل مع أي طلب. هذا ما يتيح التوسع أفقيًا — إضافة مثيلات، بدون جلسات لاصقة.
توجيه النموذج. ليس كل طلب يحتاج إلى النموذج الأكثر قدرة (والأكثر تكلفة). وجه الطلبات البسيطة — تصنيف النية، إجابات مختصرة واقعية — إلى نموذج صغير وسريع، واحتفظ بالنموذج الكبير للتفكير الحقيقي. يمكن لـ موجه النماذج في Foundry القيام بذلك نيابة عنك، أو يمكنك تنفيذ مصنف خفيف بنفسك. ستبني النسخة بنفسك في المختبر.
التخزين المؤقت للاستجابات. العديد من استفسارات الدعم هي شبه مكررة (“كيف أعيد تعيين كلمة المرور الخاصة بي؟”). خزّن الإجابات على الأسئلة الشائعة وقدمها دون الحاجة إلى الوصول إلى النموذج على الإطلاق. حتى معدل ضئيل لضرب التخزين المؤقت يقلل التكلفة والكمون بشكل ملحوظ.
التزامن والضغط العكسي. لمزودي النماذج حدود على المعدل. حدد مدى تزامنك، استخدم إعادة المحاولة مع تراجع أسي، وفشل بلطف (استجابة “نحن نعمل على الأمر” في الانتظار تفوق على الخطأ 500).
flowchart LR
Q[استعلام المستخدم] --> C{هل هناك حالة في الذاكرة المؤقتة؟}
C -->|نعم| R[إرجاع الإجابة من الذاكرة المؤقتة]
C -->|لا| Router{التعقيد؟}
Router -->|بسيط| SLM[نموذج صغير]
Router -->|معقد| LLM[نموذج كبير]
SLM --> Out[الرد]
LLM --> Out
Out --> Store[الذاكرة المؤقتة + التتبع]
لا يمكنك تشغيل ما لا يمكنك رؤيته. كما تناولت في الدرس 10، يصدر إطار عمل Microsoft Agent أثر OpenTelemetry بشكل أصلي — كل استدعاء نموذج، وتنفيذ أداة، وخطوة تنسيق تتحول إلى نطاق. في الإنتاج، تصدر هذه النطاقات إلى Microsoft Foundry (أو أي جهة خلفية متوافقة مع OTel) حتى تتمكن من:
from agent_framework.observability import get_tracer
tracer = get_tracer()
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("customer.tier", "enterprise")
span.set_attribute("routed.model", "gpt-5-nano")
# يتم تتبع تنفيذ الوكيل تلقائيًا داخل هذا النطاق
السمات مثل customer.tier و routed.model هي التي تحول جدار الأثر إلى أسئلة قابلة للإجابة (“هل يتم توجيه العملاء المؤسسيين إلى النموذج الصغير بشكل متكرر جدًا؟”).
تكاليف وكلاء الإنتاج تهيمن عليها الرموز. ثلاث رافعات، بترتيب التأثير:
بوابات التقييم والتحكم في التكلفة هي نفس الانضباط من زاويتين: التقييم يحدد أدنى جودة، التوجيه والتخزين المؤقت يبقيانك قريبًا من تكلفة ذلك الأدنى قدر المستطاع.
الحوكمة. يرث وكلاء الاستضافة صلاحيات RBAC، وسلامة المحتوى، وتسجيل التدقيق من Foundry. امنح كل وكيل هوية مُدارة بأدنى صلاحيات يحتاجها — وصول قراءة فقط إلى قاعدة المعرفة، وصول محدد إلى واجهة برمجة التذاكر، لا أكثر.
البشر في الحلقة. بعض الإجراءات لها تبعات كبيرة جدًا بحيث لا يمكن أتمتتها بشكل مباشر — إصدار استرداد، حذف حساب، التصعيد إلى فريق قانوني. يدعم إطار عمل Microsoft Agent الأدوات التي تتطلب الموافقة: يقترح الوكيل الإجراء، يتوقف التنفيذ، يوافق شخص أو يرفض، ثم يستأنف سير العمل. رأيت هذه البادئة في الدرس 6; هنا تنشرها.
MCP في الإنتاج. يتيح لك MCP لوكيلاك استهلاك الأدوات الخارجية عبر واجهة معيارية. في الإنتاج، اعتبر كل خادم MCP كحدود غير موثوقة: ثبت إصدار الخادم، شغّله بهوية محددة، تحقق من مخرجاته، ولا تعرض له أسرارًا أبدًا. خادم MCP هو تبعية، والتبعيات يتم تصحيحها، تدقيقها، وتحديد معدلاتها.
flowchart TB
subgraph Dev[هندسة التطوير]
D1[مفكرة] --> D2[إطار الوكيل]
D2 --> D3[مزود النموذج]
D2 --> D4[أدوات محلية]
end
subgraph Deploy[هندسة النشر]
E1[خط أنابيب CI] --> E2[بوابة التقييم]
E2 -->|اجتياز| E3[خدمة وكيل فاوندرى]
E3 --> E4[وكيل مستضاف بنُسخ]
end
subgraph Run[هندسة وقت التشغيل]
F1[تطبيق العميل] --> F2[وكيل مستضاف]
F2 --> F3[موجه النموذج]
F2 --> F4[بحث Azure AI RAG]
F2 --> F5[خدمة الذاكرة]
F2 --> F6[أدوات MCP]
F2 --> F7[OTel -> تتبع فاوندرى]
F2 --> F8[موافقة بشرية]
end
تلك المخططات الثلاثة - التطوير، النشر، وقت التشغيل - هي نفس الوكيل في ثلاث مراحل من حياته. المختبر التالي يرشدك خلال بناءه.
افتح code_samples/16-python-agent-framework.ipynb وابدأ العمل عليه من البداية إلى النهاية. ستجمع وكيل دعم عملاء Contoso مع كل الاهتمامات الإنتاجية مربوطة بداخله:
دفتر الملاحظات منظم بحيث كل اهتمام إنتاجي هو قسم مستقل قابل للتشغيل. القلب منه هو معالج الطلبات مع التوجيه والذاكرة المؤقتة:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. قدّم من الذاكرة المؤقتة عندما نتمكن من ذلك.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. قم بالتوجيه حسب التعقيد للتحكم في التكلفة.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. شغّل الوكيل داخل فترة تتبع للمراقبة.
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("routed.model", model)
span.set_attribute("customer.id", customer_id)
response = await support_agent.run(query, model=model)
# 4. خزّن وأعد.
response_cache.set(normalize(query), response.text)
return response.text
بوابة التقييم التي تحرس الإصدار تبدو هكذا:
async def evaluation_gate(agent, test_cases, threshold: float = 0.8) -> bool:
passed = 0
for case in test_cases:
result = await agent.run(case["input"])
if score_response(result.text, case["expected"]) >= 0.8:
passed += 1
pass_rate = passed / len(test_cases)
print(f"Evaluation pass rate: {pass_rate:.0%} (gate: {threshold:.0%})")
return pass_rate >= threshold # انشر فقط إذا اجتاز البوابة
اقرأ كل سطر — يحافظ دفتر الملاحظات على البادئات صغيرة عمدًا حتى لا يُخفى شيء وراء استدعاء إطار العمل.
بوابة التقييم أعلاه تعمل بدون اتصال ضد كائن الوكيل الخاص بك. بمجرد نشر الوكيل كوكيل مستضاف، تحتاج إلى تحقق آخر، أرخص: هل نقطة النهاية المنشورة ترد فعليًا؟
إثبات “النشر الناجح” يثبت فقط أن مستوى التحكم قبل التعريف قُبل - لا يثبت أن الوكيل يرد. فقدان تبعية، توجيه نموذج خاطئ، أو اتصال منتهي يمكن أن يترك نشرًا أخضر لا يُرجع شيئًا. يلتقط اختبار التدخين ذلك في ثوانٍ، عند كل نشر، وبدون تكلفة تقييم كامل.
يوزع هذا المستودع خط أنابيب اختبار تدخين جاهز للاستخدام مبني على إجراء GitHub AI Smoke Test:
tests/lesson-16-smoke-tests.json يحتوي على المطالبات والافتراضات لوكيل دعم Contoso (إجابات سياسة مؤصلة، بحث طلب، البقاء ضمن الموضوع، واستمرارية الخيط المتعددة الجولات). كتالوجات وكلاء دروس أخرى تعيش بجانبه — انظر tests/README.md..github/workflows/smoke-test.yml يقوم بتسجيل الدخول باستخدام Azure OIDC ويرسل كل مطالبة إلى نقطة نهاية الاستجابات للوكيل، ويفشل الوظيفة عند أي فشل في الافتراض.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
قم بتشغيله من علامة التبويب Actions بمجرد نشر وكيلك، مع تزويد نقطة نهاية مشروع Foundry واسم الوكيل. تحتاج الهوية الموحدة إلى دور Azure AI User عند نطاق مشروع Foundry. فكر في الطبقات كهرم: اختبارات الدخان (هل هو متاح ويستجيب؟) تُجرى عند كل نشر، التقييم غير المتصل (هل هو جيد بما يكفي للإطلاق؟) يُجرى قبل الترقية، والتقييم عبر الإنترنت (كيف هو الأداء في الواقع؟) يُجرى بشكل مستمر.
اختبر فهمك قبل الانتقال إلى التعيين.
1. تقريبًا ما هي نسبة “النموذج” في وكيل الإنتاج، وما هو الباقي؟
2. متى تختار الوكيل المستضاف بدلاً من الوكيل المستضاف على العميل؟
3. لماذا يجب أن يكون الوكيل القابل للتوسع بلا حالة داخل ذاكرة العملية الخاصة به؟
4. ما المشكلة التي يحلها توجيه النموذج، وكيف يرتبط بالتقييم؟
5. ما هو “بوابة التقييم” وأين تقع في دورة الحياة؟
6. لماذا يجب التعامل مع خادم MCP كحدود غير موثوق بها في الإنتاج؟
7. ما هو التغيير الوحيد الذي يؤثر عادة بأكبر قدر على تكلفة وكيل الإنتاج، ولماذا؟
8. ما الدور الذي تلعبه سمات النطاق مثل customer.tier و routed.model في القابلية للمراقبة؟
خذ وكيل دعم العملاء من المختبر وقم بتحصينه لسيناريو محدد: وكيل دعم فواتير الاشتراك لشركة SaaS.
يجب أن تتضمن إرسالك:
get_subscription_status، get_invoice، وissue_credit (يتطلب الاعتمادات التي تزيد عن 50 دولارًا موافقة بشرية).اكتب فقرة قصيرة (في خلية ماركداون) تشرح قاعدة توجيه النموذج التي اخترتها وكيف ستتحقق من صحتها باستخدام حركة مرور حقيقية. لا توجد إجابة صحيحة واحدة — سيتم تقييمك على ما إذا كانت الاعتبارات الإنتاجية موصلة بشكل متماسك.
في هذا الدرس، انتقلت بوكيل من النموذج الأولي إلى الإنتاج باستخدام Microsoft Foundry:
الدرس التالي يأخذ الرحلة المعاكسة: بدلاً من توسيع الوكلاء إلى السحابة، ستنقلهم إلى الأسفل إلى جهاز مطور واحد وتشغلهم محليًا بالكامل.
بناء وكلاء استخدام الحاسوب (CUA)
تنويه: تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.