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

無料レッスン

調整したモデルをどう評価するか

このレッスンのあとで: 調整したモデルが、ベースラインより良いかどうかを言える。

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

ひとつは良く、ほかは悪く

調整したモデルは、学習させた仕事で点数が上がりました。では、良くなったのでしょうか。まだ分かりません。ほかのことが苦手になったかもしれず、動かす費用が二倍になったかもしれません。

調整したモデルを評価するとは、大事な分野のすべてで、同じケースを使ってベースラインと比べることです。

このレッスンのゴール

メモ

調整したモデルが、ベースラインより良いかどうかを言える。

キーワード

ことばいみ
差調整後の結果から調整前の結果を引いたもの
基準の差本物の改善と認める最小の差
悪化調整後に間違うようになったケース
分野口調や計算のような、ケースの種類
記録済み保存した結果で、その場で作ったものではない

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

同じケースで比べる

二つの版を、どちらも学習で見ていない、決まったケースの一組で動かします。それぞれの正解を数え、その違いが差です。

八つのうち一つの差は、小さすぎて信じられません。結果を見る前に、必要な基準の差を決めておきます。そうすれば、結果に言いくるめられません。

例: 八つのケースと三つの分野

分野調整前の正解調整後の正解変化
仕分け4 件中 24 件中 3+1
口調2 件中 12 件中 2+1
計算2 件中 22 件中 1-1
全部8 件中 58 件中 6+1

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

良い答えは、費用が増えることもある

調整したモデルは、答えが長くなったり、動かすのに大きな契約が要ったりするかもしれません。費用の上がりを、ベースラインの費用に対するパーセントで求めます。

許せる上限は、先に決めておきます。わずかな改善で請求が倍になるなら、出す価値はたいていありません。

よくある間違い

注意

「学習させた仕事で点数が上がれば、良いモデルだと分かる」と考えがちです。分かるのは、そこで良いことだけです。ほかの分野を確かめ、悪くなったケースを数え、費用も見てから決めます。

モデル用の補助を書く(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\");' '// 記録済み: 1 は正解。二つの版とも、同じ八つのケース。' 'const cases = [' '  { id: \"c1\", area: \"sorting\", base: 0, tuned: 1 }, { id: \"c2\", area: \"sorting\", base: 0, tuned: 1 },' '  { id: \"c3\", area: \"sorting\", base: 1, tuned: 1 }, { id: \"c4\", area: \"sorting\", base: 1, tuned: 0 },' '  { id: \"c5\", area: \"tone\", base: 0, tuned: 1 }, { id: \"c6\", area: \"tone\", base: 1, tuned: 1 },' '  { id: \"c7\", area: \"sums\", base: 1, tuned: 1 }, { id: \"c8\", area: \"sums\", base: 1, tuned: 0 },' '];' > adapt5.js"

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

比較のスクリプトを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function total(which) {' '  let n = 0;' '  for (const c of cases) n = n + c[which];' '  return n;' '}' 'const worse = cases.filter(function (c) { return c.base === 1 && c.tuned === 0; });' 'const change = {};' 'for (const c of cases) change[c.area] = (change[c.area] || 0) + c.tuned - c.base;' >> adapt5.js"

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

比較のスクリプトを書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"調整前 8 件中 \" + total(\"base\") + \"、調整後 8 件中 \" + total(\"tuned\"));' '  console.log(\"悪くなったケース: \" + worse.map(function (c) { return c.id; }).join(\", \"));' '  console.log(\"分野ごとの変化: \" + JSON.stringify(change));' '  const q = \"調整の狙いではなかった分野も確かめるのは、なぜですか。短い一文で答えてください。\";' '  const sample = \"一つの仕事に合わせて調整すると、ほかの仕事が静かに悪くなることがあり、確かめないと気づけないからです。\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 60);' '  console.log(\"返事: \" + reply.text);' '}' 'main();' >> adapt5.js"

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

比較を実行する

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

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

比較の出力

二つの結果は、記録されたものとしてスクリプトに書いてあります。Run は、それぞれの版の正解を数え、悪くなったケースを並べ、分野ごとの変化を示します。

最後の行は、短いモデルの呼び出しか、「記録済みサンプル」です。

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

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