# איך האופטימיזציה עובדת

> חוזה הריצה והציון, סוגי התוצרים, והמנועים לכל סוג.

Skynet הוא Optimize Anything: מוצר אחד שמשפר כל תוצר מול הנתונים ופונקציית המדידה (Metric) שלך. כל ריצה משתמשת באותו חוזה הרצה ובאותו חוזה של פונקציית מדידה. סוג התוצר קובע אילו מנועים יכולים לעבוד עליו.

## החוזה המשותף

לכל ריצה יש שני קבצים. `run.py` מריץ את התוצר על מקרה אחד. `metric.py` נותן ציון לפלט.

```python tab="run.py"
from skynet import llm


def run(artifact, input):
    return llm(artifact, input=input)
```

```python tab="metric.py"
def score(input, output, expected=None):
    ok = output == expected
    return (1.0 if ok else 0.0), {"feedback": "Match." if ok else "No match."}
```

- `artifact` היא הגרסה הנוכחית שהאופטימייזר מציע.
- `input` הוא dict שמכיל את שדות הקלט של מקרה אחד.
- `expected` הוא הערך הצפוי של המקרה, או `None` כשאין למקרה ערך כזה.
- `score` מחזיר זוג: מספר, ו-dict עם מחרוזת `"feedback"`.

מודול העזר `skynet` נותן את `llm`,‏ `Image` ו-`log`. קריאה ל-`llm` מקוד ההרצה הולכת למודל המשימה. קריאה ל-`llm` מפונקציית המדידה הולכת למודל של פונקציית המדידה.

> [!NOTE]
> קוד ההרצה רץ בתהליך משלו ב-sandbox. הוא לא רואה את קוד המקור של פונקציית המדידה, את הערך הצפוי או את המפתח של פונקציית המדידה.

קרא/י את [פונקציות מדידה ופונקציות ציון](/docs/he/concepts/scorers) לחוזה המלא של פונקציית המדידה.

## סוגי תוצרים ומנועים

| סוג התוצר   | מנועים                                                                             |
| ----------- | ---------------------------------------------------------------------------------- |
| פרומפט      | Auto,‏ GEPA,‏ Best-of-N,‏ AutoResearch,‏ Meta-Harness,‏ AutoSaddler,‏ ShinkaEvolve |
| קוד         | כמו פרומפט                                                                         |
| טקסט        | כמו פרומפט                                                                         |
| תוכנית DSPy | Auto,‏ DSPy GEPA,‏ DSPy MIPROv2,‏ DSPy BootstrapFewShot                            |

המנועים מתחלקים לשתי משפחות:

- ה**מנועים המובנים** מתייחסים לתוצר כקופסה שחורה. הם עובדים על תוצרים מסוג פרומפט, קוד וטקסט.
- ה**אופטימייזרים של DSPy** עובדים בתוך תוכנית DSPy. הם עובדים רק על תוצרים מסוג תוכנית DSPy.

DSPy MIPROv2 ו-DSPy BootstrapFewShot צריכים זוגות (מקרים עם פלטים צפויים). עם קלט יחיד, תוכנית DSPy יכולה להשתמש רק ב-Auto וב-DSPy GEPA.

## תוצרים מסוג פרומפט, קוד וטקסט

המנועים המובנים מתייחסים לתוצר כקופסה שחורה. מנוע מציע גרסה חדשה, מריץ את `run(artifact, input)` על המקרים, וקורא את הציון ואת המשוב.

ששת המנועים המובנים משתמשים בשיטות חיפוש שונות:

- **GEPA** מפתח גרסאות בעזרת רפלקציה ושומר חזית Pareto.
- **Best-of-N** מבקש ממודל האופטימיזציה הצעות בלתי תלויות ושומר את הטובה ביותר.
- **AutoResearch**,‏ **Meta-Harness**,‏ **AutoSaddler** ו-**ShinkaEvolve** משתמשים בסוכן קוד כדי להציע גרסאות.

קרא/י את [מנועים](/docs/he/concepts/engines) כדי להכיר כל מנוע ואת ההגדרות שלו.

## תוצרים מסוג תוכנית DSPy

תוכנית DSPy היא סוג תוצר אחד. קובץ `run.py` שלך בונה `dspy.Module` ברמת המודול וקורא לו בתוך `run`. אם בקובץ יש יותר ממודול אחד, יש לתת למודול שרוצים לשפר את השם `program`.

מה קורה כשאופטימייזר של DSPy רץ:

1. Skynet מוצא את המודול שלך ועוטף אותו בפונקציית `run` שלך. כל מקרה עובר דרך ה-`run` שלך.
2. האופטימייזר של DSPy מקמפל את התוכנית על מקרי האימון.
3. הוא בוחר לפי מקרי האימות.
4. המנצח הוא טקסט ההוראות של כל predictor, יחד עם המצב המקומפל המלא של המודול. המצב כולל את דוגמאות ה-few-shot.

הציונים הסופיים מודדים את אותה תוכנית ש-Skynet שומר.

| אופטימייזר            | קורא את טקסט המשוב |
| --------------------- | ------------------ |
| DSPy GEPA             | כן                 |
| DSPy MIPROv2          | לא, רק את הציון    |
| DSPy BootstrapFewShot | לא, רק את הציון    |

DSPy BootstrapFewShot לא משתמש במודל אופטימיזציה.

> [!TIP]
> מודל האופטימיזציה של DSPy רואה רק את טקסט המשוב שפונקציית המדידה שלך מחזירה. הוא אף פעם לא רואה את קוד המקור של פונקציית המדידה.

## Auto

**Auto** היא בחירת ברירת המחדל באשף.

- בתוצר מסוג פרומפט, קוד או טקסט, Auto חוקר עם חמישה מנועים מובנים, ואז ממשיך עם GEPA מהגרסה הטובה ביותר.
- בתוכנית DSPy,‏ Auto מריץ DSPy GEPA.

שתי הצורות של Auto קוראות את טקסט המשוב מפונקציית המדידה שלך.

## איזה מנוע לבחור

| המצב שלך                                                 | במה להשתמש                                                     |
| -------------------------------------------------------- | -------------------------------------------------------------- |
| יש לך פרומפט שמודל מריץ                                  | תוצר מסוג פרומפט. כדאי להתחיל עם Auto.                         |
| יש לך קוד שרוצים להפוך למהיר יותר, זול יותר או נכון יותר | תוצר מסוג קוד. כדאי להתחיל עם Auto.                            |
| יש לך מסמך או קובץ הגדרות                                | תוצר מסוג טקסט. כדאי להתחיל עם Auto.                           |
| יש לך תוכנית DSPy                                        | תוצר מסוג תוכנית DSPy. כדאי להתחיל עם Auto.                    |
| דרושות לך דוגמאות few-shot שנבחרות מהנתונים שלך          | תוצר מסוג תוכנית DSPy עם DSPy BootstrapFewShot או DSPy MIPROv2 |

> [!WARNING]
> GEPA,‏ DSPy GEPA ו-Auto לומדים מטקסט המשוב. אם המשוב שלך הוא תמיד אותה מחרוזת, לאופטימייזרים האלה יש פחות מידע לעבוד איתו.

## עמודים קשורים

- [מנועים](/docs/he/concepts/engines)
- [דאטאסטים וחלוקה](/docs/he/concepts/datasets)
- [פונקציות מדידה ופונקציות ציון](/docs/he/concepts/scorers)
- [הפעלת ריצה](/docs/he/guides/submit)

---

Source: https://staging.skynetml.com/docs/he/concepts/optimization
