評価駆動で LLM 機能をゼロから作った 5 日間の流れ#
評価駆動開発(EDD)で LLM 機能をゼロから作った際の、実際の時系列と意思決定。新規機能をどう立ち上げるかの雛形として使える。
開発する機能#
ユーザーが入力した商品レビューから、改善ポイントを 3 つ抽出して返す機能。
時系列(実時間ベース)#
flowchart LR
D1[Day 1<br/>評価セット骨組み] --> D2[Day 2<br/>プロトタイプ]
D2 --> D3[Day 3<br/>改善サイクル]
D3 --> D4[Day 4<br/>本番準備]
D4 --> D5[Day 5<br/>段階リリース]
Day 1: 評価セット骨組み(2 時間)#
実装より先に評価セットを作り始める。
成果物:
- 成功例 20 件(期待通り改善ポイントが抽出できる例)
- 失敗例 10 件(抽出できないべき例: 短すぎる、無意味、攻撃的等)
-
境界例 5 件(曖昧、多言語、絵文字等)
eval-set.yaml#
-
id: case-001 input: "このカメラは画質が素晴らしいけど、電池の持ちが悪い。" expected_count: 1 # 改善ポイント 1 個 must_include: ["電池"]
-
id: case-050 input: "最高!" expected_count: 0 # 改善ポイントなし must_refuse: true
-
所要: 2 時間(調査含む)
Day 2: プロトタイプ(4 時間)#
目的: 評価セット 35 件中、70% 合格を目指す。
最初のプロンプト:
以下のレビューから改善ポイントを抽出してください。
JSON 形式で、{"points": [...]} のように返してください。
結果: 合格率 52%。
問題点:
- 曖昧なレビューでも無理に抽出しようとする
- JSON のキーが日本語と英語で揺れる
- 3 個以上抽出することがある
改善:
- 「改善ポイントがなければ空配列を返す」を明示
- few-shot 例を 3 件追加
- 上限を「最大 3 個」と明示
結果: 合格率 78%。
Day 3: 改善サイクル(6 時間)#
各失敗ケースを見て、対応策を試す。
flowchart LR
F[失敗ケース] --> A[原因分析]
A --> H[仮説]
H --> T[試す]
T --> E{評価セット<br/>改善?}
E -->|はい| K[採用]
E -->|いいえ| H
3 ラウンドの改善:
| Round | 変更 | 合格率 |
|---|---|---|
| R1 | 境界例用の few-shot 追加 | 78% → 85% |
| R2 | JSON Mode を使う | 85% → 88% |
| R3 | 「具体的な改善ポイントのみ」と明示 | 88% → 92% |
合格ライン(90%)到達。
Day 4: 本番準備(4 時間)#
追加作業:
- エラーハンドリング(タイムアウト、レート制限)
- ログ設計(入出力、トークン数、レイテンシ)
- コスト見積もり(想定 1,000 リクエスト/日で $5/日)
- プロンプトインジェクション対策(入力の特殊パターン検出)
- A/B テストの準備
Day 5: 段階リリース(2 時間)#
flowchart LR
C[Canary 10%] -->|監視 2h| C2[50%]
C2 -->|監視 4h| F[100%]
10% 配信後の結果:
- エラー率: 0.3%
- P95 レイテンシ: 1.8 秒
- コスト: 予算内
- ユーザーフィードバック: 好意的
問題なかったので 50% → 100% へ。
運用開始後#
Week 2: 本番で 3 件の失敗パターンを発見(評価セットに未登録のパターン)。評価セットに追加して再評価 → プロンプト微調整 → デプロイ。
Month 1: ユーザーフィードバックを反映した改善プロンプト v2 をリリース。評価セットも 80 件に拡充。
トータルコスト#
- 開発時間: 約 18 時間
- 検証 API コスト: $15
- 本番運用(1 ヶ月): $150
学び#
1. 評価セットを先に作った効果
- 「何が良い出力か」が定量化されて、改善の方向が明確
- 後から振り返って「なぜこの形にしたか」を説明できる
2. 小さく始めて大きく育てる
- 35 件の評価セットで十分に走り出せた
- 本番で見つかった失敗を追加して育てる方が現実的
3. プロトタイプと本番の間の距離
- プロトタイプ後、本番化に 4 時間かかった
- これを甘く見積もるとスケジュール破綻
4. Canary デプロイの安心感
- 10% で試せるので、問題発覚時の被害が少ない
- 統計的に判断できる
アンチパターン#
- 評価セットを後回し: プロトタイプ先行で、後で大規模修正
- プロトタイプを本番投入: 運用要件を無視すると事故る
- 一気に全ユーザーへ: Canary なしは怖い
- 本番後の改善をしない: デプロイして終わり、は品質低下の元
チェックリスト#
- [ ] 実装前に評価セットを作った
- [ ] 合格ラインを数値で決めた
- [ ] 改善のたびに評価スコアを測った
- [ ] 本番化に必要な要素(ログ・エラー処理等)を確認した
- [ ] Canary デプロイで段階的に配信した
- [ ] 本番後もフィードバックループを回している
まとめ#
EDD は最初は遠回りに見えて、結果的に最速。5 日で新機能を本番投入できる。評価セット・改善サイクル・Canary の 3 点があれば、速くて質の高い AI 機能が作れる。