# بهینه‌سازی چگونه کار می‌کند

> قرارداد اجرا و امتیاز، انواع آرتیفکت و موتورهای هر نوع.

Skynet همان Optimize Anything است: یک محصول که هر آرتیفکتی را بر اساس داده‌ها و معیار شما بهتر می‌کند. همهٔ اجراها از یک قرارداد اجرا و یک قرارداد معیار استفاده می‌کنند. نوع آرتیفکت تعیین می‌کند کدام موتورها می‌توانند روی آن کار کنند.

## قرارداد مشترک

هر اجرا دو فایل دارد. `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]
> کد اجرا در فرایند جداگانهٔ خود در محیط اجرا اجرا می‌شود. نمی‌تواند کد منبع معیار، مقدار مورد انتظار یا کلید معیار را ببیند.

برای قرارداد کامل معیار، [معیارها و امتیازدهنده‌ها](/docs/fa/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** نسخه‌ها را با بازاندیشی تکامل می‌دهد و یک جبههٔ پارتو نگه می‌دارد.
- **Best-of-N** از مدل بازاندیشی پیشنهادهای مستقل می‌خواهد و بهترین را نگه می‌دارد.
- **AutoResearch**، **Meta-Harness**، **AutoSaddler** و **ShinkaEvolve** برای پیشنهاد نسخه‌ها از یک عامل برنامه‌نویس استفاده می‌کنند.

برای هر موتور و تنظیمات آن، [موتورها](/docs/fa/concepts/engines) را بخوانید.

## آرتیفکت‌های برنامهٔ DSPy

برنامهٔ DSPy یکی از انواع آرتیفکت است. `run.py` شما یک `dspy.Module` را در سطح ماژول می‌سازد و آن را درون `run` فراخوانی می‌کند. اگر فایل بیش از یک ماژول دارد، ماژولی را که باید بهینه شود `program` بنامید.

وقتی یک بهینه‌ساز DSPy اجرا می‌شود چه اتفاقی می‌افتد:

1. Skynet ماژول شما را پیدا می‌کند و تابع `run` شما را دور آن می‌پیچد. هر مورد از `run` خود شما عبور می‌کند.
2. بهینه‌ساز DSPy برنامه را روی موردهای آموزش کامپایل می‌کند.
3. انتخاب را روی موردهای اعتبارسنجی انجام می‌دهد.
4. برنده متن دستورالعمل هر پیش‌بینی‌کننده است، به‌همراه وضعیت کامل کامپایل‌شدهٔ ماژول. این وضعیت شامل نمونه‌های 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/fa/concepts/engines)
- [مجموعه‌داده‌ها و تقسیم‌ها](/docs/fa/concepts/datasets)
- [معیارها و امتیازدهنده‌ها](/docs/fa/concepts/scorers)
- [ارسال یک اجرا](/docs/fa/guides/submit)

---

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