連携
API
HTTP API で認証し、実行を開始し、結果を読み取ります。
Skynet HTTP API を使うと、スクリプトやツールから Web アプリと同じ操作ができます。実行を開始し、見守り、結果を読み取れます。このページでは、リクエストへの署名方法、完全なリファレンスの場所、そして完全な例を 1 つ紹介します。
ベース URL
すべてのリクエストを次の宛先に送信します。
https://api.skynetml.com認証
API は API トークンを使います。
- Skynet で 設定 を開き、API タブを開きます。
- トークンを生成 をクリックします。
- トークンはすぐにコピーしてください。Skynet がトークン全体を表示するのは 1 回だけです。
すべてのリクエストの Authorization ヘッダーでトークンを送信します。
Authorization: Bearer skyd_...- トークンは
skyd_で始まります。 - 各ユーザーが持てる有効なトークンは最大 1 つです。新しいトークンを生成すると、古いトークンは無効になります。
- トークンを無効にするには、トークンを無効化 をクリックします。
インタラクティブリファレンス
完全なリファレンスは api.skynetml.com/scalar にあります。各公開エンドポイント、そのフィールド、レスポンスが一覧になっています。このページからテストリクエストを送信することもできます。
リファレンスは https://api.skynetml.com/openapi.public.json にある OpenAPI ドキュメントを読み込んでいます。このファイルを使って、お使いの言語のクライアントを生成できます。
主なエンドポイント
| メソッドとパス | 機能 |
|---|---|
GET /models | 使用できるモデルを一覧表示します。 |
GET /optimizers | 設定に合うオプティマイザーを一覧表示します。 |
GET /blackbox/engines | ネイティブエンジンと、それぞれが利用可能かを一覧表示します。 |
POST /optimize | プロンプト、コード、テキスト、DSPy プログラムの実行を開始します。 |
POST /blackbox/run | GitHub リポジトリに対する実行を開始します。 |
GET /optimizations | 実行を一覧表示します。 |
GET /optimizations/{optimization_id} | 1 つの実行のステータス、進捗、ログ、結果を返します。 |
GET /optimizations/{optimization_id}/artifact | 実行で見つかった最良のバージョンを返します。 |
POST /optimizations/{optimization_id}/cancel | 実行を停止します。 |
POST /serve/{optimization_id} | 新しい入力に対して最良のバージョンを実行します。 |
GET /health | サービスが稼働しているかを示します。 |
実行を開始する
POST /optimize は送信ウィザードと同じ設定を受け取ります。この例では、サポートメッセージをラベルに分類するプロンプトを改善します。
curl https://api.skynetml.com/optimize \
-H "Authorization: Bearer $SKYNET_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: support-labels-001" \
-d @run.json{
"name": "Support labels",
"task": {
"objective": "Sort each support message into billing, bug or other.",
"artifact": {
"kind": "prompt",
"starting_version": "Label this support message as billing, bug or other."
}
},
"data": {
"mode": "pairs",
"cases": [
{ "input": { "message": "I was charged twice." }, "expected": { "label": "billing" } },
{ "input": { "message": "The export button does nothing." }, "expected": { "label": "bug" } },
{
"input": { "message": "Do you have a Hebrew interface?" },
"expected": { "label": "other" }
}
]
},
"optimizer": { "choice": "auto", "budget": { "max_scorer_runs": 200 } },
"models": {
"task_model": { "name": "<model from GET /models>" },
"reflection_model": { "name": "<model from GET /models>" }
},
"workspace": {
"run_code": "from skynet import llm\n\ndef run(artifact, input):\n return llm(artifact, input=input[\"message\"])\n",
"metric_code": "def score(input, output, expected=None):\n ok = str(output).strip().lower() == expected[\"label\"]\n return (1.0 if ok else 0.0), {\"feedback\": \"Correct.\" if ok else \"Wrong label.\"}\n"
},
"max_cost_cents": 500
}重要なフィールド:
task.artifact.kindはprompt、code、text、dspy_programのいずれかです。data.modeはpairs(入力と期待される出力の組)またはsingle(ケースがちょうど 1 つ)です。optimizer.choiceはauto、またはGET /optimizersが返すオプティマイザー名の 1 つです。max_cost_centsはこの実行の支出上限で、単位は米セントです。is_privateの既定値はfalseです。実行を非公開にするにはtrueに設定します。
run_code と metric_code のルールについては、メトリクスとスコアラー をお読みください。
レスポンス
| ステータス | 意味 |
|---|---|
201 | Skynet が実行をキューに追加しました。本文には optimization_id と status が含まれます。 |
202 | 設定チェックがまだ実行中です。Retry-After ヘッダーの秒数だけ待ってから、同じ Idempotency-Key で同じ本文を送信してください。 |
402 | 残高が不足しています。 |
409 | クォータに達したか、設定チェックが古くなっています。 |
422 | リクエストまたはワークスペースのコードがオプティマイザーに適合しません。 |
実行を見守る
ステータスが最終状態になるまで、実行をポーリングします。
curl https://api.skynetml.com/optimizations/$RUN_ID \
-H "Authorization: Bearer $SKYNET_TOKEN"status フィールドは次のいずれかです。
| ステータス | 最終状態 |
|---|---|
pending, validating, running | いいえ |
paused | いいえ |
success | はい |
failed, cancelled, stopped | はい |
ポーリングは 10〜30 秒ごとに行ってください。実行には数分から数時間かかることがあります。
実行レスポンスのすべてのフィールドは、API リファレンス に記載されています。
結果を使う
ステータスが success になったら、最良のバージョンを取得します。
curl https://api.skynetml.com/optimizations/$RUN_ID/artifact \
-H "Authorization: Bearer $SKYNET_TOKEN"新しい入力に対して最良のバージョンを実行するには、POST /serve/{optimization_id} を送信します。各スコアの意味については、結果 をお読みください。