---
title: "レシピ"
description: "Arkor の学習で TypeScript が現時点でできることを示すレシピ集。"
---

このセクションは、Arkor の学習にロジックを組み込むときによく使うパターンを集めたものです。各レシピは現在の公開 SDK の中だけで完結します: ロードマップ API も、内部 import も、ランタイムをフォークする必要もありません。

## レシピ一覧

| レシピ | 何を示すか | ベース |
| --- | --- | --- |
| [学習中の評価](/ja/docs/framework/cookbook/mid-run-eval) | チェックポイントごとに固定プロンプトで半学習済みモデルをサニティーチェックし、学習完了前に確認する。 | [`onCheckpoint({ infer })`](/ja/docs/framework/sdk/callbacks) |
| [構造化出力と Function Calling](/ja/docs/framework/cookbook/structured-outputs) | チェックポイントの出力を JSON Schema で型として固定し、型付きオブジェクトとしてパースする。モデルから関数も呼ばせる。 | [`infer({ responseFormat, tools })`](/ja/docs/framework/sdk/infer) |
| [Loss が悪化したら学習を自動で打ち切る（Early Stopping）](/ja/docs/framework/cookbook/early-stopping) | Loss（モデルの誤差）の曲線が悪い方向に進んだら学習を自動 Abort し、バックエンドの GPU も止める。 | [`onLog`](/ja/docs/framework/sdk/callbacks)、[`AbortSignal`](/ja/docs/framework/sdk/trainer-control)、[`trainer.cancel()`](/ja/docs/framework/sdk/trainer-control) |
| [Slack / Discord 通知](/ja/docs/framework/cookbook/notifications) | トレーナーファイル内で完結したまま、完了時 / 失敗時に Webhook を叩く。 | [`onCompleted` / `onFailed`](/ja/docs/framework/sdk/callbacks)、`fetch` |
| [プログラムからの学習実行（CLI なし）](/ja/docs/framework/cookbook/programmatic-runs) | `arkor dev` / `arkor start` を介さず、Next.js API ルート、cron ワーカー、CI から学習を実行する。 | [`runTrainer`](/ja/docs/framework/sdk/overview)、[`Trainer.start / wait`](/ja/docs/framework/sdk/trainer-control) |
| [スターターテンプレートのカスタマイズ](/ja/docs/framework/cookbook/customizing-templates) | 生成されたテンプレートを起点として扱う。データセット、ハイパーパラメーター、コールバック、ベースモデルを変える。 | [`createTrainer`](/ja/docs/framework/sdk/create-trainer)、[`DatasetSource`](/ja/docs/framework/sdk/dataset) |

## 始める前にコールバックの例外について 1 つだけ

下記の 3 つのレシピはライフサイクルコールバック内にロジックを置きます。コールバック内の `throw` は `trainer.wait()` をそのエラーで即座に reject します（[SDK § ライフサイクルコールバック](/ja/docs/framework/sdk/callbacks)）。SSE 再接続ループには送られず、黙ってリトライされることも、イベントが握りつぶされることもありません。再接続ループはトランスポート障害（接続断や一時的な 5xx）のみを扱います。致命的でない扱いにしたい場合はコールバック内で catch してください。

ここのレシピは決定的に動かすために単純な慣例を使います:

- **状態変更は外側の変数経由で。** throw の代わりに `AbortController`、クロージャーのフラグ、返した Promise を使う。
- **副作用はコールバック内で `try / catch` でガード。** Slack 投稿が失敗したらログだけ残して継続し、外に漏らさない。

これは制限ではなくパターンです。これを身につければ、レシピはきれいに合成できます。

## このセクションが扱わないこと

- **本番配信のレシピ。** 学習済みアダプタを安定した `*.arkor.app` エンドポイントで公開する機能自体は既にあります（[Deployments](/ja/docs/framework/sdk/deployments) 参照）。このセクションに配信系レシピがまだ無いだけです（`createArkor` の `deploy` マニフェストスロットは型上の予約フィールドで実装はありません）。
- **プロジェクトごとの複数トレーナー。** `createArkor` は単一の `trainer` を受け付けます。複数を一緒に走らせるのはマニフェストパターンではなくプログラムによる実行パターンです（該当レシピ参照）。
- **バックエンドが受け付ける以外のカスタムベースモデル。** `model` フィールドはクラウド API にそのまま転送されます。現在対応しているのは Gemma のみです。レシピはそれ以外のモデルがエンドツーエンドで動く前提では書かれていません。
