【ITニュース解説】RAG: experiments with prompting using 3 LLM's
2025年10月01日に「Dev.to」が公開したITニュース「RAG: experiments with prompting using 3 LLM's」について初心者にもわかりやすく解説しています。
ITニュース概要
RAG実験で、PDFから質問の回答を抽出するため、3つのLLMと2種のプロンプト手法を比較。高性能なLLM(qwen3)は全問正解したが、文脈窓が小さいモデルは不正確な回答が多く、LLMの性能がRAGの精度に重要と示唆された。
ITニュース解説
大規模言語モデル(LLM)は近年目覚ましい進化を遂げているが、常に完璧な情報を提供できるわけではない。特に、モデルが学習していない特定の情報や最新の情報を求められた場合、誤った情報を生成したり、まるで知っているかのようにでたらめな内容を作り出したりする「ハルシネーション」という現象が起きることがある。LLMのこのような限界を克服し、より正確で信頼性の高い回答を得るために注目されている技術が、RAG(Retrieval Augmented Generation:検索拡張生成)である。
RAGは、ユーザーからの質問に対し、まず外部の知識源(データベースや文書など)から関連情報を検索し、その検索結果をLLMに与えて回答を生成させる手法だ。これにより、LLMは自身の内部知識だけでなく、外部から提供された具体的な情報に基づいて回答するため、より事実に基づいた正確な答えを生成できるようになる。
この記事では、RAGシステムを構築し、特定のPDF文書から質問への回答を抽出する実験が行われた。この実験の目的は、プロンプト(LLMへの指示文)の与え方を変えることで、LLMがどの程度正確な回答を生成できるかを比較することだ。
実験で使われたRAGシステムのコードは、カスタマイズ性が高く、全ての処理をローカル環境で実行できるため、データのプライバシーが確保されるという特徴を持つ。これは、機密性の高い情報を扱う際に重要な要素だ。
実験に使用されたデータは、筆者が以前大学のハッカソン向けに作成した約2ページのPDF文書である。この文書は形式ばらず、主観的な感想や皮肉も含まれており、厳密な情報提供を目的としていないため、LLMにとっては内容を理解し、正確な情報を抽出することが挑戦的となるように意図的に選ばれた。このPDFはまず「チャンキング」というプロセスを経て、小さな塊に分割された。その後、それぞれの塊は「埋め込み(Embedding)」という技術を使って数値のベクトル表現に変換され、ベクトルデータベースに格納された。これにより、質問と文書内容の類似度を効率的に計算できる。
実験では、この文書の内容に関する4つの質問が用意された。質問1と2は、文書内で明確に利点や欠点が述べられていないため、LLMにとって難しいと予想された。質問3は、利点・欠点ではなく「違い」を問うことで、質問1・2よりも回答しやすいかを確認する意図があった。質問4は、文書中に明確な事実として記述されている簡単な質問として設定された。
RAGシステムの構築には、LLMアプリケーション開発のためのフレームワークであるLangChainが利用された。文書のチャンキングには、RecursiveCharacterTextSplitterが使われ、チャンクサイズは7500文字、チャンク間の重複は100文字に設定された。この重複は、情報の分断を防ぎ、関連する情報を見逃さないために重要だ。テキストの埋め込みモデルとしては、「nomic-embed-text」が採用された。
比較対象として、3つの異なるLLMが使用された。「llama2-uncensored」は比較的古いモデルで性能が劣ると予想された。一方、「mistral」と「qwen3」は比較的新しく、高性能なモデルとして知られているが、それぞれ異なる開発背景を持つ。
最初のテストでは、「プレーンなプロンプト」と呼ばれるシンプルなプロンプト戦略が用いられた。このプロンプトは、LLMに対し「提供されたコンテキストのみに基づいて質問に答え、もしコンテキストに情報がなければ、その旨を伝えるように」と指示する内容だ。
このテストの結果、各モデルの性能差が明確に現れた。「qwen3」は全ての質問に対して正確な回答を生成した。「mistral」は質問3と4には正確に答えたが、質問1と2については、内部的な思考プロセスでは正しい回答を特定できていたにもかかわらず、最終的には「十分な情報がない」と回答してしまった。これは、プロンプトの「コンテキストに情報がない場合は回答しない」という指示を過度に重視した可能性が示唆される。「llama2-uncensored」は質問1から3に対しては、文書に基づかない全くのハルシネーション(でたらめな情報)を生成し、質問4についても文書中に言及のある場所を回答したが、不正確であった。この結果から、「qwen3」が最も優れた性能を示し、「llama2-uncensored」が最も低い性能であることがわかった。
次に、「5つの代替質問を生成する」という異なるプロンプト戦略が試された。この戦略では、まずLLMがユーザーの元の質問を5つの異なる表現に言い換える。次に、これらの代替質問それぞれを使って関連情報を検索し、得られた複数の情報と元の質問に基づいて回答を生成する。この方法は、距離ベースの検索が持つ限界、つまり質問と文書の表現が少し違うだけで関連情報を見逃してしまう可能性を低減し、より幅広い関連情報を引き出すことを目的としている。
この2回目のテストの結果も確認された。「qwen3」はここでも全ての質問に対して正確な回答を生成し、一貫して高い性能を示した。「mistral」は最初のテストと比較して改善が見られ、多くの質問に正確に答えることができたが、質問1では利点ではない「階段が多い」という欠点まで言及したり、質問3では文書にない情報を含めたりするなど、まだ完璧ではなかった。「llama2-uncensored」は依然として低い性能に留まり、ほとんどがハルシネーションに頼っていた。
最終的な結論として、今回の実験では、2つのプロンプト戦略の間で、モデルの性能に大きな違いは現れなかった。これは、比較的新しいモデルである「qwen3」や「mistral」にとって、今回の質問が比較的容易であったためと考えられる。
特に「qwen3」は、どちらのテストでも全ての質問に完全に正確に回答し、文書にない情報を生成することもなかった。これは非常に優れた性能と言える。「mistral」はテスト1で不確実性を示したが、テスト2では改善された。しかし、まだ一部不正確な点があり、プロンプトの調整、いわゆる「プロンプトエンジニアリング」によって、さらに性能を向上させる余地があることが示唆された。
「llama2-uncensored」は、両テストを通じて質問に正しく答えることができず、ほとんどがハルシネーションに頼っていた。この低い性能の主な原因として、その「コンテキストウィンドウ」の小ささが挙げられている。コンテキストウィンドウとは、LLMが一度に処理できる情報の量を示すもので、「llama2-uncensored」が2kトークンであるのに対し、「mistral」は32kトークン、「qwen3」は40kトークンと、大きな差がある。LLMはより大きなコンテキストウィンドウを持つ方向に進化しており、これはRAGのような、大量の外部情報を参照する用途において、LLMの性能を向上させる重要な要素だと考えられる。
この実験結果は、RAGシステムを構築する際に、使用するLLMの選択が非常に重要であること、そしてプロンプトの設計や調整(プロンプトエンジニアリング)もまた、より良い結果を得るための鍵となることを示している。特に、コンテキストウィンドウの大きい新しいLLMは、RAGの性能を大きく向上させる可能性を秘めていると言えるだろう。