איך לצאת לפנסיה
אוקיי, אז התקנו את Codex על המחשב, עכשיו איך אנחנו עושים שהוא יעשה הכל תמיד בצורה מושלמת בלי טעויות אף פעם? הקטע עם אייג'נטים, שכמו בזוגיות, הדבר הכי חשוב איתם הוא תקשורת. איך האייג'נט יוכל לדעת לעשות מה שאתה רוצה, אם אתה לא אומר לו מה אתה רוצה? היום, אנחנו נלמד איך להפתח לאייג'נטים שלנו, בעזרת טריק קטן שנקרא סקילים.

אמדי
הדרך הפשוטה ביותר להנגיש לאייג'נט מידע היא יצירת קובץ agents.md שנמצא בroot התיקייה. האייג'נט יודע לקחת את הקובץ הזה, ולהתייחס אליו ואל ההוראות שבו בכל בקשה. נוכל לשים פה מידע כללי על הפרוייקט, ואולי גם כמה כללי פורמט ואיך להעלות לפרודקשט ו... הופ התחלנו להבין את האישיו בלעשות הכל בקובץ אחד:
- הרי מגיל אפס אנחנו יודעים לא לכתוב את כל התוכנה שלנו ב
Program.cs, אז למה לכתוב ככה את כל הידע על הפרוייקט? לחלק את הידע למספר קבצים יסייע מאוד עם הסדר והארגון של הפרוייקט. - בסופו של דבר נכון להיום יש קונטקס מוגבל לאייג'נטים. כלומר - הם לא יכולים להיות מודעים לכל הכללים שלנו בו זמנית. הרי אם נשים את כל הידע של הפרוייקט בקובץ שהם קוראים כל הזמן, גם נעמיס עליהם, וגם נשלח להם מלא מידע מיותר שלווא דווקא ממוקד לפקודה. לסקרנים מביניינו, אם קובץ ה
mdגדול מדי לקונטקסט, האייג'נט פשוט יפסיק לקרוא אותו באמצע. כיום המגבלה שלCodexהיא50 KB.
סקילים
מה זה בכלל
האבולוציה של קובץ הmd היא סקילים. תחשבו עליהם בצורה הזו, אם ראוי שקוד המקובץ כולו בprogram.cs, יהיה מפוצל לקלאסים בקבצים נפרדים, כך ראוי שידע המרוכז בmd יהיה מפוצל לתחומי ידע ספציפיים בקבצים נפרדים. לדוגמא:
- איך לכתוב לוגים בצורה אפקטיבית.
- איך להתחבר בצורה אפקטיבית לדיבי אסקיואל.
- איך להעלות את הפרוייקט לאופנשיפט.
הסקילים גרים בתוך תיקייה בשם .agents שבנויה כך:
.agents/
scripts/
format-backend.ps1
format-frontend.ps1
skills/
dotnet-8-layered-webapi/
SKILL.md
references/
api-hosting.md
swagger-ui-customization.md
dotnet-8-logging-and-correlation/
SKILL.md
references/
when-to-log.md
log-level-selection.mdכמו שתוכלו לראות מהמבנה, המבנה התיקייתי של סקילים יכול להראות מוסרבל קצת. בואו נבחן אותו רגע לעומק.

המבנה
נתחיל את המסע בתיקיית ה.agents התיקייה מכילה "חומרי עזר" לאייג'נט וביניהם התיקייה skills. בתוך תיקייה זו קיימות תת תיקיות, שכל אחת בעצם מייצגת סקיל. בתת התיקייה, ראשית תופס את העין הקובץ SKILL.md. הקובץ הזה, שנמצא בroot של התיקייה נראה כך:
---
name: dotnet-8-logging-and-correlation
description: Build or modify structured logging, exception logging, and correlation-aware observability in a C# .NET 8 backend. Use when adding business logs, wiring logger abstractions, propagating request correlation, logging external requests, or deciding what should be logged in services, repositories, workers, and middleware.
---
# Goal
Produce logs that are operationally useful, structurally consistent, and placed at the layer and branch where the event becomes meaningful.
# Workflow
1. Identify the business or infrastructure event that a...כפי שניתן לראות הוא בעצם בנוי בצורה הזו:
name- השם של הסקיל, תואם לתיקייה.description- תיאור המתאר מתי צריך להשתמש בסקיל הזה בקצרה.- הידע של הסקיל בפועל.
בכל בקשה, האייג'נט עובר על כל קבצי הSKILL.md בתיקייה .agents/skills. ספציפית על השדות name,description. ולפיהם, הוא קובע איזה סקילים רלוונטים לביצוע הבקשה. הסקילים שנבחרו, נשלפים ונכנסים לקונטקסט. וכך, לקונטקסט נכנס רק מידע הרלוונטי לבקשה.
שימו לב שהסקילים שלכם במדוייק בתיקייה .agents/skills, במידה ולא, האייג'נט לא יגלה אוטומטית את הסקילים שלכם.
מה עם כל השאר?
למי שהסתכל טוב במבנה התיקיות בטח שמתם לב לשתי תיקיות נוספות, עליהן נסביר עכשיו:
references- בתוך הסקיל עצמו, יכולה להתקיים התיקייהreferencesאו עוד תיקיות אחרות אליהן מפנה קובץ הSKILL.mdפיצול הסקיל לתיקיות יכול לאפשר אפילו סידור טוב יותר של הידע מאשר לדחוף את הכל לאותו קובץ הסקיל. משמש לכותבי סקילים בכירים.scripts- נראה שזו מוטציה שקרתה בקודבייס שלי, קודקס עשה בה דבר גאוני. הוא יצר קבציpowershellשבעזרתregexמוצאים הפרות של פורמט הקוד בפרוייקט. משימוש בפקודות שאני לא אוהב, עד לחוסר בשורה רווח לפניreturn. במידה ונמצאו התאמות, הסקריפטים פשוט מדפיסים את כל ההפרות לקודקס כדי שיתקן אותם. הוא מריץ את הסקריפטים האלו אחרי כל פעולה, ומכיוון שזה בפועל קוד אין לי חשש שדברים יפוספסו. ממליץ מאוד.
תחזוק
צוותים רציניים לא עובדים רק על פרוייקט אחד בריפו אחד, אלא אם כן אתם מתחזקים את כל פייסבוק במונוריפו משום מה. ולכן, נוצר הצורך לשמר סקילים ולהשתמש בהם שוב בין כמה ריפוסיטוריז. יש שתי דרכים עיקריות לעשות זאת.
תיקיית צומת
תיקיית צומת היא קונספט מתקדם יחסית בווינדוס. התיקייה משתמשת כמו קיצור דרך לתיקייה אחרת, רק שהיא בפועל משקפת את הקבצים לאותה התיקייה וזה לא רק הפניה לתיקייה. לדוגמא, יש לי ריפוזיטורי עצמאי לסקילים בתיקייה:
C:\Users\hubikta\Documents\Main files lap\Repos\TomerSkillsובתוכו, קיימת תיקייה בשם skills שמכילה סקילים. ומצד שני יש לי ריפו שבו ארצה להשתמש בסקילים ב:
C:\Users\hubikta\Documents\Main files lap\Repos\MyAppאני אוכל ליצור תיקיית צומת בשם skills תחת:
C:\Users\hubikta\Documents\Main files lap\Repos\MyApp\.agentsשתפנה לתיקיית הskills בכתובת:
C:\Users\hubikta\Documents\Main files lap\Repos\TomerSkills\skillsואז, כל הקבצים מריפו הסקילים ישוקפו בצורה מושלמת, כאילו הם היו באותה התיקייה בריפו של MyApp. אני אוכל לעשות להם קומיט, ואם אשנה אותם מכל כיוון הם יעודכנו בצד השני. אישית, זו דרך העבודה האהובה עלי. פרט ליצירת תיקיית צומת שפשוט צריך לשאול את ג'יפיטי איך לעשות את זה, זה פשוט.
סאב מודול בגיט
דרך נוספת לעשות מיניריפו של סקילים שישותף בין פרוייקטים הוא להשתמש בקונספט שנקרא Git submodule. בעזרתו, נוכל לשייך פרוייקט גיט מסויים, למשל ריפו הסקילים שלנו, למקום כלשהו בריפו\ריפוז אחרים. זאת, בעזרת הפקודה:
git submodule add https://github.com/hubikta/TomerSkills.git .agentsהפקודה תמקם את תכולת הריפו TomerSkills בתיקייה .agents. נראה נקי, אבל החסרון פה הוא שאם תעשו פול לריפו הראשי, זה לא בהכרח יעשה פול רקורסיבי לכל הסאבמודולס שנמצאים בו. אותו דבר בנוגע לשכפול או קומיט. נדרש להשתמש בפקודות גיט מעצבנות כמו:
git submodule update --init --recursiveוההתעסקות עם זה פשוט לא שווה לדעתי.
סאב טרי בגיט
דרך נוספת, היא יצירת Git subtree הקונספט עובד דומה לסאבמודולז, אך מפשט אותם בקצת. ניצור סאבטרי בעזרת הפקודה:
git subtree add --prefix=.agents https://github.com/hubikta/TomerSkills.git main --squash היתרון הוא שכאשר נרצה לעשות clone נוכל לעשות זאת עם פקודה רגילה. אבל, במידה ונרצה לעשות פול לריפו נדרש לעשות:
git subtree pull --prefix=.agents https://github.com/hubikta/TomerSkills.git main --squashובמידה ונרצה לעשות קומיט ופוש, נעשה קומיט רגיל ולאחר מכן נריץ את פקודת הפוש:
git subtree push --prefix=.agents https://github.com/hubikta/TomerSkills.git mainאני אישית לא אוהב את הדרך הזו, אבל אם אתם אשפי גיט אולי תתחברו אליה.
אין תגובות:
הוסף רשומת תגובה
"הבעיה הגדולה ביותר בתקשורת היא האשליה שהיא התקיימה" - ג'ורג' ברנרד שו.