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

無料レッスン

AIの答えの不確かさを見せる

このレッスンのあとで: 答えにどれだけ自信があるかを、人が行動を選べる形で見せられる。

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

「87.3%」は何を伝えるか

図書館の案内AIが、答えの横に「確信度 87.3%」と出しています。利用者はその数字を見て、安心すべきなのか、疑うべきなのか、迷います。

数字は正確に見えますが、利用者の次の行動を決めません。不確かさは、人が行動を選べる形で見せる必要があります。

このレッスンのゴール

メモ

答えにどれだけ自信があるかを、人が行動を選べる形で見せられる。

キーワード

ことばいみ
不確かさ答えがどれくらい当てにならないか
スコア自信を表す 0 から 100 の数
ラベル高、中、低のような言葉の目印
境界ラベルが変わるスコアの値
断り自信がないので答えを控えること

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

数字より、言葉のラベル

利用者に必要なのは、細かい数字ではありません。「このまま使ってよいか、確かめるべきか」という判断です。

スコアをラベルに変えると、それが言えます。高なら使う、中なら確かめる、低なら人に聞く、のように、ラベルごとに行動を決めておきます。

五つの答えのラベル

答えスコア約ラベル
q19190高
q28080高
q36460中
q44950低
q51210低

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

境界は安定していなければならない

境界は、上から順に調べます。最初に当てはまったものが答えです。そのため、並べ方を間違えると、おかしなことが起きます。

安定した規則とは、スコアが上がってもラベルが悪くならない規則です。0 から 100 まで全部調べれば、確かめられます。モジュール 68 の測定の考え方がここでも役に立ちます。

よくある間違い

注意

「スコアは細かいほど誠実だ」と考えがちです。87.3 と 87.4 の違いは、利用者の行動を何も変えません。それなのに、そこに差があるかのように見せてしまいます。数字を出すなら、約 90 のようにぼかします。

モデル用の補助を書く(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 CUTS = [[80, \"高\"], [50, \"中\"]];' 'const ANSWERS = [' '  { id: \"q1\", score: 91 },' '  { id: \"q2\", score: 80 },' '  { id: \"q3\", score: 64 },' '  { id: \"q4\", score: 49 },' '  { id: \"q5\", score: 12 },' '];' > showing.js"

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

ラベルを付けるスクリプトを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function label(score) {' '  for (const c of CUTS) {' '    if (score >= c[0]) return c[1];' '  }' '  return \"低\";' '}' 'function blurred(score) {' '  return Math.floor((score + 5) / 10) * 10;' '}' >> showing.js"

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

ラベルを付けるスクリプトを書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const counts = { \"高\": 0, \"中\": 0, \"低\": 0 };' '  for (const a of ANSWERS) {' '    counts[label(a.score)]++;' '    console.log(a.id + \" スコア \" + a.score + \" 表示は約 \" + blurred(a.score) + \" ラベル \" + label(a.score));' '  }' '  console.log(\"件数 \" + JSON.stringify(counts));' '  const msg = \"自信がないので、出典を確かめてほしいと学生に伝える、短い一文を書いてください。\";' '  const reply = await ask([{ role: \"user\", content: msg }], \"この答えには自信がありません。出典を確かめてください。\", 40);' '  console.log(\"断りの一行: \" + reply.text);' '}' 'main();' >> showing.js"

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

ラベルを付けて数える

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

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

出力の例

行示していること
q1 スコア 91 表示は約 90 ラベル 高ぼかした数字とラベルを出す
q2 スコア 80 ... ラベル 高境界ちょうどは、上のラベルになる
q4 スコア 49 ... ラベル 低境界より 1 低いだけで、ラベルが変わる
件数 {"高":2,"中":1,"低":2}ラベルごとの件数
断りの一行: ...モデルの一文。言葉は毎回違う

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

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

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