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

無料レッスン

AIから人への引き継ぎ

このレッスンのあとで: AIが人に代わる条件を決め、引き継ぎメモを作れる。

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

同じ説明をまたさせられる

通販サイトの問い合わせAIが、荷物の遅れを三回聞き返しました。客は怒って「担当の人を出して」と頼みます。やっと代わった担当者は、最初から事情を聞き直しました。

人に代わる場面で大切なのは、いつ代わるかと、何を渡すかです。

このレッスンのゴール

メモ

AIが人に代わる条件を決め、引き継ぎメモを作れる。

キーワード

ことばいみれい
引き継ぎAIから人へ会話を渡すこと
引き金引き継ぎを決める条件客の希望
メモ人に渡す、会話の要点
往復客と AI の発言のやり取り一回分
待ち行列人を待つ会話の並び

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

代わる条件を先に決めておく

代わる条件は、あらかじめ決めておきます。ここでは四つを使います。客が人を希望した、返金や苦情の話題だった、AIの自信が低い、往復が多すぎる、です。

どれか一つでも当てはまれば、人に代わります。境界ちょうどの値は、まだAIのままにします。

四つの会話と判定

会話話題判定
c1営業時間AIのまま
c2返金引き継ぎ: 話題
c3配達引き継ぎ: 自信と往復
c4営業時間引き継ぎ: 希望

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

渡すメモと、先に回す会話

引き継ぎメモには、会話の番号、理由、最後の発言、往復の数を入れます。人が最初から聞き直さずに済みます。

待ち行列では、客が人を希望した会話を先に並べます。それぞれのグループの中では、届いた順を保ちます。

よくある間違い

注意

「人への道はなるべく隠し、AIで済ませたほうがよい」と考えがちです。希望した客を引き止めると、信頼が落ちます。人への道は、見える場所に置いて、すぐ使えるようにします。

モデル用の補助を書く(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 RULES = { maxTurns: 6, minConfidence: 50, topics: [\"返金\", \"苦情\"] };' 'const CHATS = [' '  { id: \"c1\", turns: 3, confidence: 90, topic: \"営業時間\", asked: false, last: \"何時に開きますか。\" },' '  { id: \"c2\", turns: 4, confidence: 80, topic: \"返金\", asked: false, last: \"お金を返してほしいです。\" },' '  { id: \"c3\", turns: 8, confidence: 40, topic: \"配達\", asked: false, last: \"まだ届きません。\" },' '  { id: \"c4\", turns: 2, confidence: 95, topic: \"営業時間\", asked: true, last: \"担当の人と話したいです。\" },' '];' > handover.js"

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

引き継ぎの判定を書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function reasons(c) {' '  const out = [];' '  if (c.asked) out.push(\"希望\");' '  if (RULES.topics.includes(c.topic)) out.push(\"話題\");' '  if (c.confidence < RULES.minConfidence) out.push(\"自信\");' '  if (c.turns > RULES.maxTurns) out.push(\"往復\");' '  return out;' '}' >> handover.js"

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

引き継ぎの判定を書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  for (const c of CHATS) {' '    const why = reasons(c);' '    console.log(c.id + \" \" + (why.length > 0 ? \"引き継ぎ \" + why.join(\"+\") : \"モデルのまま\"));' '  }' '  const note = CHATS[2];' '  console.log(\"メモ \" + JSON.stringify({ id: note.id, reasons: reasons(note), last: note.last, turns: note.turns }));' '  const msg = \"担当の人に代わることと、同じ説明を繰り返さなくてよいことを伝える、短い一文を書いてください。\";' '  const reply = await ask([{ role: \"user\", content: msg }], \"ここから担当の人に代わります。同じ説明は不要です。\", 40);' '  console.log(\"客に見せる一行: \" + reply.text);' '}' 'main();' >> handover.js"

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

引き継ぎを判定する

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

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

出力の例

行示していること
c1 モデルのまま条件がどれも当てはまらない
c2 引き継ぎ 話題返金の話題は、一つで十分
c3 引き継ぎ 自信+往復理由は決まった順に並ぶ
メモ {...}人に渡す要点
客に見せる一行: ...モデルの一文。言葉は毎回違う

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

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

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