![]()
עד לנקודה זו בקורס בנית סוכנים שפועלים על הלפטופ שלך, בתוך פנקס הערות, מונעים על ידי az login ומספר משתני סביבה. זו בדיוק הדרך הנכונה ללמוד. זו לא הדרך הנכונה להפעיל סוכן שעל אלפי לקוחות תלויים בו ב-3 לפנות בוקר.
שיעור זה עוסק בפער בין “זה עובד על המחשב שלי” לבין “זה עובד, באמינות ובמחיר סביר, בפועל.” אנו סוגרים את הפער הזה באמצעות Microsoft Foundry ו-Microsoft Foundry Agent Service, ועושים זאת על ידי בניית סוכן תמיכת לקוחות אמיתי שיש לו כלים, אחזור, זיכרון, הערכה ומעקב.
שיעור זה יכסה:
לאחר סיום שיעור זה תדע כיצד:
שיעור זה מניח שסיימת את השיעורים הקודמים ואתה שולט ב:
תזדקק גם ל:
az login).requirements.txt.סוכן אב-טיפוס וסוכן ייצור חולקים את אותו לולאת ליבה — חשיבה, קריאה לכלים, תגובה. מה שמשתנה הוא כל מה שמסביב ללולאה הזו. המודל הוא אולי 20% מסוכן ייצור; ה-80% הנותרים הם השלד התפעולי.
| עניין | אב-טיפוס | ייצור |
|---|---|---|
| אירוח | פועל בפנקס הערות שלך | פועל כשירות מתארח, עם גירסה ופריסה |
| זהות | אסימון az login שלך |
זהות מנוהלת עם RBAC מוגדר |
| מצב | בזיכרון, אובד באתחול | מנותב חיצונית (מאגר תהליכים, שירות זיכרון) |
| כישלון | רואים את עקבות השגיאה | ניסיונות חוזרים, אופציות חילופיות, דואר מת, התראות |
| עלות | “זה כמה סנטים” | מעקב לפי בקשה, ניתוב, מטמון, תקציב |
| איכות | בודקים בעין | מוערך אוטומטית לפני כל שחרור |
| אמון | מאשרים כל פעולה | מדיניות + אופט אנושי לפעולות בסיכון |
זכור את הטבלה הזאת. כל קטע למטה מתייחס לאחת משורות אלו.
יש שלושה דפוסים ששתמש בהם, לעיתים בשילוב.
אובייקט הסוכן חי בתוך תהליך היישום שלך. הקוד שלך קורא לספק המודל ישירות; לולאת החשיבה פועלת בשירות שלך. זה מה שכל שיעור קודם עשה.
הסוכן נרשם כמשאב ב-Microsoft Foundry. Foundry מארח את לולאת החשיבה, מאחסן תהליכים, אוכף בטיחות תוכן ו-RBAC, ומציג את הסוכן בפורטל Foundry. האפליקציה שלך הופכת ללקוח דק שיוצר תהליכים וקורא תגובות.
מספר סוכנים (וכלים) מורכבים לגרף עם זרימת בקרה מפורשת — שלבים סדרתיים, הסתעפויות, נקודות אישור אנושיות, ונקודות בדיקה עמידות שיכולות להשהות ולהמשיך. זו היכולת של Microsoft Agent Framework Workflows במדרג פריסה.
flowchart TB
subgraph P1[אירוח לקוח]
A1[תהליך האפליקציה שלך] --> M1[ספק דגם]
end
subgraph P2[סוכן מתארח]
A2[לקוח קל] --> F2[שירות סוכן Foundry]
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: הערכת offline היא שער, לא מחשבה לאחר מעשה. גרסת סוכן חדשה לא נשלחת עד שהיא עוברת את סף ההערכה שלך. הנראות האונליין מזינה אז כישלונות אמתיים חזרה למאגר הבדיקות האופליין שלך. זו כל הלולאה.
הרחבת סוכן שונה מהרחבת Web API ללא מצב, כי כל בקשה יכולה להפעיל קריאות יקרות למודל ולכלים. ארבע טכניקות נושאות את רוב העומס.
טיפול בבקשות ללא מצב. אל תשמור מצב לכל משתמש בזיכרון התהליך שלך. שמור את תהליכי השיחה במאגר Foundry או בשירות זיכרון כך שכל מופע יכול לטפל בכל בקשה. זה מאפשר לך להרחיב אופקית — הוסף מופעים, ללא מושבים קשיחים.
ניתוב מודל. לא כל בקשה צריכה את המודל היעיל (והיקר) ביותר שלך. נהל בקשות פשוטות — סיווג כוונות, תשובות עובדתיות קצרות — למודל קטן וזריז, שמור את המודל הגדול לניתוח אמיתי. Foundry’s Model Router יכול לעשות זאת עבורך, או שתוכל לממש מסווג קל בעצמך. תבנה את הגרסה העצמית במעבדה.
מטמון תגובות. שאלות תמיכה רבות הן כמעט כפילויות (“איך מאפסים סיסמה?”). מטמון תשובות לשאלות נפוצות והגש אותן בלי לפנות למודל. אפילו שיעור פגיעת מטמון מתון חותך משמעותית עלות וזמניות.
קונקרנטיות ולחץ נגד. לספקי מודלים יש מגבלות קצב. הגב את הקונקרנטיות, השתמש בניסיונות חוזרים עם התערבות מוערכת, וכשל בחן (תגובה בתור “אנחנו מטפלים בזה” עדיפה על שגיאה 500).
flowchart LR
Q[שאילתת משתמש] --> C{פגיעה במטמון?}
C -->|כן| R[החזר תשובה שמורה במטמון]
C -->|לא| Router{מורכבות?}
Router -->|פשוט| SLM[מודל קטן]
Router -->|מורכב| LLM[מודל גדול]
SLM --> Out[תגובה]
LLM --> Out
Out --> Store[מטמון + מעקב]
אי אפשר להפעיל מה שאינו נראה. כפי שכוסה בשיעור 10, Microsoft Agent Framework מפיק באופן טבעי עקבות OpenTelemetry — כל קריאת מודל, הפעלת כלי, ושלב אורקסטרציה הופכים ל-span. בייצור אתה מייצא את ה-spans אל Microsoft Foundry (או כל backend תומך 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 Agent Framework תומך בכלים שדורשים אישור: הסוכן מציע את הפעולה, ההוצאה מפסיקה, אדם מאשר או דוחה, וזרימת העבודה ממשיכה. ראית את הפרימיטיב ב-שיעור 6; כאן אתה מפעיל אותו.
MCP בייצור. MCP מאפשר לסוכן שלך להשתמש בכלים חיצוניים דרך ממשק סטנדרטי. בייצור, התייחס לכל שרת MCP כגבול לא מהימן: קבע את גרסת השרת, הפעילו עם זהות מוגדרת, אמת את הפלט שלו, ואל תחשוף לו סודות. שרת MCP הוא תלות, ותלויות מתעדכנות, מבוקרות ומוגבלות בקצב.
flowchart TB
subgraph Dev[ארכיטקטורת פיתוח]
D1[פנקס הערות] --> D2[מסגרת סוכן]
D2 --> D3[ספק מודל]
D2 --> D4[כלים מקומיים]
end
subgraph Deploy[ארכיטקטורת פריסה]
E1[צינור CI] --> E2[שער הערכה]
E2 -->|הצלחה| E3[שירות סוכן Foundry]
E3 --> E4[סוכן מתארח בגרסה]
end
subgraph Run[ארכיטקטורת זמן ריצה]
F1[אפליקציית לקוח] --> F2[סוכן מתארח]
F2 --> F3[מפנה מודלים]
F2 --> F4[Azure AI Search 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:
# 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 # לפרוס רק אם השער עובר
קרא כל שורה — הפנקס שומר על הפרימיטיבים קטנים בכוונה כדי שלא יוסתר כלום מאחורי קריאה למסגרת.
שער ההערכה לעיל רץ אוף-ליין כנגד אובייקט הסוכן שלך. לאחר שהסוכן פרוס כסוכן מתארח, אתה זקוק לבדיקה נוספת, אפילו זולה יותר: האם נקודת הקצה הפרוסה באמת מגיבה?
פריסה “מוצלחת” מוכיחה רק ש-plane השליטה קיבל את ההגדרה — לא שהסוכן מגיב. תלות חסרה, ניתוב מודל לא תקין, או חיבור שפג תוקף יכולים להשאיר פריסה ירוקה שמחזירה כלום. בדיקת עשן תופסת זאת בתוך שניות, בכל פריסה, מבלי עלות הערכה מלאה.
מאגר זה מספק קו צינור בדיקות עשן מוכן לשימוש, המבוסס על הפעולה GitHub AI Smoke Test:
tests/lesson-16-smoke-tests.json מכיל הנחיות ואישורים לסוכן התמיכה של Contoso (תשובות מדיניות מבוססות ידע, בדיקת הזמנה, שמירה על נושא, ורציפות שיחה רב-סיבובית). קטלוגים לסוכנים משיעורים אחרים נמצאים לצדו — ראה tests/README.md..github/workflows/smoke-test.yml מתחבר עם Azure OIDC ושולח POST לכל הנחיה לנקודת הקצה התגובות של הסוכן, ומכשל את המשימה על כל החמצת אישור.- 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. מתי תבחר סוכן אירוח (Hosted Agent) על פני סוכן מתארח בלקוח?
3. למה סוכן סקלאבילי חייב להיות ללא מצב בזיכרון התהליך שלו?
4. איזו בעיה פותר ניתוב מודלים, ואיך זה קשור להערכה?
5. מה זה “שער הערכה” והיכן הוא נמצא במחזור החיים?
6. למה צריך להתייחס לשרת MCP boundary שאינו מהימן בייצור?
7. איזו שינוי יחיד בדרך כלל משפיע הכי הרבה על עלות סוכן בייצור, ולמה?
8. איזו תפקיד משחקים מאפייני span כמו customer.tier ו-routed.model בתצפית?
קחו את סוכן התמיכה בלקוחות מהמעבדה וחזקו אותו לתרחיש ספציפי: סוכן תמיכה בחיובי מנויים לחברת SaaS.
ההגשה שלך צריכה לכלול:
get_subscription_status, get_invoice, ו-issue_credit (אשראי מעל 50 דולר דורש אישור בני אדם).כתוב פסקה קצרה (בתא מרקדהון) שמסבירה איזו כלל ניתוב מודל בחרת ואיך תוודא אותו עם תעבורה אמיתית. אין תשובה נכונה יחידה — אתה מוערך לפי האופן שבו העניינים הייצוריים מחוברים בהרמוניה.
בשיעור זה העברת סוכן מפרוטוטייפ לייצור עם Microsoft Foundry:
השיעור הבא לוקח את המסלול ההפוך: במקום להרחיב סוכנים לענן, תוריד אותם למטה למכונת מפתח בודדת ותפעיל אותם באופן מקומי לגמרי.
כתב ויתור: מסמך זה תורגם באמצעות שירות תרגום אוטומטי Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.