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

無料レッスン

AI機能は費用に見合うか

このレッスンのあとで: AI機能が費用に見合うかを、数字で示せる。

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

一通は安いが、一件は高い

雑貨店が、問い合わせのチャット機能を入れました。チームは「一通あたりの費用は、ほとんどゼロです」と胸を張ります。店長は、別のことを尋ねます。お客さんの困りごとを一件解決するのに、いくらかかるのか。

二つの数は、大きく離れることがあります。費用に見合うと示すには、正しいほうを選ぶ必要があります。

このレッスンのゴール

メモ

AI機能が費用に見合うかを、数字で示せる。

キーワード

ことばいみ
メッセージあたりの費用合計の費用を、全メッセージで割った数
解決一件あたりの費用合計の費用を、解決した件数で割った数
解決人が必要としたものを得られたこと
比較の基準機能がなかった頃のやり方
隠れた費用本当にかかるが、数え忘れる費用

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

同じではない二つの費用

機能にかかった費用を全部足します。それを全メッセージで割ると、小さな数になります。解決した件数で割ると、大事な数になります。

解決しなかった会話にも、お金はかかっています。トークンの数え方と値段の付け方は、モジュール 69 で学びました。ここではその合計を使います。

前のやり方と比べる

費用は、一つだけでは意味が薄いものです。機能の前に、いくらで、どれだけ時間がかかっていたかと比べます。

引き継いだ人の費用のような、隠れた費用も数えます。安く見える機能が、数えたあとで負けることがあります。

よくある間違い

注意

「モデルの値段が、費用のすべてだ」と考えがちです。それは一部にすぎません。人の引き継ぎと、解決しなかった会話にも費用がかかります。全体の費用を、実際に解決した件数で割りましょう。

モデル用の補助を書く(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 PRICE = { inCost: 40, outCost: 200, human: 300000 };' 'const RUNS = [' '  { id: \"r1\", tokensIn: 1000, tokensOut: 200, resolved: true, handed: false },' '  { id: \"r2\", tokensIn: 2000, tokensOut: 500, resolved: true, handed: true },' '  { id: \"r3\", tokensIn: 1500, tokensOut: 100, resolved: false, handed: false },' '  { id: \"r4\", tokensIn: 500, tokensOut: 50, resolved: true, handed: false },' '];' > worth.js"

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

費用の計算を書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function callCost(r) {' '  return r.tokensIn * PRICE.inCost + r.tokensOut * PRICE.outCost;' '}' 'function total() {' '  let sum = 0;' '  for (const r of RUNS) sum += callCost(r) + (r.handed ? PRICE.human : 0);' '  return sum;' '}' >> worth.js"

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

費用の計算を書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const resolved = RUNS.filter(function (r) { return r.resolved; }).length;' '  console.log(\"合計 \" + total() + \" ミリ円(約 \" + Math.floor(total() / 1000) + \" 円)\");' '  console.log(\"メッセージあたり \" + Math.floor(total() / RUNS.length));' '  console.log(\"解決一件あたり \" + Math.floor(total() / resolved));' '  console.log(\"解決 \" + resolved + \" 件 / \" + RUNS.length + \" 件\");' '  const msg = \"メッセージあたりの費用は低く見えても、解決した問題あたりの費用は高いことがある、と一文で書いてください。\";' '  const reply = await ask([{ role: \"user\", content: msg }], \"メッセージあたりが安くても、解決できなかった分が隠れていることがあります。\", 50);' '  console.log(\"結論: \" + reply.text);' '}' 'main();' >> worth.js"

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

費用を計算する

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

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

出力の例

行示していること
合計 670000 ミリ円(約 670 円)四つの呼び出しと、人の対応が一回
メッセージあたり 167500低く見える
解決一件あたり 223333r3 が解決しないので、高くなる
解決 3 件 / 4 件割る数

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

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

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