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

無料レッスン

プロンプトを試す方法

このレッスンのあとで: 変えたプロンプトがよくなったかを、言えます。

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

決まったケースでプロンプトを試す

プロンプトのテストは、決まったケースを走らせ、各答えに規則を当てます。規則は単純です。ある言葉が入る、ある言葉は入らない、答えが短い、などです。

テストがないと、目の前のケースを直した変更が、見ていない二つのケースを、静かに壊すことがあります。

このレッスンのゴール

メモ

変えたプロンプトがよくなったかを、言えます。

キーワード

ことばいみ
ケース試すときの一つの入力
規則答えへの単純な検査
基準比べる相手のプロンプト
退行前は通り、今は落ちるケース
合格規則を満たした答え
記録済みテストを繰り返せるよう保存した答え

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

ケースと規則とは

ケースは、返金を求める乗客のような、一つの入力です。規則は、答えにコードで当てられる検査です。「返金という言葉を含む」は規則です。「感じがよい」は、コードで確かめられないので規則ではありません。

小さくて固定したケースの組を持ちます。どのプロンプトにも同じ組を当てれば、変わったのはプロンプトだけになります。

プロンプト A と B を三つのケースで

ケースプロンプト Aプロンプト B
返金合格不合格(おわびを言う)
遅延不合格合格
感謝合格不合格(遅れに触れる)
合計3 件中 2 件3 件中 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\");' 'const cases = [' '  { name: \"返金\", must: [\"返金\"], not: [\"申し訳\"], max: 40 },' '  { name: \"遅延\", must: [\"遅れ\"], not: [], max: 40 },' '  { name: \"感謝\", must: [\"ありがとう\"], not: [\"遅れ\"], max: 40 },' '];' 'const A = [\"5 日以内に返金します。\", \"バスが少し来ていません。おわびします。\", \"ご連絡ありがとうございます。\"];' 'const B = [\"申し訳ありません。5 日以内に返金します。\", \"10 分の遅れが出ています。\", \"ありがとうございます。遅れて申し訳ありません。\"];' > test5.js"

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

プロンプトの試験を書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function passes(reply, c) {' '  const long = reply.length > c.max;' '  const has = c.must.every(function (m) { return reply.includes(m); });' '  const bad = c.not.some(function (n) { return reply.includes(n); });' '  return has && bad === false && long === false;' '}' 'function run(replies) {' '  return replies.map(function (r, i) { return passes(r, cases[i]); });' '}' >> test5.js"

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

プロンプトの試験を書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const ra = run(A);' '  const rb = run(B);' '  const names = function (flags, other) {' '    return cases.filter(function (c, i) { return flags[i] && other[i] === false; }).map(function (c) { return c.name; });' '  };' '  console.log(\"A は 3 件中 \" + ra.filter(Boolean).length + \" 件、B は 3 件中 \" + rb.filter(Boolean).length + \" 件に合格\");' '  console.log(\"改善: \" + names(rb, ra).join(\"、\") + \" | 悪化: \" + names(ra, rb).join(\"、\"));' '  const q = \"返金を求める乗客に、40 字以内で返信してください。\";' '  const reply = await ask([{ role: \"user\", content: q }], A[0], 80);' '  console.log(\"実際の答えは返金の規則に合格: \" + passes(reply.text, cases[0]));' '}' 'main();' >> test5.js"

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

二つのプロンプトを比べる

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

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

Run が表示するもの

最初の行は、A が 2 件、B が 1 件に合格したことを言います。次の行は、B が遅延を改善し、返金と感謝を悪化させたことを言います。だから A を残します。

この二行は記録した答えを使うので、全員が同じです。最後の行は実際の答え一つを調べるので、true か false か変わります。本物の答えも規則に落ちることを示します。モデルがなければ、先に「記録済みサンプル」と出ます。

よくある間違い

注意

「気になったケースを直せたら、よいプロンプトだ」と考えがちです。一つのケースは一つの標本です。組全体を走らせ、改善と悪化を数えてから決めてください。

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

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