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

無料レッスン

プロンプトで足りるとき

このレッスンのあとで: 学習に手を出す前に、プロンプトでは直らないことを示せる。

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

学習の前に、プロンプトを試す

モデルの調整とは、自分たちの例を使って、モデルそのものを変えることです。時間もデータも手間もかかります。

調整が要りそうに見える問題の多くは、プロンプトを直すだけで解けます。先に学習してから試すと、要らなかった費用を払うことになりがちです。

このレッスンのゴール

メモ

学習に手を出す前に、プロンプトでは直らないことを示せる。

キーワード

ことばいみ
ベースライン何も変えない状態で得られる結果
ケース正しい答えが決まっている入力一つ
合格率正しく答えられたケースの割合
調整自分たちの例でモデルを変えること
目標満足できる合格率

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

まずベースラインを決める

まず、ケースの一覧を書きます。ケースとは、望む答えが決まっている入力一つです。今のプロンプトで全ケースを動かし、合格を数えます。

その数がベースラインです。これがないと、変えたら良くなったとは言えません。ケースは固定したままにして、あとの実行と公平に比べます。

例: 問い合わせの仕分け

問い合わせの種類ケース数改善前の合格改善後の合格
請求 (billing)222
配送 (delivery)212
返品 (refund)202
言葉づかい (tone)200
全部83 (37%)6 (75%)

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

プロンプトで直せること、直せないこと

プロンプトで直せるのは、書き忘れた指示、足りない例、答えの形の間違いです。安く、すぐに元へ戻せます。

苦手なのは、モデルが一度も見ていない文体に従わせることや、窓に入りきらない知識を持たせることです。そういうときに、調整が役に立つかもしれません。プロンプトの書き方は、モジュール 79 で学びます。

よくある間違い

注意

「答えが間違うなら、モデルを学習させるべきだ」と考えがちです。実際には、プロンプトに望みが書かれていないことが多いです。先にプロンプトと例を直し、公平な試験でも伸びなければ、学習を考えます。

モデル用の補助を書く(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 kinds = [\"billing\", \"billing\", \"delivery\", \"delivery\", \"refund\", \"refund\", \"tone\", \"tone\"];' 'const baseline = [1, 1, 1, 0, 0, 0, 0, 0];' 'const prompted = [1, 1, 1, 1, 1, 1, 0, 0];' > adapt1.js"

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

ベースラインの報告を書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function rate(list) {' '  let ok = 0;' '  for (const r of list) ok = ok + r;' '  return Math.floor((ok * 100) / list.length);' '}' 'function failing(list) {' '  const out = [];' '  list.forEach(function (r, i) {' '    if (r === 0 && out.includes(kinds[i]) === false) out.push(kinds[i]);' '  });' '  return out;' '}' >> adapt1.js"

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

ベースラインの報告を書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"記録済みの結果、8 件\");' '  console.log(\"改善前 \" + rate(baseline) + \"%、まだ失敗: \" + failing(baseline).join(\", \"));' '  console.log(\"改善後 \" + rate(prompted) + \"%、まだ失敗: \" + failing(prompted).join(\", \"));' '  const q = \"プロンプトだけで、モデルが見たことのない社内の文体を教えられるか、短い一文で答えてください。\";' '  const sample = \"文体の例をいくつか見せることはできますが、モデルの初期の振る舞いまでは変えられません。\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 60);' '  console.log(\"返事: \" + reply.text);' '}' 'main();' >> adapt1.js"

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

ベースラインの報告を実行する

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

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

結果は、記録済みのもの

二つの結果の列は、記録されたものとしてスクリプトに書いてあります。モデルが作ったものではないので、どの学生にも同じ数字が出ます。

ラボのモデルを呼ぶのは最後の一行だけです。モデルが答えないときは、「記録済みサンプル」と表示します。

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

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