約束しすぎたアプリ
復習アプリが「どんな質問にも、必ず正しく答えます」と宣伝しています。試験の前の晩、学生はそれを信じました。アプリは間違った年号を答え、学生はそれを覚えました。
アプリは壊れていません。できる以上のことを約束したのです。このレッスンでは、人の期待を決める言葉と画面を扱います。
このレッスンのゴール
メモ
機能に頼る前の人に、できることとできないことを伝えられる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 期待 | 機能が何をしてくれると、人が思っているか | |
| 言い切り | 機能の働きについての断定 | 必ず正しい |
| 限界 | 機能にはできないこと | |
| 範囲 | 機能が作られた目的の仕事 | |
| 失敗の例 | 実際に間違えた場面 |
学生が入力するセルは、このプレビューでは空白です。
何のためか、何のためでないか
人は、機能をどこまで信じるかを、最初の数秒で決めます。短い三つのことを伝えましょう。何のためにあるか、何のためでないか、そして失敗する例を一つです。
失敗の例は、チームが省きがちな部分です。そして、人がいちばん覚えている部分でもあります。
メモ要約ツールの良い説明
| 部分 | 言葉の例 |
|---|---|
| 何のため | メモを短い要約にします |
| 何のためでない | 事実の確認や、健康と法律の相談 |
| 失敗する場面 | 同じ出来事に二つの日付がメモにあるとき |
学生が入力するセルは、このプレビューでは空白です。
裏付けられない言い切り
裏付けられない言い切りとは、一つの間違いで嘘だと分かる言い方です。必ず、絶対、間違えません、100% がよくある例です。どんな質問にもも同じで、すべての質問を試せる人はいません。
数えられるものに置き換えます。たとえば「試験の質問 10 問中 9 問に正解」です。測り方は、モジュール 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 BANNED = [\"必ず\", \"絶対\", \"間違えません\", \"100%\", \"どんな質問\"];' 'const TEXTS = [' ' { id: \"a\", text: \"どんな質問にも、必ず正しく答えます。\" },' ' { id: \"b\", text: \"メモから返信の下書きを作ります。間違うことがあります。確かめてください。\" },' ' { id: \"c\", text: \"絶対に間違えません。正解率 100%。\" },' ' { id: \"d\", text: \"ページを要約します。医療の相談には使えません。\" },' '];' > expect.js"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
言い切りの確認を書く(2)
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function claims(text) {' ' return BANNED.filter(function (b) { return text.includes(b); });' '}' 'function hasLimit(text) {' ' return text.includes(\"間違うことがあります\") || text.includes(\"には使えません\");' '}' >> expect.js"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
言い切りの確認を書く(3)
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' let fail = 0;' ' for (const t of TEXTS) {' ' const found = claims(t.text);' ' let verdict = \"注意\";' ' if (found.length > 0) verdict = \"不合格\";' ' else if (hasLimit(t.text)) verdict = \"合格\";' ' if (verdict === \"不合格\") fail++;' ' console.log(t.id + \" \" + verdict + \" \" + JSON.stringify(found));' ' }' ' console.log(\"不合格 \" + fail + \" 件 / \" + TEXTS.length + \" 件\");' ' const msg = \"メモの要約ツールにできないことを、短い一行で書いてください。\";' ' const reply = await ask([{ role: \"user\", content: msg }], \"メモに書かれていない事実は、確かめられません。\", 40);' ' console.log(\"限界の一行: \" + reply.text);' '}' 'main();' >> expect.js"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
言い切りを確認する
docker exec -w /home/node/project agent node expect.jsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
出力の例
| 行 | 示していること |
|---|---|
| a 不合格 ["必ず","どんな質問"] | 裏付けのない言い切りが二つ |
| b 合格 [] | 言い切りがなく、間違いの可能性を伝えている |
| c 不合格 ["絶対",...] | 言い切りがさらに三つ |
| d 合格 [] | 何のためでないかを伝えている |
| 不合格 2 件 / 4 件 | 半分は書き直しが必要 |
学生が入力するセルは、このプレビューでは空白です。