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

無料レッスン

週ごとのサービス水準の見直し

このレッスンのあとで: 機能を、一週間のサービス水準に照らして調べることができる。

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

サービス水準の見直しとは

サービス水準とは、機能が満たすべき目標です。たとえば「リクエストの 95 パーセントが成功する」です。毎週の見直しは、起きたことを目標と比べて、何をするかを決めます。

前のモジュールでは、費用、トレース、機能の設計を学びます。このレッスンは、さらに進みます。測った一週間、エラー予算、警報ごとの運用手順です。

このレッスンのゴール

メモ

機能を、一週間のサービス水準に照らして調べることができる。

キーワード

ことばいみれい
目標機能が届くべき水準95 パーセント
未達届かなかった目標
エラー予算期間の中で、目標が許すエラーの数
運用手順書警報ごとに何をするかを書いた一覧
警報目標に届いていないという合図
凍結しばらく変更をやめること

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

一週間の三つの目標

ここでは、機能に三つの目標があります。リクエストの 95 パーセント以上が成功すること。90 パーセント以上が速いこと。一週間の費用が、上限の 1800000 ユニットに収まること。1 ユニットは 1000 分の 1 円なので、上限は 1800 円です。

百分率は切り捨てます。ちょうど届けば問題ありません。届かないときだけが未達です。

例: 記録された一週間

曜日リクエストエラー遅い費用
月200614300000
火210815320000
水220920340000
木2053040310000
金215718330000
土9025140000
日8014120000
一週間1220631161860000

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

よくある間違い

注意

平均がよく見えれば、一週間もよかったと考える人が多いです。悪い日は、よい一週間の中に隠れることがあります。合計だけでなく、一日ごとも調べ、どの日が最初に悪くなったかを言います。

エラー予算

95 パーセントの目標は、リクエストの 5 パーセントの失敗を許します。この許しがエラー予算です。1220 リクエストなら 61 エラーで、整数で計算します。

一週間のエラーは 63 だったので、残りの予算は 61 引く 63 で -2 です。予算を使い切ったので、戻るまで変更を凍結します。

例: 予算

手順式結果
成功の百分率(1220 - 63) × 100 ÷ 122094
許すエラー1220 × 5 ÷ 10061
使ったエラー一週間の合計から63
残りの予算61 - 63-2

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

警報ごとに一つの手順

運用手順書は短い一覧で、この警報にはこれをする、と書いてあります。悪い日の前に書くので、当番の人は、その場で計画を考えなくてすみます。

未達に手順書の手順がなければ、責任者に引き継ぎます。そのあとで、その手順を手順書に足します。

助っ人 model.js を書く(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"

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

助っ人 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 data = await res.json();' '    const text = data.choices[0].message.content;' '    return { text, inTokens: count(data, \"prompt_tokens\"), outTokens: count(data, \"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 days = [' '  [200, 6, 14, 300000], [210, 8, 15, 320000], [220, 9, 20, 340000],' '  [205, 30, 40, 310000], [215, 7, 18, 330000], [90, 2, 5, 140000], [80, 1, 4, 120000],' '];' 'const targets = { success: 95, fast: 90, cap: 1800000 };' > review.js"

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

見直しのスクリプトを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function totals() {' '  const t = { n: 0, bad: 0, slow: 0, cost: 0 };' '  for (const d of days) { t.n += d[0]; t.bad += d[1]; t.slow += d[2]; t.cost += d[3]; }' '  return t;' '}' 'function pct(part, whole) { return Math.floor((whole - part) * 100 / whole); }' >> review.js"

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

見直しのスクリプトを書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const t = totals();' '  const ok = pct(t.bad, t.n);' '  const fast = pct(t.slow, t.n);' '  const allowed = Math.floor(t.n * (100 - targets.success) / 100);' '  console.log(\"成功 \" + ok + \" パーセント、目標 \" + targets.success);' '  console.log(\"速い \" + fast + \" パーセント、目標 \" + targets.fast);' '  console.log(\"費用 \" + t.cost + \"、上限 \" + targets.cap);' '  console.log(\"エラー予算: 許す \" + allowed + \"、使った \" + t.bad + \"、残り \" + (allowed - t.bad));' '  const reply = await ask([{ role: \"user\", content: \"短く一文で答えてください。運用手順書は、何のためにありますか。\" }], \"警報ごとに何をすればよいかを、当番の人に正確に伝えるためにあります。\", 80);' '  console.log(\"モデル: \" + reply.text);' '}' 'main();' >> review.js"

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

見直しを動かす

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

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

Run の出力

行意味
成功 94 パーセント、目標 95未達。1 ポイント足りない
速い 90 パーセント、目標 90ちょうど届いたので、未達ではない
費用 1860000、上限 1800000未達。上限を超えた
エラー予算: 許す 61、使った 63、残り -2予算を使い切った
モデル: ...ラボからの一文。モデルが答えなければ記録済みサンプル

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

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

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