![]()
השיעור הקודם הרחיב את הסוכנים לענן. שיעור זה מביא אותם למטה אל מחשב יחיד. בסיום יהיו לך עוזר הנדסי שעובד, שחושב, מפעיל כלים, קורא את הקבצים שלך ומחפש בתיעוד שלך — בלי קריאת אינפרנס אחת בענן.
למה תרצה את זה? שלוש סיבות שמופיעות לעיתים קרובות בעבודה הנדסית אמיתית:
המלכוד הוא שאתה מחליף דגם ענן מתקדם ב-מכונת שפה קטנה (SLM) שרצה על ה-CPU, GPU או NPU שלך. השיעור עוסק בבניית סוכנים שהם טובים במסגרת הזו ולא מתיימרים שהמגבלה לא קיימת.
שיעור זה יכסה:
לאחר סיום שיעור זה תדע כיצד:
שיעור זה מניח שסיימת את השיעורים הקודמים ונוח לך עם:
תזדקק גם ל:
requirements.txt, בנוסף ל-foundry-local-sdk, openai ו-chromadb לשיעור זה.מודל ענן מתקדם כולל מאות מיליארדי פרמטרים ומרכז נתונים מאחוריו. SLM כולל כמה מיליארדים של פרמטרים וחייב להתאים לזיכרון ה-RAM של הלפטופ שלך. ההבדל הזה קובע את הציפיות.
SLMs טובים ב:
SLMs חלשים ב:
אסטרטגיית הניצחון לסוכנים מקומיים היא לכן: לתת ל-SLM לתזמן, ולתת לכלים לעשות את העבודה הכבדה. המודל לא צריך לדעת את בסיס הקוד שלך — הוא צריך לדעת מתי לקרוא ל-read_file ול-search_docs. זה מתאים ישירות לנקודות החוזק של SLM.
flowchart LR
U[Developer] --> A[Local SLM Agent]
A -->|decides which tool| T1[read_file]
A -->|decides which tool| T2[search_docs RAG]
A -->|decides which tool| T3[analyze_code]
T1 --> A
T2 --> A
T3 --> A
A --> R[Answer, fully on-device]
Microsoft Foundry Local היא סביבת ריצה קלה שמורידה, מנהלת ומשרתת מודלים לחלוטין על המחשב שלך. התכונה החשובה ביותר עבורנו היא שהיא חושפת נקודת קצה HTTP תואמת OpenAI — מה שאומר שה-SDK של OpenAI ולקוח OpenAI במסגרת הסוכנים של Microsoft עובדים נגדו בהחלפת base_url בלבד. כל מה שלמדת על בניית סוכנים מועבר ישירות; רק נקודת הקצה עוברת מהענן ל-localhost.
Foundry Local גם בוחרת אוטומטית את הבנייה הטובה ביותר למודל על החומרה שלך — בניית CPU, CUDA/GPU או NPU — כך שלא תצטרך לאופטימיזציה ידנית למחשב.
התקן את Foundry Local (ראה את ה-תיעוד למערכת ההפעלה שלך), ואז וודא שזה עובד:
# Install (example; follow the docs for your platform)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Download and run a Qwen model, then start the local service
foundry model run qwen2.5-7b-instruct
foundry service status
ברגע שהשירות רץ יש לך נקודת קצה מקומית תואמת OpenAI (בדרך כלל http://localhost:PORT/v1). הפנקס משתמש ב-foundry-local-sdk כדי לגלות את נקודת הקצה אוטומטית, כך שלא תצטרך לקבוע את הפורט בדפוס קשיח.
סוכן הוא רק סוכן אם הוא יכול לקרוא כלים. הרבה SLMs יכולים לשוחח אך מפיקים קריאות כלים שגויות ולא אמינות. מודלי Qwen מאומנים לקריאת פונקציות ומפיקים במדויק מבני קריאת כלים — וזה בדיוק מה שהופך מודל שיחה מקומי ל-סוכן מקומי.
הזרימה היא הלולאה הסטנדרטית של קריאת כלים שכבר מכירים, רק שזו רצה במכשיר:
sequenceDiagram
participant U as User
participant A as Qwen Agent (local)
participant T as Local Tool
U->>A: "What does auth.py do?"
A->>A: Decide: call read_file
A->>T: read_file("auth.py")
T-->>A: file contents
A->>A: Reason over contents
A-->>U: Explanation
חיפוש בתיעוד הוא המקום שהסוכנים המקומיים מפיקים ממנו ערך. במקום לקוות ש-SLM זכר את התיעוד של המסגרת שלך, אתה מטמיע את התיעוד הזה במסד וקטורי מקומי ומאפשר לסוכן לאחזר את הקטעים הרלוונטיים לפי דרישה.
אנחנו משתמשים ב-Chroma, מחסן וקטורי מוטמע שרץ בתהליך ללא שרת לניהול. הצינור כולו מקומי: מודל הטמעה מקומי → וקטורים מקומיים → אחזור מקומי → SLM מקומי.
flowchart TB
D[Your docs / code] --> E[Local embedding model]
E --> V[(Chroma vector DB - on disk)]
Q[Agent query] --> QE[Embed query locally]
QE --> V
V -->|top-k chunks| A[Qwen agent]
A --> Ans[Grounded answer]
זה אותו דפוס Agentic RAG משיעור 5 — השינוי היחיד הוא שכל רכיב רץ על המחשב שלך.
MCP הוא פרוטוקול, לא שירות ענן. שרת MCP יכול לרוץ כתהליך מקומי ב-stdio, לחשוף כלים לסוכן שלך על גבי הפרוטוקול הסטנדרטי. זה מאפשר שימוש חוזר באקוסיסטם ההולך וגדל של שרתי MCP — גישה לקבצים, פעולות גיט, שאילתות למסדי נתונים — כולן ללא חיבור לרשת.
פרופיל האבטחה שונה מהענן, אך לא נעדר: שרת MCP מקומי עדיין רץ בהרשאות המשתמש שלך, לכן הגבל את טווח הנגיעה (ספריית פרויקט, לא כל תיקיית הבית שלך) וטפל ביציאות שלו כקלטים לאימות.
“מקומי תחילה” לא אומר “רק מקומי”. מערכות בוגרות מנותבות לפי רגישות וקושי:
| מצב | איפה זה רץ |
|---|---|
| קוד/נתונים רגישים, או לא מקוון | SLM מקומי |
| משימה פשוטה ומוגבלת | SLM מקומי (זול ומהיר) |
| חשיבה קשה מרובת קפיצות על נתונים לא רגישים | מודל ענן |
| הכל, בזמן תקלה | SLM מקומי (התדרדרות ממושמעת) |
זה משקף את רעיון הניתוב למודל משיעור 16 — רק שאחד ה”מודלים” הוא עכשיו המחשב שלך. עיצוב יציב חוזר למקומי כשהענן לא זמין, כך שהסוכן מתדרדר באיכות במקום לכשל לחלוטין.
flowchart LR
Q[Request] --> S{Sensitive or offline?}
S -->|yes| L[Local SLM]
S -->|no| C{Needs deep reasoning?}
C -->|no| L
C -->|yes| Cloud[Cloud model]
L --> Out[Response]
Cloud --> Out
פתח את code_samples/17-local-agent-foundry-local.ipynb ויעבור דרכו. תבנה עוזר הנדסי מקומי שרץ כולו על תחנת העבודה שלך ויכול:
לא נעשה שימוש באינפרנס בענן בכל שלב.
העוזר מתחבר ל-Foundry Local דרך נקודת הקצה התואמת OpenAI, אז קוד הסוכן נראה כמעט זהה לשיעורי הענן — רק הלקוח משתנה:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local discovers/downloads the model and gives us a local endpoint.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key is a local placeholder
הכלים הם פונקציות Python רגילות המוגבלות לתיקיית פרויקט:
def read_file(path: str) -> str:
\"\"\"Read a file, but only inside the sandboxed project directory.\"\"\"
full = (PROJECT_ROOT / path).resolve()
if PROJECT_ROOT not in full.parents and full != PROJECT_ROOT:
return \"Access denied: path is outside the project directory.\"
return full.read_text(encoding=\"utf-8\")
שים לב לבדיקת הסנדבוקס — אפילו מקומית, כלי שקורא נתיבי מערכת אקראיים הוא סיכון. הפנקס שומר כל כלי מוגבל לשורש פרויקט אחד.
בדוק את הבנתך לפני המעבר למשימה.
1. תן שתי סיבות ממשיות להריץ סוכן מקומית במקום בענן.
2. מה החלוקה המומלצת של העבודה בין SLM וכליו בסוכן מקומי, ולמה?
3. מה מאפשר שימוש חוזר בקוד סוכני ענן עם Foundry Local?
4. למה דווקא מודל קריאת פונקציות Qwen ולא כל SLM?
5. באותה צינור RAG מקומי, אילו רכיבים רצים על המחשב?
6. שרת MCP מקומי רץ על המחשב שלך. האם זה הופך אותו אוטומטית לבטוח? איזה אמצעי זהירות יש לנקוט?
7. תאר כלל ניתוב היברידי מתחשב שכולל מודל מקומי.
8. מהו מינימום ריאלי של זיכרון RAM להפעלת הסוכן המקומי בשיעור זה, ומה היתרון של יותר RAM?
הרחב את העוזר ההנדסי המקומי לבוחן תיעוד מקומי לפרויקט קטן לפי בחירתך (השתמש באחת מתיקיות השיעורים במאגר אם תרצה).
ההגשה שלך צריכה:
find_todos שסורק את הפרויקט אחר הערות TODO/FIXME ומחזיר אותן עם שם הקובץ ומספר השורה — תוך שמירה על אותה בדיקת סנדבוקס כמו read_file.לאחר מכן כתוב פסקה קצרה על מה היית מעביר לענן ומה היית שומר מקומי עבור הסוקר הזה, ומדוע. אתה מוערך על האם הרכיבים המקומיים מחוברים נכון והאם ההיגיון ההיברידי שלך תקין — לא על איכות המודל.
בשיעור זה בנית סוכן הפועל כולו על המחשב שלך:
זה משלים את קשת ההטמעה: השיעור ה-16 הגדיל סוכנים לתוך Microsoft Foundry, והשיעור הזה הקטין אותם אל תחנת עבודה יחידה. השיעור הבא מתמקד בשמירת סוכנים מופעלים בטוחים.
כתב ויתור: מסמך זה תורגם באמצעות שירות תרגום אוטומטי Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.