クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

AI機能の提供元とモデルのリスク

このレッスンのあとで: 機能が一つの提供元にどれだけ依存し、何に代替がないかを言えます。

60分のレッスンコマンド6件AI コーディングエージェントのラボ:opencode でコードを説明・修正し、その結果を確かめる

提供元が明日変わったらどうするか

提供元のリスクとは、自分で制御できない一つの提供元に、機能がどれだけ依存しているかです。提供元は、停止したり、価格を上げたり、モデルを終了したりします。すると機能は止まるか、ずっと高くなります。

依存をなくすことはできませんが、見える形にし、点数を付け、出口を計画できます。

このレッスンのゴール

メモ

機能が一つの提供元にどれだけ依存し、何に代替がないかを言えます。

キーワード

ことばいみ
依存それなしでは機能が動かないもの
単一障害点代替のない一つの依存
提供終了提供元が使っているモデルをやめること
切り替え期間依存を置き換えるのにかかる日数
撤退計画提供元をやめる手順を書いたもの

学生が入力するセルは、このプレビューでは空白です。

機能が依存するものを挙げる

依存を一つずつ書き出します。モデル、読み込むデータ、呼び出すツールです。それぞれに三つ尋ねます。代替はありますか。置き換えに何日かかりますか。その間、利用者はどうなりますか。

代替のない依存は単一障害点です。点数を付け、一覧の上から取り組みます。

例: 二つの依存

依存重み代替なし置き換えに 60 日点数
チャットのモデル32 倍で 61 を足す7
文書検索2代替あり10 日だけ2

学生が入力するセルは、このプレビューでは空白です。

必要になる前に出口を計画する

提供元は、モデルをやめたり、価格を変えたり、長く止まったりします。今のうちに決めます。第二のモデル、キャッシュ、簡素な答え、一時停止のどれにするかです。

撤退計画を書き、第二の道を時々試します。一度も動かさない代替は、必要な日に動かないかもしれません。コスト、トレース、信頼性のモジュールでは、失敗ごとの代替の選び方を扱います。

よくある間違い

注意

「大きな提供元は止まらないので、計画は要らない」と考えがちです。大手も止まり、価格を変え、モデルをやめます。依存は、提供元の大きさではなく、なくなったとき利用者に何が起きるかで判断します。

モデル用の補助を書く(1)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// 応答に含まれるトークン数。なければ null。' 'function count(data, name) {' '  return data.usage && typeof data.usage[name] === \"number\" ? data.usage[name] : null;' '}' > model.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

モデル用の補助を書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function ask(messages, sample, max) {' '  try {' '    const res = await fetch(base + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"status \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, inTokens: count(d, \"prompt_tokens\"), outTokens: count(d, \"completion_tokens\"), recorded: false };' '  } catch (error) {' '    console.log(\"記録済みサンプル: モデルが答えませんでした (\" + error.message + \")。\");' '    return { text: sample, inTokens: null, outTokens: null, recorded: true };' '  }' '}' 'module.exports = { ask };' >> model.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

依存の点数を書く(1)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' '' '// 架空の設計。機能が何に依存し、代替があるか、置き換えに何日かかるか。' 'const design = [' '  { name: \"チャットのモデル\", kind: \"model\", fallback: false, days: 60 },' '  { name: \"文書検索\", kind: \"data\", fallback: true, days: 10 },' '  { name: \"決済 API\", kind: \"tool\", fallback: false, days: 20 },' '  { name: \"音声から文字\", kind: \"model\", fallback: true, days: 45 },' '];' 'const WEIGHT = { model: 3, data: 2, tool: 1 };' > vendor.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

依存の点数を書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function score(d) {' '  let s = WEIGHT[d.kind];' '  if (d.fallback === false) s = s * 2;' '  if (d.days > 30) s = s + 1;' '  return s;' '}' >> vendor.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

依存の点数を書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  let total = 0;' '  design.forEach(function (d) {' '    total = total + score(d);' '    console.log(d.name + \": \" + score(d) + (d.fallback ? \"\" : \" 代替なし\"));' '  });' '  console.log(\"合計: \" + total);' '  const q = \"機能が提供元に依存する前に、その提供元へ尋ねるべき短い質問を三つ挙げてください。\";' '  const r = await ask([{ role: \"user\", content: q }], \"1. 価格を変えるとき、どれだけ前に知らせますか。 2. 古い版はいつまで使えますか。 3. データはどう書き出せますか。\", 90);' '  console.log(\"質問の一例: \" + r.text);' '}' 'main();' >> vendor.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

依存の点数を実行する

コマンド
docker exec -w /home/node/project agent node vendor.js

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

出力の例

行示していること
チャットのモデル: 7 代替なし最も高い点数で、単一障害点
文書検索: 2代替があり、切り替え期間も短い
決済 API: 2 代替なし代替はないが、重みが小さい
音声から文字: 4代替はあるが、置き換えに 45 日かかる
合計: 15設計全体
質問の一例: ...あなた自身の呼び出し。実行ごとに変わるか、記録済みサンプルと出る

学生が入力するセルは、このプレビューでは空白です。

このラボとソースについて: AI コーディングエージェントのラボ:opencode でコードを説明・修正し、その結果を確かめる

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。