商品説明を生成する指示書の2版のどちらが良いかで、社内の意見が割れたまま二週間。感覚ではなく、決定的なチェックと LLM-as-Judge を重ねた評価ハーネスで、同じ代表例を同じ基準で測り直す(Eval Harness)。
文書の仕分けを全件、最上位モデルに通していて、処理量が3倍になれば費用もそのまま3倍になる。まず安いモデルで前捌きし、確信度が低いものだけを上位モデルへ回す(Model Cascade)。Python の標準ライブラリだけで実装して確かめます。
セールは好評だったのに、初日だけ AI の費用が跳ね上がった。表記ゆれを含む同じ質問が同時に何十組も届き、それぞれ別々に問い合わせていた。質問を正規化し、同時に届いた同じ問い合わせを1本に束ねる(Request Coalescing)。
従量課金の AI 処理が、原資が尽きて予告なく止まり、4日間、20件ほどを手で回すことになった。消費を計って積算し、警告と上限の二段で明示的に止める(Budget Guard)。Python の標準ライブラリだけで実装して確かめます。
AI が下書きした顧客向けメールに、社内限定の符丁が混ざったまま送信された。形式の検査は通っていた。送り出す前に検査関数のパイプラインで語彙を検め、Cleared と Blocked を Python の match 文で受け取る(Output Guardrail)。
LLM API は 200 OK のまま、空・打ち切り・拒否を返すことがある。例外が上がらないので、要約が空欄のまま処理済みとして流れていた。契約を満たさない応答を独自例外に変換し、raise ... from e で原因をたどれるようにする(Exception Translation)。
同じ問い合わせに毎回違う文章が返り、上長に「これは障害ですか」と訊かれても答えられない。揺れを止める代わりに、揺れてよい範囲と許さない範囲を出力の契約として先に決め、異常だと判定できるようにする(Output Contract)。Python の標準ライブラリだけで確かめます。
「コードディスパッチャー」シリーズ全12回の案内板です。LLMアプリを本番で動かすときの出力の揺れ・費用・品質劣化・引き継ぎといった運用の困りごとを、深夜の運行指令所の物語で扱う連載を、困りごとから探せます。
区画ごとにデータの持ち方が Vec だったり HashMap だったりすると、巡回するたびにループを書き分けることになる。中身の形を知らずに同じ手順で回せるようにする Iterator を Rust で実装します。
土壌診断・灌漑・施肥の3つのモジュールは、正しい順で呼ばないと過湿の土に肥料を入れてしまう。その順序を知る窓口を1つ用意し、呼ぶ側が順番を覚えなくて済む Facade を Rust で実装します。
品種ごとにコピーした手順関数は、いつの間にか呼び出し順が入れ替わり、前回の日照の値で収穫を判定してしまう。トレイトのデフォルトメソッドで手順の骨格を固定し、品種ごとの差分だけを実装させる Template Method を Rust で実装します。
検知処理の最後に通知関数を直接並べていると、知らせる相手が増えるたびに検知側を書き換えることになる。通知先を登録制にして、検知する側が相手を知らなくて済む Observer を Rust で実装します。
削除した要素を記憶の推定値で挿し戻す逆操作では、元の長さや角度に戻らず、戻すたびに全体のバランスが悪くなる。変更前の状態そのものを、中身を外へ漏らさずに預けておく Memento を Rust で実装します。
生育段階を bool フラグ3つで持つと、ありえない組み合わせが生まれ、直しても呼び忘れた経路からまた出てくる。enum と match で状態を1つに決め、不正な組み合わせを型で作れなくする State を Rust で実装します。
株1つ用と花壇まるごと用で関数を分けていると、寄せ植え鉢のような「まとまりの中のまとまり」を入れる余地が無い。単体も集まりも同じトレイトで再帰的に扱う Composite を Rust で実装します。