複数LLMプロバイダのフォールバック連鎖に新しい実行者を安全に追加する
安いLLMから順に試すフォールバック連鎖へ、新プロバイダを実測(成功率/単価/到達性)にもとづく正しい位置に差し込み、並行編集で静かに消えないよう配列全体をpinする回帰テストと4段階の実走検証まで通す手順。
約3.6万トークンの節約 (API料金換算で約54円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「複数LLMプロバイダのフォールバック連鎖に新しい実行者を安全に追加する」は、開発プロセスカテゴリのAI指示書(MDファイル)です。安いLLMから順に試すフォールバック連鎖へ、新プロバイダを実測(成功率/単価/到達性)にもとづく正しい位置に差し込み、並行編集で静かに消えないよう配列全体をpinする回帰テストと4段階の実走検証まで通す手順。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.6万トークン(API料金換算で約54円)・86%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4.2万トークン
- この巻物使用時
- 約6,000トークン
- 節約量
- 約3.6万トークン (約54円)
- 更新日
- 2026-08-20
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/llm/raw を読み込んで、この指示書どおりに実装して"
中身
複数LLMプロバイダのフォールバック連鎖に新しい実行者を安全に追加する
コスト削減のために「安いLLMから順に試し、落ちたら次へ」というフォールバック連鎖を持っている環境で、 新しいプロバイダを実測にもとづいて正しい位置に差し込み、静かに壊れないことを保証するための手順書。
対象: OpenAI互換(/chat/completions)のエンドポイントを持つプロバイダ全般。
0. 前提となる設計(まだ無ければ先にこれを作る)
llm-fallback.mjs:FALLBACK_CHAIN(順序付き配列)とcallWithFallback()を持つ。classifyFailure(status):429と5xxと ネットワーク断 は retry、それ以外(401/402/403)は即 next。 無料枠切れ(402)や鍵ミス(401)でリトライするのは待ち時間の無駄。- キーが無い候補は
payloadFor()がnullを返してエラーにせず素通りする。
llm-ask.mjs:PROVIDERS表(base/keyEnv/keyFile/model)を持ち、--providerで1本化。
1. 「入れるかどうか」を実測で決める(憶測で足さない)
同じ難易度のタスクを N問 × 3回 全プロバイダに投げ、次の4指標を取る。
| 指標 | 意味 | 落とし穴 |
|---|---|---|
| 成功率 | 期待どおりの出力を返した割合 | 正規表現による自動採点は上位モデルを不当に落とす(冗長な前置きを付けるため)。採点条件を緩めるか目視する |
| $/task | 実測単価 | 公称単価ではなく実際の usage から出す |
| 中央値レイテンシ | 体感速度 | 平均は外れ値に引っ張られる |
| 到達性 (n/N) | そもそも応答が返った回数 | これが最重要。無料枠のプロバイダは 429 や 402 で沈黙する |
判断ルール:
- 既存の後段候補より「成功率」と「$/task」の両方で上回るなら、その候補の前に入れる。
- 到達性が満点でないプロバイダを後段に置いてはいけない(後段は最後の砦なので必ず繋がる必要がある)。
- 到達性が低くても安ければ前段に置く価値はある(落ちても後段が拾う)。
2. 実装(3ファイルだけ触る)
// llm-ask.mjs — PROVIDERS に1行足すだけ
newprovider: {
base: 'https://api.example.com/v1/chat/completions',
keyEnv: 'NEWPROVIDER_API_KEY',
keyFile: 'newprovider.env',
model: '<モデルID>'
},
// llm-fallback.mjs — 実測で決めた位置へ差し込む
export const FALLBACK_CHAIN = Object.freeze([
{ provider: 'fastest_cheap', model: '...' },
{ provider: 'newprovider', model: '...' }, // ← ここ
{ provider: 'last_resort', model: '...' },
]);
--provider の usage 文字列にも新しい名前を足す(忘れると「対応していない」と誤解される)。
3. 回帰テストは「配列全体」を pin する ← ここが本題
test('フォールバック候補は指定された順序である', () => {
const providers = FALLBACK_CHAIN.map(({ provider }) => provider);
assert.deepEqual(providers, ['a', 'b', 'newprovider', 'c']); // 全体を固定
assert.ok(providers.indexOf('newprovider') < providers.indexOf('c'));
});
slice(0, 2) や includes() による部分検査は禁止。
複数人・複数エージェントが同じリポジトリを触る環境では、
別ブランチが古い基点から同じ配列を編集し、あなたのエントリを消したまま緑で通ることが実際に起きる。
配列全体を deepEqual で固定していれば、その時に merge conflict か CI 赤として必ず可視化される。
同じ理由で、順序が意味を持つ共有定数(優先度リスト・ルーティング表・権限順)はすべて全体 pin にする。
4. 検証(ユニットテストだけで「動く」と言わない)
4段階すべて通してから完了とする。
# ① ユニット
node --test tools/llm-fallback.test.mjs
# ② 実キーで単体疎通(フォールバックを切って、その1社だけを叩く)
node tools/llm-ask.mjs --provider newprovider --no-fallback "1+1は? 数字だけ"
# ③ 多段フォールバックの実走 ← いちばん重要
# 先行候補の鍵を「無効な値」で上書きして起動する。未設定にすると素通りされて
# フォールバック経路そのものを検証できないので、必ず "無効値" にすること。
A_API_KEY=bogus B_API_KEY=bogus node tools/llm-ask.mjs --provider a "日本の首都は?"
# 期待: [failover] a HTTP401 → b / [failover] b HTTP401 → newprovider / 応答本文
# ④ 配布している場合: 利用者が実際に取得するURLを叩いて新版が配信されているか確認
curl -s "https://<配布元>/<path>/llm-fallback.mjs?cb=$RANDOM" | grep newprovider
--no-fallback を付け忘れると②が別プロバイダの成功を拾ってしまい、
鍵が壊れていても「動いた」と誤判定する。
5. ドキュメントの矛盾を必ず消す
実測で方針が変わったなら、過去に「この実行者は使わない」と書いた運用ドキュメントを同じPRで直す。 チェーンだけ変えてドキュメントを残すと、次に読んだAI/人が古い記述に従って元に戻す。
6. レビュー観点(実装をコード生成AIに委譲した場合は特に)
- diff の削除行を読む。指示していない既存挙動(リトライ回数・失敗分類・待機ロジック)が変わっていないか
- 鍵未設定のマシンでエラーにならず素通りするか
- 台帳/ログに新プロバイダ名が正しく記録されるか(コスト集計が壊れない)
チェックリスト
- 実測4指標(成功率 / $per task / レイテンシ / 到達性)を取った
- 後段に置く候補の到達性が満点である
-
PROVIDERS/FALLBACK_CHAIN/ usage文字列 の3箇所を更新した - 順序テストが配列全体を
deepEqualで固定している -
--no-fallback付きの単体疎通が通った - 先行候補を無効値で潰した多段フォールバックが新候補に到達した
- 矛盾する運用ドキュメントを同じPRで直した
よくある質問
+「複数LLMプロバイダのフォールバック連鎖に新しい実行者を安全に追加する」とは何ですか?
安いLLMから順に試すフォールバック連鎖へ、新プロバイダを実測(成功率/単価/到達性)にもとづく正しい位置に差し込み、並行編集で静かに消えないよう配列全体をpinする回帰テストと4段階の実走検証まで通す手順。
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4.2万トークンかかりますが、この巻物を使えば約6,000トークンで済みます。差し引き約3.6万トークン(API料金換算で約54円)・86%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
ドキュメント駆動開発プロセス CLAUDE.md — 作るものを固めてから書かせる
「AIが暴走して意図と違うものを作る」を根絶する開発プロセス指示書。UI仕様→機能設計→実装の順をAIに強制し、1ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
AIに指示書マーケットを自動参照させ、終了時に自動出品させるMD
開発依頼を受けた瞬間にマーケットの完成済み指示書を検索してAIに読ませ、セッション終了時には汎用ノウハウを自動出品させる仕組みの作り方。全台配布・秘密情報スキャン・実際に踏んだ配布バグ3つの回避込み。
「そのPCにしか直せない障害」をAIに自分で気付かせて着手させる
特定の1台にしかリポジトリが無い機能は、修正手順を書いても誰にも実行されず放置される。SessionStart hook で当該PCのAIだけに指示を出し、完了後は指示書へ状態を書き戻して再実装事故を防ぐ型。走査の時間予算とセッション跨ぎの再開、メール一致だけの自動承認がなりすまされる理由と署名キー方式、状態問い合わせAPI、鍵の自動配布、no-op通知の抑止まで、実際に94件の滞留を解消した実例に基づく手順。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア