Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】RAG vs fine-tuning vs prompt engineering

2025年09月24日に「Dev.to」が公開したITニュース「RAG vs fine-tuning vs prompt engineering」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

大規模言語モデルの回答を改善するには、質問の仕方を工夫する「プロンプトエンジニアリング」、外部情報を参照させる「RAG」、モデルを専門的に訓練する「ファインチューニング」がある。それぞれ利点と制約があり、目的に合わせ単体または組み合わせて使うことで、精度や効率を高めることができる。

出典: RAG vs fine-tuning vs prompt engineering | Dev.to公開日:

ITニュース解説

大規模言語モデル(LLM)は、私たちの言葉を理解し、様々なタトスクをこなす強力なツールだが、その出力をさらに高品質で、私たちの目的に合ったものにするためには工夫が必要になる。単に質問を投げかけるだけでなく、いくつかの異なるアプローチを組み合わせることで、より精度の高い、低コストで、迅速な応答を実現できる。この記事では、LLMの出力を改善するための主要な3つのアプローチ、すなわちプロンプトエンジニアリング、RAG(検索拡張生成)、ファインチューニングについて、それぞれの仕組み、得意なこと、苦手なこと、そしてどのような場合に使うべきかを詳しく解説する。これらはどれか一つを選べば良いというものではなく、目的や状況に応じて適切に選択し、時には組み合わせて使うことが重要だ。

まず、「プロンプトエンジニアリング」は、モデルへの入力、つまり「プロンプト」を工夫することで、モデルが持っている知識や能力を最大限に引き出す手法だ。これは、モデルそのものを変更するわけではなく、モデルに与える指示をより明確に、より効果的にすることで、モデルが既存の知識の中から適切な情報を選択し、望ましい形式で出力するように誘導する。例えば、モデルに特定の役割(「あなたはプロの翻訳家です」)を与えたり、いくつかの例(「少数ショット学習」)を示して期待する回答のスタイルを伝えたりする。また、「段階的に考えてください」のように思考プロセスを促すことで、より複雑な問題に対する推論能力を向上させることも可能だ。出力の形式をJSONなどの特定の構造に限定したり、文字数を指定したりすることもできる。このアプローチの利点は、手軽に始められ、コストも低いことだ。新しいインフラを導入する必要もなく、迅速に改善を試みることができる。しかし、モデルが元々知らない事実を追加することはできない。また、プロンプトのわずかな変更で出力が大きく変わってしまう「脆さ」があるため、一貫した高品質な出力を得るためにはプロンプトのバージョン管理やテストが欠かせない。現在のモデルの知識の範囲外の、最新の情報や特定のドメイン知識が必要な場合には限界がある。

次に、「RAG(検索拡張生成)」は、モデルに外部の最新情報や専門知識を与えることで、より正確で詳細な回答を生成させる手法だ。これは「検索」「拡張」「生成」という3つのステップで構成される。まず、ユーザーからの質問が来ると、システムは社内データベースやWeb上のドキュメント、PDFファイルなど、外部の「ドキュメント集」から関連性の高い情報を検索する。この時、ドキュメントは事前に小さな「チャンク」(断片)に分割され、それぞれの内容を数値で表現した「埋め込みベクトル」という形式で「ベクトルデータベース」に保存されている。質問も埋め込みベクトルに変換され、類似度の高いドキュメントチャンクが検索される仕組みだ。検索された情報は、そのままモデルへのプロンプトに「拡張」され、追加される。そして、拡張されたプロンプトを受け取ったLLMが、その追加情報を根拠として回答を「生成」する。この方法の大きな利点は、モデルを再訓練することなく、常に最新の、あるいは特定のドメインの知識をモデルに提供できることだ。また、回答の根拠となった情報源(どのドキュメントの、どの部分から来たか)を示すことができるため、情報の信頼性を確認しやすくなる。一方で、検索や情報の処理が追加されるため、回答を得るまでの時間がわずかに長くなる(レイテンシが増える)可能性がある。また、ベクトルデータベースや埋め込みサービスなど、追加のインフラが必要になり、運用コストも増加する。モデルが検索された情報を誤って解釈したり、それでもまだ「ハルシネーション」(もっともらしい嘘)を生成するリスクも完全に排除されるわけではないため、注意が必要だ。

最後に、「ファインチューニング」は、モデルそのものを特定のデータセットで再訓練し、モデルの内部的な知識や振る舞いを変更する手法だ。これは、モデルの「重み」と呼ばれる内部パラメーターを更新することで、特定のタスクやドメインにおいて、より専門的で一貫性のある出力を生成するようにモデルを「教育」する。例えば、自社の製品に関するQ&Aデータや、特定の書き方やトーンを模倣したテキストデータなどを用いて訓練することで、モデルはその分野の専門家のように振る舞い、特定のスタイルで一貫した回答を生成するようになる。最近では、LoRA(Low-Rank Adaptation)のような「パラメーター効率の良い手法(PEFT)」も登場し、モデル全体を再訓練するよりも少ない計算リソースでファインチューニングが可能になっている。このアプローチのメリットは、専門知識や特定の振る舞いがモデルの内部に直接組み込まれるため、推論時(回答生成時)に毎回検索を行う必要がなくなり、非常に高速で予測可能な応答が可能になることだ。また、モデルの出力を非常に高いレベルで制御できる。しかし、高品質なファインチューニングには、大量で質の高い、ラベル付けされたデータが不可欠だ。何千ものデータ例が必要になることも珍しくない。さらに、モデルの再訓練にはGPUなどの高性能な計算資源が必要となり、コストがかかる。知識を更新したい場合にはモデルを再訓練する必要があるため、メンテナンスも必要になる。また、特定のデータに特化しすぎることで、モデルが元々持っていた汎用的な能力を失ってしまう「壊滅的忘却」のリスクや、訓練データに過度に適合してしまう「過学習」のリスクもある。

これらの3つのアプローチは、それぞれ異なる目的や状況で威力を発揮する。プロンプトエンジニアリングは、低コストで迅速な改善や、出力形式の調整に適している。RAGは、最新の事実情報や大規模な外部データを取り入れたい場合に有効で、情報源の提示も可能だ。ファインチューニングは、狭い範囲で非常に高い精度や一貫性、高速な応答が必要な場合に最適だ。

実際の製品開発では、これらの手法を単独で使うことは少なく、複数組み合わせて利用することが一般的だ。例えば、企業内の法務AIエージェントを構築するケースを考えてみよう。まず、社内のポリシーや過去の判例、テンプレートといった企業固有の知識をチャンクに分割し、埋め込みベクトルとしてベクトルデータベースに保存する。これにより、RAGの基盤が整う。次に、法務文書のテンプレートや、許容される言い回しなどのデータを用いて、コアとなるモデルをファインチューニングする。これにより、モデルは社内ルールに則った専門的な文体や免責事項を自動的に盛り込む能力を獲得する。そして、ユーザーが質問をした際には、質問から関連性の高い社内知識をベクトルデータベースから検索し、さらにプロンプトエンジニアリングの手法を用いて、検索された情報と「情報源を引用せよ」「JSON形式で出力せよ」といった具体的な指示をプロンプトに加える。最後に、この拡張されたプロンプトをファインチューニング済みのモデルに入力し、回答を生成させる。生成された回答は、再度検証プロセスを通して、引用された情報と矛盾がないかチェックされ、ユーザーには回答と共に引用元が提示される。このハイブリッドなアプローチにより、迅速で、ポリシーに準拠し、最新の情報を反映し、かつ監査可能なAIエージェントが実現できるのだ。

結局のところ、どの手法を選ぶべきかという問いに対しては、「まず何がしたいか」という視点から考えるのが良い。もし、すぐにでも、低コストでLLMの出力を改善したいなら、プロンプトエンジニアリングから始めるのが一番手軽だ。もし、モデルが持っていない最新の事実や、大量の企業固有のドキュメントを扱いたいのであれば、RAGの導入を検討すべきだろう。そして、もし特定のドメインで非常に高い精度と一貫性が必要で、かつそのためのデータや計算リソースを確保できるのであれば、ファインチューニングが強力な選択肢となる。多くの場合、これらすべてを組み合わせて使うことが、複雑な現実世界の要件を満たすための最適な道となるだろう。

関連コンテンツ

関連IT用語