![]()
حتى هذه النقطة في الدورة، كنت قد بنيت وكلاء يعملون على جهازك المحمول، داخل دفتر ملاحظات، مدفوعين بواسطة az login وقليل من متغيرات البيئة. هذه هي الطريقة الصحيحة للتعلم بالضبط. لكنها ليست الطريقة الصحيحة لتشغيل وكيل يعتمد عليه آلاف العملاء في الساعة 3 صباحًا.
هذا الدرس يدور حول الفجوة بين “يعمل على جهازي” و “يعمل بشكل موثوق وميسور التكلفة في الإنتاج.” نحن نغلق تلك الفجوة باستخدام Microsoft Foundry و خدمة وكلاء Microsoft Foundry، ونقوم بذلك من خلال بناء وكيل دعم عملاء حقيقي يحتوي على أدوات، واسترجاع، وذاكرة، وتقييم، ومراقبة.
سيغطي هذا الدرس:
بعد إكمال هذا الدرس، ستعرف كيفية:
يفترض هذا الدرس أنك أكملت الدروس السابقة وتشعر بالراحة مع:
ستحتاج أيضًا إلى:
az login).requirements.txt.وكيل النموذج الأولي ووكيل الإنتاج يشتركان في الحلقة الأساسية نفسها — التفكير، استدعاء الأدوات، الرد. ما يتغير هو كل شيء ملفوف حول تلك الحلقة. النموذج قد يمثل 20% فقط من وكيل الإنتاج؛ والباقي 80% هو الهيكل التشغيلي.
| الشغل | النموذج الأولي | الإنتاج |
|---|---|---|
| الاستضافة | يعمل داخل دفتر ملاحظاتك | يعمل كخدمة مستضافة، مُصدَرة ويتم طرحها |
| الهوية | رمز تسجيل دخول az login الخاص بك |
هوية مُدارة مع صلاحيات RBAC محددة |
| الحالة | في الذاكرة، تفقد عند إعادة التشغيل | متخزنة خارجيًا (مخزن ثريد، خدمة ذاكرة) |
| الفشل | ترى أثر الخطأ | إعادة المحاولة، التراجع، صندوق الرسائل التالف، التنبيهات |
| التكلفة | “إنها بضعة سنتات” | تُتبع لكل طلب، موجهة، مخزنة مؤقتًا، وميزانية |
| الجودة | تفحص الإخراج بعينيك | تقيم تلقائيًا قبل كل إصدار |
| الثقة | توافق على كل إجراء | سياسة + تدخل بشري للإجراءات الخطرة |
احتفظ بهذا الجدول في ذهنك. كل قسم أدناه يرتبط بأحد هذه الصفوف.
هناك ثلاث أنماط ستستخدمها، غالبًا معًا.
كائن الوكيل يعيش داخل عملية التطبيق الخاصة بك. يتصل كودك بمزود النموذج مباشرة؛ حلقة التفكير تعمل في خدمتك. هذا ما فعله كل درس سابق.
الوكيل مسجل كمورد في Microsoft Foundry. تستضيف Foundry حلقة التفكير، تخزن الثريدات، تفرض سلامة المحتوى وRBAC، وتجعل الوكيل مرئيًا في بوابة Foundry. يصبح تطبيقك عميلًا خفيفًا ينشئ الثريدات ويقرأ الردود.
يتم تجميع عدة وكلاء (وأدوات) في رسم بياني مع تدفق تحكم صريح — خطوات متسلسلة، تشعب، عقد موافقة بشرية، ونقاط تحقق دائمة يمكنها الإيقاف والاستئناف. هذه هي قدرة سير العمل في إطار وكلاء Microsoft Applied على نطاق النشر.
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: التقييم غير المتصل هو بوابة، وليس فكرة لاحقة. لا يتم شحن نسخة جديدة من الوكيل إلا إذا تجاوزت عتبات التقييم الخاصة بك. ثم تغذي الرصد عبر الإنترنت إخفاقات العالم الحقيقي إلى مجموعة الاختبار غير المتصل الخاصة بك. هذه هي الحلقة بأكملها.
توسيع وكيل يختلف عن توسيع API ويب بدون حالة، لأن كل طلب يمكن أن يحفز عدة مكالمات للنموذج والأدوات مكلفة. هناك أربع تقنيات تحمل معظم الحمل.
معالجة الطلب بدون حالة. لا تحتفظ بأي حالة مستخدم محددة في ذاكرة العملية. احتفظ بخيوط المحادثة في مخزن خيوط Foundry أو خدمة ذاكرة حتى يتمكن أي مثيل من التعامل مع أي طلب. هذا ما يسمح لك بالتوسيع أفقيًا — أضف مثيلات، بدون جلسات ثابتة.
توجيه النموذج. ليس كل طلب يحتاج إلى أفضل نموذج لديك (والأكثر تكلفة). وجه الطلبات البسيطة — تصنيف النية، إجابات حقائقية قصيرة — إلى نموذج صغير وسريع، واحتفظ بالنموذج الكبير للتفكير الحقيقي. يمكن لـ موجه النموذج في Foundry أن يفعل ذلك نيابة عنك، أو يمكنك تنفيذ مصنف خفيف بنفسك. ستبني النسخة بنفسك في المختبر.
تخزين الردود مؤقتًا. العديد من استفسارات الدعم متكررة (“كيف أعيد تعيين كلمة المرور؟”). خزّن إجابات الأسئلة الشائعة وقدمها دون استدعاء النموذج إطلاقًا. حتى معدل إصابة تخزين مؤقت متوسط يقطع التكلفة والكمون بشكل ملحوظ.
التزامن والضغط العكسي. مزودو النموذج لديهم حدود على معدل الطلبات. حدد تزامنك، استخدم محاولات الإعادة مع تأخير متزايد تدريجيًا، وفشل بأناقة (رد “نعمل عليه” في الطابور أفضل من خطأ 500).
flowchart LR
Q[استعلام المستخدم] --> C{هل هناك ضربة في التخزين المؤقت؟}
C -->|نعم| R[إرجاع الإجابة المخزنة مؤقتًا]
C -->|لا| Router{التعقيد؟}
Router -->|بسيط| SLM[نموذج صغير]
Router -->|معقد| LLM[نموذج كبير]
SLM --> Out[الاستجابة]
LLM --> Out
Out --> Store[التخزين المؤقت + التتبع]
لا يمكنك تشغيل ما لا يمكنك رؤيته. كما غطينا في الدرس 10، يصدِر إطار وكلاء Microsoft 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. امنح كل وكيل هوية مُدارة بأقل صلاحيات يحتاجها — وصول للقراءة فقط إلى قاعدة المعرفة، وصول مقيد إلى API التذاكر، ولا شيء أكثر.
المراجعة البشرية. بعض الإجراءات ذات عواقب كبيرة جدًا لتتم أتمتتها بالكامل — صرف استرداد، حذف حساب، التصعيد إلى فريق قانوني. يدعم إطار وكلاء Microsoft أدوات تتطلب موافقة: يقترح الوكيل الإجراء، يتوقف التنفيذ، يوافق إنسان أو يرفض، ثم يستأنف سير العمل. رأيت هذا الحَجر الأساسي في الدرس 6؛ هنا تقوم بنشره.
MCP في الإنتاج. MCP يسمح لوكيلك باستخدام أدوات خارجية من خلال واجهة قياسية. في الإنتاج، عامل كل خادم MCP كحدود غير موثوق بها: ثبت نسخة الخادم، شغله بهوية محددة، تحقق من مخرجاته، ولا تعرض له الأسرار أبدًا. خادم MCP هو اعتماد، والاعتماديات تُصقل، تُراجَع، وتُقيَّد من حيث المعدل.
flowchart TB
subgraph Dev[هندسة التطوير]
D1[دفتر الملاحظات] --> D2[إطار وكيل]
D2 --> D3[مقدم النموذج]
D2 --> D4[الأدوات المحلية]
end
subgraph Deploy[هندسة النشر]
E1[خط أنابيب التكامل المستمر] --> E2[بوابة التقييم]
E2 -->|اجتياز| E3[خدمة وكيل Foundry]
E3 --> E4[وكيل مستضاف بالإصدار]
end
subgraph Run[هندسة وقت التشغيل]
F1[تطبيق العميل] --> F2[وكيل مستضاف]
F2 --> F3[موجه النموذج]
F2 --> F4[بحث Azure AI RAG]
F2 --> F5[خدمة الذاكرة]
F2 --> F6[أدوات MCP]
F2 --> F7[OTel -> تتبع Foundry]
F2 --> F8[موافقة بشرية]
end
تلك المخططات الثلاثة — التطوير، النشر، وقت التشغيل — هي نفس الوكيل في ثلاث مراحل من حياته. المختبر الذي يلي يرشدك خلال بناءه.
افتح code_samples/16-python-agent-framework.ipynb واعمل من البداية للنهاية. ستجمع وكيل دعم عملاء Contoso مع كل اهتمامات الإنتاج مشبوكة:
يُنظم دفتر الملاحظات بحيث يكون كل جانب من جوانب الإنتاج قسمًا مستقلاً وقابلًا للتشغيل. القلب منه هو معالج الطلبات مع التوجيه والتخزين المؤقت:
async def handle_support_request(query: str, customer_id: str) -> str:
# ١. قدّم من الذاكرة المؤقتة عندما نستطيع.
cached = response_cache.get(normalize(query))
if cached:
return cached
# ٢. قم بالتوجيه حسب التعقيد للسيطرة على التكلفة.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# ٣. شغّل الوكيل داخل فترة تعقب للمراقبة.
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)
# ٤. خزّن وأعد.
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
قم بتشغيله من علامة التبويب الإجراءات بمجرد نشر العميل الخاص بك، مع تقديم نقطة نهاية مشروع Foundry واسم العميل الخاص بك. تحتاج الهوية الموحدة إلى دور مستخدم Azure AI في نطاق مشروع Foundry. فكّر في الطبقات مثل هرم: اختبارات الدخان (هل هو يمكن الوصول إليه ويرد؟) تُجرى عند كل نشر، التقييم غير المتصل (هل هو جيد بما يكفي للإطلاق؟) يُجرى قبل الترقيّة، والتقييم المتصل (كيف هو أداؤه في الواقع؟) يُجرى بشكل مستمر.
اختبر فهمك قبل الانتقال إلى المهمة.
1. تقريبًا ما هي نسبة “النموذج” في عميل الإنتاج، وما هو الباقي؟
2. متى تختار عميل مستضاف بدلاً من عميل مستضاف على جهاز المستخدم؟
3. لماذا يجب أن يكون العميل القابل للتوسع بدون حالة (stateless) في ذاكرة العملية الخاصة به؟
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. بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.