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

無料レッスン

仕事に合うモデルの大きさを選ぶ

このレッスンのあとで: 試験の結果と値段から、仕事に合うモデルの大きさを選べる。

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

一番大きなモデルが、いつも最良とは限らない

モデルの大きさを選ぶとは、仕事を十分にこなせる、いちばん小さなモデルを仕事に合わせることです。狭い仕事なら、小さなモデルが、わずかな値段で大きなモデルに並ぶことがあります。

呼び出しの値段は積み重なり、待ち時間も積み重なります。ちょうどよい大きさは、勘ではなく、試して見つけます。

このレッスンのゴール

メモ

試験の結果と値段から、仕事に合うモデルの大きさを選べる。

キーワード

ことばいみ
狭い仕事小さくてはっきりした一つの作業
試験セット採点に使う、固定したケース
合格率モデルが正解したケースの割合
一回の値段要求一つにかかる費用
十分よい仕事が受け入れられる合格率

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

どの大きさも、同じケースで試す

試験セットを作ります。自分の仕事の実際のケースを、固定したリストにしたものです。たとえば、振り分ける問い合わせ十件です。どの大きさのモデルにも同じケースを解かせ、合否を記録します。

正解した割合が合格率です。試験セットはモジュール 68 でも扱います。このレッスンは記録済みの結果を使うので、今は何も動かしません。

六件の問い合わせでの、記録済みの結果

大きさ6 件中の正解合格率1000 回の値段
小466.7%2
中583.3%9
大6100%40

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

小さなモデルが落とすケースを見る

合格率は、どのケースが落ちたかを隠します。上の小さなモデルは、5 番と 6 番の問い合わせを落としています。中身を読みます。現実には少ないケースなら、小さなモデルでも足りるかもしれません。

そのうえで、正解一つあたりの値段を求めます。値段を、通る割合で割ったものです。安くてよく間違うモデルは、高いモデルより、正解一つあたりでは高くつくことがあります。

よくある間違い

注意

「いちばん大きなモデルなら安心だ」と考えがちです。それはいちばん高く、遅くもあります。自分の試験セットに小さなモデルが通るなら、それで十分です。通るなかでいちばん安いものを選び、仕事が変わったら、また試します。

モデル用の補助を書く(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 recorded = {' '  small: { cost: 2, passed: [1, 1, 1, 1, 0, 0] },' '  medium: { cost: 9, passed: [1, 1, 1, 1, 1, 0] },' '  large: { cost: 40, passed: [1, 1, 1, 1, 1, 1] },' '};' 'function wins(m) {' '  return m.passed.reduce(function (a, b) { return a + b; }, 0);' '}' 'function rate(m) {' '  return wins(m) * 100 / m.passed.length;' '}' > choose.js"

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

大きさを選ぶスクリプトを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function perCorrect(m) {' '  return m.cost * m.passed.length / wins(m);' '}' 'function choose(need) {' '  let best = \"なし\";' '  let bestCost = Infinity;' '  for (const name of Object.keys(recorded)) {' '    const m = recorded[name];' '    if (rate(m) >= need && m.cost < bestCost) { best = name; bestCost = m.cost; }' '  }' '  return best;' '}' >> choose.js"

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

大きさを選ぶスクリプトを書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"6 件の問い合わせでの記録済みの結果 (今は動かしていない):\");' '  for (const name of Object.keys(recorded)) {' '    const m = recorded[name];' '    console.log(name + \": 正解 \" + rate(m).toFixed(1) + \"%、価格 \" + m.cost + \"、正解一つあたり \" + perCorrect(m).toFixed(2));' '  }' '  console.log(\"80% 必要: \" + choose(80) + \" | 95% 必要: \" + choose(95) + \" | 100% 必要: \" + choose(100));' '  const q = \"自分の問い合わせで小さなモデルを試してから選ぶ理由を、短い一文で書いてください。\";' '  const sample = \"小さなモデルは狭い仕事ではうまくいくことがあり、どこで失敗するかは自分のケースでしか分からないからです。\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 60);' '  console.log(\"返事: \" + reply.text);' '}' 'main();' >> choose.js"

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

大きさを選ぶ

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

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

出力の例

行示していること
small: 正解 66.7%、価格 2、正解一つあたり 3.00安く、見た目ほど高くつかない
large: 正解 100.0%、価格 40、... 40.00いつも正解で、いちばん高い
80% 必要: medium | 95% 必要: large必要な割合が大きさを決める
返事: ...モデルの一文。言葉は毎回違う

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

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

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