# 最適化の仕組み

> 実行とスコアのコントラクト、アーティファクトの種類、種類ごとのエンジン。

Skynet は Optimize Anything です。あらゆるアーティファクトを、あなたのデータとメトリクスに対して改善する 1 つのプロダクトです。すべての実行は、同じ実行のコントラクトと同じメトリクスのコントラクトを使います。アーティファクトの種類によって、使えるエンジンが決まります。

## 共通のコントラクト

すべての実行には 2 つのファイルがあります。`run.py` は 1 つのケースでアーティファクトを実行します。`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` は、1 つのケースの入力フィールドを保持する dict です。
- `expected` はケースの期待値です。期待値がないケースでは `None` です。
- `score` はペアを返します。数値と、`"feedback"` 文字列を含む dict です。

`skynet` ヘルパーモジュールは `llm`、`Image`、`log` を提供します。実行コードからの `llm` の呼び出しはタスクモデルに送られます。メトリクスからの `llm` の呼び出しはメトリクスモデルに送られます。

> [!NOTE]
> 実行コードは、サンドボックス内の独自のプロセスで動作します。メトリクスのソース、期待値、メトリクスのキーを見ることはできません。

メトリクスのコントラクトの全体については、[メトリクスとスコアラー](/docs/ja/concepts/scorers) をお読みください。

## アーティファクトの種類とエンジン

| アーティファクトの種類 | エンジン                                                                     |
| ---------------------- | ---------------------------------------------------------------------------- |
| プロンプト             | Auto, GEPA, Best-of-N, AutoResearch, Meta-Harness, AutoSaddler, ShinkaEvolve |
| コード                 | プロンプトと同じ                                                             |
| テキスト               | プロンプトと同じ                                                             |
| DSPy プログラム        | Auto, DSPy GEPA, DSPy MIPROv2, DSPy BootstrapFewShot                         |

エンジンには 2 つの系統があります。

- **ネイティブエンジン** は、アーティファクトをブラックボックスとして扱います。プロンプト、コード、テキストのアーティファクトで動作します。
- **DSPy オプティマイザー** は、DSPy プログラムの内部で動作します。DSPy プログラムのアーティファクトでのみ動作します。

DSPy MIPROv2 と DSPy BootstrapFewShot にはペア（期待される出力を持つケース）が必要です。単一入力の場合、DSPy プログラムで使えるのは Auto と DSPy GEPA だけです。

## プロンプト、コード、テキストのアーティファクト

ネイティブエンジンは、アーティファクトをブラックボックスとして扱います。エンジンは新しいバージョンを提案し、ケースに対して `run(artifact, input)` を実行し、スコアとフィードバックを読み取ります。

6 つのネイティブエンジンは、それぞれ異なる探索方法を使います。

- **GEPA** は、リフレクションによってバージョンを進化させ、パレートフロントを維持します。
- **Best-of-N** は、リフレクションモデルに独立した提案を求め、最も良いものを残します。
- **AutoResearch**、**Meta-Harness**、**AutoSaddler**、**ShinkaEvolve** は、コーディングエージェントを使ってバージョンを提案します。

各エンジンとその設定については、[エンジン](/docs/ja/concepts/engines) をお読みください。

## DSPy プログラムのアーティファクト

DSPy プログラムは、アーティファクトの種類の 1 つです。`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 は 5 つのネイティブエンジンで探索し、その後、最良のバージョンから GEPA で続行します。
- DSPy プログラムでは、Auto は DSPy GEPA を実行します。

どちらの形の Auto も、メトリクスからのフィードバックの文章を読みます。

## どのエンジンを選ぶか

| 状況                                                         | 使うもの                                                                         |
| ------------------------------------------------------------ | -------------------------------------------------------------------------------- |
| モデルが実行するプロンプトがある                             | プロンプトのアーティファクト。Auto から始めます。                                |
| より速く、より安く、またはより正確にしたいコードがある       | コードのアーティファクト。Auto から始めます。                                    |
| ドキュメントや設定ファイルがある                             | テキストのアーティファクト。Auto から始めます。                                  |
| DSPy プログラムがある                                        | DSPy プログラムのアーティファクト。Auto から始めます。                           |
| データから few-shot デモを選びたい                           | DSPy BootstrapFewShot または DSPy MIPROv2 を使う DSPy プログラムのアーティファクト |

> [!WARNING]
> GEPA、DSPy GEPA、Auto は、フィードバックの文章から学習します。フィードバックが常に同じ文字列だと、これらのオプティマイザーが使える情報が少なくなります。

## 関連ページ

- [エンジン](/docs/ja/concepts/engines)
- [データセットと分割](/docs/ja/concepts/datasets)
- [メトリクスとスコアラー](/docs/ja/concepts/scorers)
- [実行を開始する](/docs/ja/guides/submit)

---

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