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

無料レッスン

利用者の声をテストケースにする

このレッスンのあとで: 回答についての利用者の声を、よりよいケースに変えられます。

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

低評価は無料のテストケース

フィードバックのループは、回答についての利用者の声を、変更のたびに試すケースに変えます。利用者は、思いもしなかった質問を見つけます。修正付きの低評価は、最良のテストケースです。

ただし、個人的な言葉も含みます。だれが見られるか、どれだけ保存するかを決める必要があります。

このレッスンのゴール

メモ

回答についての利用者の声を、よりよいケースに変えられます。

キーワード

ことばいみ
フィードバック利用者が回答に付ける評価や修正
修正利用者が「こうあるべき」と言う答え
ケース質問と、期待する答えの組
保存期間記録を削除するまで置く期間
アクセス記録を読める人

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

修正がケースになる

すべてのフィードバックがケースになるわけではありません。修正のない低評価は、何かが違うことは示しますが、正しい答えは示しません。高評価は直すものがありません。

質問と、直した答えを残します。だれが言ったかは残しません。利用者の id やメールアドレスを持つケースは、守るべき個人データになります。

例: 三件のフィードバック

評価修正ケースになるか
低日曜は 18 時です。なる: 質問とその答え
低(なし)ならない: 期待する答えがない
高(なし)ならない: 直すものがない

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

だれが見るか、どれだけ置くか

生のフィードバックは、機能を改善する少数の人のものです。そこから作ったケースは、だれも含まないので、チーム全体で使えます。

保存期間を決め、過ぎた生の記録を削除します。Run では経過日数が記録に入った数値なので、全員が同じ結果を見ます。実際のシステムは日付を比べます。

よくある間違い

注意

「フィードバックは多く、長く持つほどよい」と考えがちです。生の記録には、利用者が入力した、ときに個人的な内容が入っています。ケースを残し、残りは予定どおり削除し、期間を書いておきます。

モデル用の補助を書く(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 KEEP_DAYS = 30; // これより古いフィードバックは削除する' 'const feedback = [' '  { id: \"f1\", rating: \"down\", question: \"お店は何時に閉まりますか。\", fix: \"日曜は 18 時です。\", user: \"u17\", age: 3 },' '  { id: \"f2\", rating: \"up\", question: \"注文はどこにありますか。\", fix: \"\", user: \"u22\", age: 5 },' '  { id: \"f3\", rating: \"down\", question: \"靴は返品できますか。\", fix: \"\", user: \"u31\", age: 12 },' '  { id: \"f4\", rating: \"down\", question: \"北海道へ届けられますか。\", fix: \"はい、3 日で届きます。\", user: \"u40\", age: 45 },' '];' > feedback.js"

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

フィードバックのループを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// ケースは質問と期待する答えを持ち、利用者は決して持たない。' 'function toCase(f) {' '  if (f.rating === \"down\" && f.fix.length > 0) return { id: f.id, question: f.question, expected: f.fix };' '  return null;' '}' >> feedback.js"

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

フィードバックのループを書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  feedback.forEach(function (f) {' '    if (f.age > KEEP_DAYS) {' '      console.log(f.id + \": \" + KEEP_DAYS + \" 日より古いので削除\");' '      return;' '    }' '    const c = toCase(f);' '    console.log(f.id + \": \" + (c ? \"新しいケース: \" + c.question + \" -> \" + c.expected : \"ケースなし\"));' '  });' '  const q = \"このケースのテストは何を確かめるべきですか。一文で答えてください。質問: お店は何時に閉まりますか。期待: 日曜は 18 時です。\";' '  const r = await ask([{ role: \"user\", content: q }], \"答えに 18 時が含まれ、日曜に触れていることを確かめます。\", 60);' '  console.log(\"確認内容の一例: \" + r.text);' '}' 'main();' >> feedback.js"

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

ループを実行する

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

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

出力の例

行示していること
f1: 新しいケース: お店は何時に閉まりますか。 -> ...最近の、修正付きの低評価
f2: ケースなし と f3: ケースなし高評価と、修正のない低評価
f4: 30 日より古いので削除保存期間の決まりを適用した
確認内容の一例: ...あなた自身の呼び出し。実行ごとに変わるか、記録済みサンプルと出る

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

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

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