# Як працює оптимізація

> Контракт запуску й оцінювання, види артефактів і рушії для кожного виду.

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` — це словник із вхідними полями одного кейсу.
- `expected` — це очікуване значення кейсу або `None`, якщо кейс його не має.
- `score` повертає пару: число й словник із рядком `"feedback"`.

Допоміжний модуль `skynet` надає `llm`, `Image` і `log`. Виклик `llm` з коду запуску йде до моделі завдання. Виклик `llm` з метрики йде до моделі метрики.

> [!NOTE]
> Код запуску виконується у власному процесі в пісочниці. Він не бачить вихідного коду метрики, очікуваного значення й ключа метрики.

Повний контракт метрики описано в розділі [Метрики й оцінювачі](/docs/uk/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/uk/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/uk/concepts/engines)
- [Набори даних і розбиття](/docs/uk/concepts/datasets)
- [Метрики й оцінювачі](/docs/uk/concepts/scorers)
- [Запуск через майстер](/docs/uk/guides/submit)

---

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