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

無料レッスン

AIの答えへの意見をもらう

このレッスンのあとで: 人が答えてくれる形で意見を集め、理由ごとに数えられる。

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

押されない「役に立ちましたか」

家計簿アプリのAIが、答えのたびに「役に立ちましたか。理由も教えてください」と聞きます。利用者は面倒になり、そのうち誰も押さなくなりました。

チームには、役に立たなかった答えの理由が届きません。意見は、答えやすく、聞きすぎないときにだけ集まります。

このレッスンのゴール

メモ

人が答えてくれる形で意見を集め、理由ごとに数えられる。

キーワード

ことばいみれい
フィードバック答えについて利用者が返す意見
理由悪い評価に添えられる短い選択肢間違い
回答率聞いた人のうち、答えた人の割合
聞く間隔次に意見を聞くまでの答えの数
集計意見を理由ごとに数えること

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

一回押せば足りる形にする

意見を集める最初の工夫は、手間を減らすことです。良い、悪いの二つを一回押せば伝わるようにします。

悪い評価のときだけ、理由を短い選択肢から選んでもらいます。「間違い」「長すぎる」のような選択肢なら、文章を書かずに済みます。

十件の評価の集計

項目件数
評価の合計10
悪い評価6
理由あり: 間違い3
理由あり: 長すぎる2
理由なし1

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

数え方と聞く頻度

数えるのは、悪い評価で理由のあるものだけです。良い評価に添えられた理由は、ここでは数えません。

回答率は、答えた人を聞いた人で割ります。聞きすぎれば回答率は下がります。そこで、「5 件ごと」のように間隔を決めて聞きます。測定の考え方は、モジュール 68 を思い出してください。

よくある間違い

注意

「たくさん聞けば、たくさん集まる」と考えがちです。実際は、聞くたびに利用者は疲れ、答えなくなります。答えの数を数えて、決めた間隔でだけ聞きます。

モデル用の補助を書く(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 VOTES = [' '  { vote: \"up\", reason: \"\" },' '  { vote: \"down\", reason: \"間違い\" },' '  { vote: \"down\", reason: \"長すぎる\" },' '  { vote: \"up\", reason: \"\" },' '  { vote: \"down\", reason: \"間違い\" },' '  { vote: \"down\", reason: \"\" },' '  { vote: \"up\", reason: \"\" },' '  { vote: \"down\", reason: \"間違い\" },' '  { vote: \"down\", reason: \"長すぎる\" },' '  { vote: \"up\", reason: \"\" },' '];' > feedback.js"

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

集計のスクリプトを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function countReasons(votes) {' '  const counts = {};' '  for (const v of votes) {' '    if (v.vote === \"down\" && v.reason.length > 0) {' '      counts[v.reason] = (counts[v.reason] || 0) + 1;' '    }' '  }' '  return counts;' '}' >> feedback.js"

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

集計のスクリプトを書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const counts = countReasons(VOTES);' '  const downs = VOTES.filter(function (v) { return v.vote === \"down\"; }).length;' '  const named = Object.values(counts).reduce(function (a, b) { return a + b; }, 0);' '  console.log(\"評価 \" + VOTES.length + \" 件、悪い評価 \" + downs + \" 件、理由あり \" + named + \" 件\");' '  console.log(\"回答率 \" + Math.floor((named * 100) / downs) + \" パーセント\");' '  console.log(\"理由 \" + JSON.stringify(counts));' '  const msg = \"答えが役に立たなかった理由をたずねる、短い質問を一つ書いてください。\";' '  const reply = await ask([{ role: \"user\", content: msg }], \"この答えの、どこが良くなかったですか。\", 30);' '  console.log(\"質問: \" + reply.text);' '}' 'main();' >> feedback.js"

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

意見を集計する

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

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

出力の例

行示していること
評価 10 件、悪い評価 6 件、理由あり 5 件悪い評価の一件は、理由が空
回答率 83 パーセント5 を 6 で割り、切り捨てた値
理由 {"間違い":3,"長すぎる":2}最も多いのは「間違い」
質問: ...モデルの一文。言葉は毎回違う

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

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

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