# Как работает оптимизация

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

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/ru/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/ru/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/ru/concepts/engines)
- [Наборы данных и разбиение](/docs/ru/concepts/datasets)
- [Метрики и оценщики](/docs/ru/concepts/scorers)
- [Запуск через мастер](/docs/ru/guides/submit)

---

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