第3章 出力を安定させる設計
なぜ出力は不安定になるのか
生成AIを使っていて、次のような経験は珍しくない。
- 昨日は良かったが、今日は結果が違う
- 同じ入力なのに表現や粒度が揺れる
- 一部だけ要件を満たしていない
- 「それっぽいが使えない」回答が混ざる
これらの原因の多くは、モデルの性能ではなく、設計の曖昧さにある。
生成AIは確率的に出力を生成するため、設計が曖昧であればあるほど「揺れ」は表面化しやすくなる。
本章では、この揺れを抑え、実務で使える安定した出力を得るための設計パターンを整理する。
パターン1:出力フォーマットを先に固定する
もっとも効果が高く、かつ見落とされがちな手法が出力形式の固定である。
多くの不安定さは、
- 文章で返すのか
- 箇条書きなのか
- 表なのか
- 構造化データなのか
が曖昧なまま生成を行うことで発生する。
そのため設計時には、
- 見出し構成
- 箇条書きの粒度
- JSONキーの構造
- 表の列定義
などを先に提示する。
出力を「自由に書かせる」のではなく、はめる枠を用意することで、揺れは大きく減少する。
「AI活用について説明してください。」
→ 文章量・構成・粒度が毎回変わる
→ 箇条書きになることもあれば長文になることもある
「以下の形式で出力してください。
【見出し】
概要(200字以内)
メリット(箇条書き3点)
注意点(箇条書き2点)」
→ 出力の構造が安定する
→ 比較・再利用・検証が容易になる
パターン2:評価基準を言語化する
AIは「何が良い結果か」を暗黙的には理解できない。
そのため、設計段階で次のような評価基準を明示することが有効である。
- 正確性を重視するのか
- 網羅性を重視するのか
- 簡潔さを重視するのか
- 実装可能性を重視するのか
これを指定しない場合、AIは文脈ごとに判断基準を変えてしまう。
評価基準は「厳密なルール」である必要はなく、判断の方向性を固定するための軸として機能すればよい。
「このサービスを評価してください。」
→ ポジティブ寄りになるか批評寄りになるかが不安定
→ 評価軸が曖昧
「実装可能性とコスト観点を重視して評価してください。感想ではなく、具体的な実行可否の観点で述べてください。」
→ 評価の方向性が固定される
→ 感想文になりにくい
パターン3:ステップ分割による安定化
複雑なタスクを一度に依頼すると、出力は不安定になりやすい。
そのため、
- 情報整理
- 方針決定
- 出力生成
のように思考プロセスを分割する設計が有効である。
これは「思考を見せる」ことが目的ではなく、判断工程を明示的に分けることでミスを減らすための手法である。
結果として、
- 抜け漏れが減る
- 論理の飛躍が減る
- 出力の一貫性が高まる
といった効果が得られる。
「新規SaaS事業の企画を考えてください。」
→ アイデアが飛躍しやすい
→ 論理構造が安定しない
「以下の順番で出力してください。
Step1:市場課題の整理
Step2:ターゲット定義
Step3:提供価値の整理
Step4:収益モデル」
→ 思考が整理される
→ 抜け漏れが減る
パターン4:入力データと指示文を分離する
設計上の重要なポイントとして、
- 指示(Instruction)
- 入力データ(Input)
を明確に分離することが挙げられる。これらが混在すると、
- どこまでが条件なのか
- どこからが素材なのか
をAIが誤解しやすくなる。そのため、
- 指示は固定テンプレート
- 入力は差し替え可能なデータ
として設計することで、再利用性と安定性の両方が向上する。これはAPI設計やバッチ処理との相性も良い。
といった効果が得られる。
「この文章を初心者向けにわかりやすくまとめてください。
文章:〇〇〇〇〇(本文)」
→ 指示と素材の境界が曖昧
→ 条件が本文に混ざることがある
「【指示】
以下の文章を初心者向けに300字以内で要約してください。
【入力文章】
〇〇〇〇〇」
→ テンプレート化しやすい
→ API実装時にも安定する
パターン5:禁止事項を明示する
AIは「やってはいけないこと」を指定されない限り考慮しない。
そのため、実務では次のような禁止事項の明示が重要になる。
- 推測しない
- 架空の情報を作らない
- 外部リンクを出さない
- 結論を断定しない
禁止事項はネガティブに見えるが、実際には品質を安定させるための重要な制約である。
として設計することで、再利用性と安定性の両方が向上する。これはAPI設計やバッチ処理との相性も良い。
といった効果が得られる。
「この歴史事件について解説してください。」
→ 推測・創作・断定が混ざる可能性
「事実として確認されている内容のみを解説してください。推測や評価は含めないでください。」
→ ハルシネーションの抑制
→ 実務利用しやすい出力になる
パターン6:テンプレート化による再現性確保
安定した設計は、一度きりで終わらせないことが重要である。
有効だった設計は、
- テンプレートとして保存
- チームで共有
- 文書化・コード化
することで、属人性を排除できる。
テンプレート化の目的は、
- 楽をすること
- 手抜きをすること
ではなく、品質を再現することにある。
毎回その場で指示を書き直す
→ 表現が揺れる
→ チーム内で品質が統一されない
「以下のテンプレートを使用する:
【目的】
【役割】
【制約】
【入力】
【出力形式】
【禁止事項】」
→ チーム共有が可能
→ 品質が標準化される
→ 属人性が減る
不安定さを完全に消そうとしない
重要な注意点として、生成AIの出力を完全に固定しようとすることは現実的ではない。
むしろ目指すべきは、
- 許容できる揺れを定義する
- 危険な揺れを抑制する
- チェック工程を前提にする
という設計である。
生成AIは決定論的なプログラムではなく、協調する相手として扱う方が、結果的に安定した運用につながる。