ファインチューニング、検索拡張生成(RAG)、そして単純なプロンプティングは、それぞれ大規模言語モデル(LLM)における異なる種類の課題を解決します。誤った手法を選択すると、GPUリソースを浪費し、クラウド費用を膨らませるだけでなく、ユーザーに誤った回答を提供することにもなりかねません。以下に、開発者がユースケースに最適なツールを判断し、必要に応じてそれらをどのように組み合わせるかを決定するためのステップバイステップのフレームワークを示します。
3つのレバー
| 変化するもの | 仕組み | 主な用途 |
|---|---|---|
| RAG | 推論時にモデルのコンテキストに外部の事実を追加する | 価格の更新、最新のポリシー文書の取得、プライベートデータの引用 |
| Fine-tuning | スタイル、フォーマット、または繰り返される動作を変更するためにモデルの内部重みを調整する | 一貫したトーン、複雑な出力構造、高スループットの分類 |
| Prompting | 明確な指示と例示によってモデルの即時的な応答を形成する | 一般的な推論、迅速なプロトタイプ作成、数日以内での機能リリース |
あらゆるプロジェクトの開始時に問うべき核心的な質問は、**「その不足は知識のギャップですか、それとも振る舞いのギャップですか?」**ということです。知識のギャップとは、モデルが単に正しい事実を持っていないことを意味します。一方、振る舞いのギャップとは、モデルは事実を知っているものの、それを求める通りの方法で表現できていないことを意味します。
問題が知識のギャップである場合 — RAGを活用する
モデルがハルシネーション(幻覚)を起こしたり、古い数値を返したり、ソースを提示できなかったりする場合、問題は情報の欠如または陳腐化にあります。RAGは、実行時に適切なドキュメントやデータポイントをプロンプトに取り込むことで、この問題を解決します。
- 在庫レベル、市場価格、規制表など、事実が頻繁に変わる場合にRAGを使用してください。
- コンプライアンスや監査の目的で、引用やトレーサビリティ(追跡可能性)を提供する必要がある場合に使用してください。
- 公開モデルにさらすことができないプライベートなコーパスに使用してください。検索レイヤーがデータをファイアウォールの背後に保持します。
ドキュメントの更新は簡単ですが、モデルの再学習は困難です。
問題が振る舞いのギャップである場合 — ファインチューニングを行う
モデルがすでに正しい事実を知っているにもかかわらず、誤ったフォーマットやトーン、あるいは一貫性のない構造で出力する場合、モデルの内部的な振る舞いを形成する必要があります。ファインチューニングはモデルの重みを書き換え、望ましいスタイルがデフォルトになるようにします。
- ブランド固有の語り口、法律用語、または厳格なテンプレートに従う必要があるあらゆる出力に最適です。
- 大量分類のような、1回あたりのわずかなプロンプトコストが積み重なる、大量かつ反復的なタスクに適しています。
- プロンプトを短縮でき、トークン使用量を減らすことで推論コストを削減できます。
よくある間違いは、単に事実を教えるためにモデルをファインチューニングすることです。これは計算リソースを浪費するだけでなく、将来的なデータのドリフト(変化)に対してもモデルを脆弱なままにします。事実は検索レイヤーに、ファインチューニングは振る舞いレイヤーに属すべきです。
問題が指示のギャップである場合 — プロンプティングから始める
プロンプトエンジニアリングは、モデルがそもそもタスクを解決できるかどうかをテストするための、最も安価で迅速な方法です。明確な指示、few-shotの例示、およびchain-of-thought(思考の連鎖)プロンプティングを用いることで、モデルを変更することなくギャップを埋められることがよくあります。
- より高価なソリューションに投資する前に、「良い」回答がどのようなものかを探索するために使用してください。
- 推論重視のタスク、ブレインストーミング、または迅速な対応が必要なあらゆるシナリオに適用してください。
- よく練られたプロンプトで満足のいく結果が得られるのであれば、データの収集、モデルのトレーニング、または検索パイプラインといったオーバーヘッドを回避できます。
明確なプロンプティングといくつかの例示を使い果たしていないのであれば、ファインチューニングやRAGのインフラに投資する準備はできていません。
意思決定フロー
ユースケースを以下のチェックリストに照らし合わせてください。最初の「はい」で停止し、その手法を適用してください。複数の条件に当てはまる場合は、それらを組み合わせて使用してください。
- 明確な指示とfew-shotの例示を用いたプロンプティングを試しましたか? いいえ → プロンプティングから始めてください。
- 失敗の原因は、事実の欠如や情報の古さ、あるいはソースの引用が必要なことによるものですか? はい → RAGレイヤーを追加してください。
- 失敗の原因は、スタイルやフォーマットの一貫性のなさ、あるいは高スループットで反復可能な出力の必要性によるものですか? はい → モデルをファインチューニングしてください。
知識と振る舞いの両方のギャップが存在する場合は、RAGとファインチューニングを組み合わせてください。まず正しい事実を検索し、次にファインチューニングされたモデルに、それらを望ましいスタイルで出力させます。
成功の測定
「感覚的な判断」に頼ってはいけません。主要な入力と期待される出力を網羅した、小規模で代表的な評価セットを作成してください。プロンプトのみ、プロンプト + RAG、プロンプト + ファインチューニング、あるいはフルスタックといった、各候補となるソリューションに対して同じ評価セットを実行します。そして、正解率、引用の質、トークンコスト、およびレイテンシを比較します。データを見れば、どのレイヤーが真の価値をもたらし、どのレイヤーが不要なオーバーヘッドであるかが明らかになります。
早い段階で適切な手段を選択することで、時間、コスト、そしてフラストレーションを節約できます。まずはプロンプトから始め、事実関係がボトルネックになったら検索(Retrieval)を追加し、振る舞いがボトルネックになったらファインチューニングを行います。計測と反復を繰り返すことで、間違った問題に対してGPUパワーを投入してしまうという、よくある落とし穴を避けることができるでしょう。
