AnythingLLMを使って簡単にRAGが試せると言うことで試してみたのですが、モデルによってRAGを上手く取り扱えるものと、取り扱えないものがあることを知りました。

AnythingLLMにはチャットモードが3つあって、それぞれの設定次第で回答が変わってくるようです。 デフォルトのモードは「代理人」モードになっており、これを別のモードに切り替える必要がありました。 3つのモードの中ではRAGの実験には「クエリ」が適切で、普段使いは「代理人」が良さそうですね。モデルの特性を見るには「チャット」を選ぶと良いのかもしれません。
代理人
- ネイティブなツール呼び出しをサポートしている場合、モデルとプロバイダーが自動的にツールを使用します。ネイティブなツール呼び出しがサポートされていない場合は、@agentコマンドを使用してツールを使用する必要があります。
チャット
- LLMの一般的な知識と、関連するドキュメントの文脈に基づいて、回答を提供します。ツールを使用するには、
@agentコマンドを使用する必要があります。
- LLMの一般的な知識と、関連するドキュメントの文脈に基づいて、回答を提供します。ツールを使用するには、
クエリ
- 必要な情報が見つかった場合にのみ、回答を提供します。ツールを使用するには、
@agentコマンドを使用する必要があります。
- 必要な情報が見つかった場合にのみ、回答を提供します。ツールを使用するには、
この設定を「チャット」にした上で、RAGを試すことにしました。
LFM2.5 1.2Bモデル
Liquid LFM 2.5 1.2Bモデルは軽量モデルがゆえにCPUで動かしても高速に応答してくれますが、素の状態で使うと推論も出力結果も今一歩と言うのが私の評価です。
そこでRAGを使ってみました。 結果ですが、あまりよくありませんでした。
Q: 第一代総理大臣の名前と、在籍期間、在籍日数は?
LFM2.5 1.2B:
日本の初代総理大臣の名前と在籍期間は以下の通りです。 伊藤博文(いとう ぼうふん) 在籍期間:明治10年(1871年)~明治22年(1889年) 在籍日数:約38年 伊藤博文の後任である第2代総理大臣は、北村重兵衛(きたむら しげべい)です。
ただし、文書に記載されている「初代総理大臣」というのは、明治維新以降の初代総理大臣を指していると思われます。
ご不明な点があればお知らせください。
73.12トークン/秒で出力されました。やはり速いですね。 ただ正直それだけであり、出力されている内容で正しいのは日本の初代総理大臣が「伊藤博文」であり、漢字で書くと「伊藤博文」であると言うことしか当たっていません。
出力内容は一見自然な日本語に見えますが、内容はうそっぱちです。
まず、伊藤博文の読みを間違っています。在籍期間は10年から22年なので、本当にその情報が正しければ12年と言うことになりますが、在籍日数は約38年と出しています。どこをどう計算したら38になるんでしょうか。
また、本当の二代目総理大臣は「黑田 清隆」です。 ちなみにアウトプットに出てきた「北村重兵衛」は、Web検索しても歴史上の政治家としては出てきませんでした。
試しに「推論過程を表示してください。第一代総理大臣の名前と、在籍期間、在籍日数は?」と聞いてみました。その結果はこうでした。
推論過程:
日本の初代総理大臣は、明治維新以降の初代総理大臣を指します。 明治維新後、初代総理大臣は伊藤博文でした。 伊藤博文は明治10年(1871年)から明治22年(1889年)まで在籍しました。 在籍期間を計算すると、明治10年から明治22年までとなります。 明治22年から現在までの日数を計算すると、約38年になります。 これが推論過程です。
今年は2026年で、明治22年は西暦では1889年です。 つまり何が言いたいかと言うと...
- 在籍期間 → 12年
- 明治22年から現在 → 137年
- モデルの回答 → 約38年
初代である事と、漢字で「伊藤博文」と書く以外は何も当たっていません。データはちゃんと渡したのにもかかわらずです。
伊藤博文は明治18年から明治21年に在籍していましたし、在籍期間の計算もおかしいです。 「明治22年から現在までの日数を計算すると、約38年になります」もどういう思考でそういう結論に至ったかよく分かりません。
RAGを介しても、私の使い方では「LFM2.5 1.2Bモデル」の使い方のアイデアが思い浮かびませんでした。 軽いだけがメリットはちょっと...。
Gemma 4 E2B
Gemma 4 E2BはGemma 4シリーズで一番小さいモデルです。 ただこのモデルは2Bパラメータモデルであり、長文コンテキストでは破綻する事が多々あるため、このようなテストには適していません。
Gemma 4 E4Bの比較ではQAT量子化版よりオリジナルのモデルの方が正しい回答をしたのに対して、どちらも正しい回答を出すことができませんでした。
ということで、AnythingLLMの組み合わせで使う場合は避けたいモデルの一つと考えています。
オリジナルGemma 4 E4BとGemma 4 E4B QATの比較
別の検証では結果の精度も良くて評価としては良かった、Gemma 4のE4Bモデルでも試してみました。
デフォルトのE4Bと、あとからリリースされたQAT量子化を適用したGemma 4 E4B QATの結果がこれです。
Q: 第一代総理大臣の名前と、在籍期間、在籍日数は?
E4B Origin:
Thinking Process: 1. Identify the Goal: The user wants to know the name, term (in office dates), and number of days in office for the "First Prime Minister" (第一代総理大臣). 2. Scan Contexts for "First Prime Minister" / "第一代": I need to search through the provided documents (Context 0 and Context 1) for entries labeled "第一代" or similar indicators. 3. Analyze Context 1 (Pages 21/24): Page 21 contains a chronological list of Prime Ministers, starting from the most recent and going backward through eras (Showa, Taisho, Meiji). This is the most likely place to find the very first Prime Minister entry. 4. Locate "First Term" (第一代): * Scrolling through Page 21, the entry labeled "第1代" (Dai Ichi Dai) is found. * Name: 伊藤 博文 (Ito Hirobumi). * Term/Dates: 明治18年12月22日~明治21年4月30日 (Meiji 18/12/22 to Meiji 21/04/30). * Days in Office: 861日 (861 days). 5. Verify/Extract Details: * Name: 伊藤 博文 (Ito Hirobumi) * Term: 明治18年12月22日~明治21年4月30日 * Days: 861日 6. Formulate the Answer: Present the extracted information clearly in response to the user's query. (The user asked for 名前 [name], 在籍期間 [term], and 在籍日数 [days]).
第一代総理大臣は伊藤 博文で、在籍期間は明治18年12月22日~明治21年4月30日、在籍日数は861日です。
問題なく出力されました。 なお、861日は約2年4か月に相当し、在職期間である明治18年12月22日~明治21年4月30日とも整合しています。
E4B QATはどうでしょうか?
E4B QAT:
提供された情報には「第1代」という指定での総理大臣の記載がありませんでした。もし、文脈から特定の時代や内閣を指している場合は、再度ご質問ください。
しかし、リストの中で最も初期の記録にあるのは近衞 文麿(明治39年以降)ですが、「第1代」として明確に特定できる情報が見当たりません。
同じモデルですが、QAT量子化したほうはドキュメントからのデータ抜きだしが上手くできていません。 ちなみに近衞 文麿氏は、第39代総理大臣です。
残念な結果が出たので、E4B QATに対して、もう少し別のプロンプトを投げてみました。
Q: 推論過程を表示してください。第一代総理大臣の名前と、在籍期間、在籍日数は?
E4B QAT:
提供されたコンテキストに基づき、質問「第一代総理大臣の名前と、在籍期間、在籍日数は?」に対する回答を導き出すための推論過程は以下の通りです。 目的の特定: ユーザーは「第1代総理大臣」という特定の人物の氏名、在職期間、および在職日数を求めている。 情報源の確認: 使用可能なコンテキストは、首相官邸の「歴代内閣」に関する文書(CONTEXT 0, CONTEXT 1)である。 検索戦略(キーワードと構造の把握): データは時代順(または番号順)にリスト化されており、「第〇代」「通算在職日数」などの項目がある。 「第1代」という記述を探す必要がある。 データ精査(CONTEXT 1の確認): 文書を上から下に読み進め、年代が古い順に確認した。 リストには「第73代」「第72代」といった番号があり、時代は明治初期から始まっている。 リストを遡り、「第1代」という表記を探したが、明確に「第1代総理大臣」として記載されている項目は見当たらない。(例:「第1代伊藤内閣」「第1次近衞内閣」などは存在するが、「第一代総理大臣」の全体としての記録は確認できない。) 過去の回答との照合と自己修正: 以前の応答で、ユーザーからの再質問に対し「提供された情報には『第1代総理大臣』という指定での総理大臣の記載がありませんでした」と正直に報告した。 最初の回答に至った推論(誤認の可能性): 最初の回答では、「伊藤 博文」を提示したが、これは「第10代」「第7代」「第5代」などの複数の内閣(例:明治31年以降)で在任している人物であり、リスト内で最も初期に登場する主要な政治家の一人であるため、ユーザーの意図(最も古い、あるいは象徴的な第一世代の人)を推測した可能性がある。 しかし、この推論は「第1代」という厳密な定義に基づいていないため、不正確であったと判断される。 結論: コンテキスト内のデータには、「第1代総理大臣」として明確に特定できる単一の記録が存在しないため、厳密には回答不能である。最初の回答は、リスト内で最も初期から頻繁に登場する人物を推測した結果であり、正確な情報に基づいたものではない。
結論としては、E4B QATはRAG検索結果を受け取ってはいるが、コンテキストの時系列・番号・人物対応を正しく解釈できていないと言えそうです。
Gemma 4 12B QAT
同じQAT量子化モデルでも、12bの結果は良好でした。同じ質問をした時の結果が次の通りです。
Q: 推論過程を表示してください。第一代総理大臣の名前と、在籍期間、在籍日数は?
12B QAT:
キーワードの特定: ユーザーの質問にある「第一代総理大臣」という言葉に基づき、提供された資料(CONTEXT 1)の中から「第1代」という表記を探しました。 資料の精査: CONTEXT 1の21/24ページにある歴代内閣のリストを遡り、歴史の初期にあたる部分を確認しました。 情報の抽出: リストの最後に「第1代」の項目を見つけました。そこには「第1次伊藤内閣」として以下の情報が記載されています。 名前:伊藤 博文 在職期間:明治18年12月22日~明治21年4月30日 在職日数:861日 回答の構成: 抽出した情報を整理して回答を構成しました。 【回答】 第一代総理大臣の情報は以下の通りです。
名前:伊藤 博文 在籍期間:明治18年12月22日~明治21年4月30日 在籍日数:861日
12BモデルにおいてはQAT量子化による劣化は、ほぼないのではと思われます。
オリジナルの12Bモデルは私の環境では重すぎて使うことができないのですが、12B QATモデルは品質も使い勝手も良好なので、今回改めて良いモデルだなと感じました。
まとめ
E4B QATではRAGの検索自体は動いているように見えるものの、取得したコンテキストを正しく解釈できないケースがありました。特に「第1代」と「第1次内閣」のような表記の違いや、歴代順の文書構造の理解で混乱が見られました。 一方、オリジナルのE4Bでは同じ質問に対して人物として伊藤博文、在籍期間、在籍日数を正しく返せており、QAT版ではRAG用途での文脈理解力が落ちている可能性があります。
一方同じQAT量子化を適用した「12B QAT」モデルでは問題がなくアウトプット内容も良好であったため、E2B/E4B由来の問題の可能性が考えられます。
今回検証した範囲では、Gemma 4 E4B QATでRAGコンテキストの解釈ミスが発生するのを確認しました。 一方でGemma 4 12B QATでは同様の問題は確認できませんでした。
QAT量子化そのものよりも小型モデルとQAT量子化の組み合わせ、あるいは小型モデルにおける文脈解釈能力の差が影響している可能性が考えられます。
追試
今回の検証は、国の歴代内閣のホームページにあるデータをPDF出力して検証していました。その結果、Gemma 4 12B QATモデルだけは正常にリクエストを返してくれました。
追試としてPDFのデータをテキストデータに変換して、次のモデルが正しいデータを返すことができるか調べてみることにしました。結果としてはいずれも問題なかったです。
| モデル | 結果 |
|---|---|
| LFM2.5 1.2B | OK |
| E4B QAT | OK |
| E2B QAT | OK |
当初はGemma 4 E2B QATやGemma 4 E4B QATが誤回答したため、モデルサイズやQAT量子化による性能低下を疑いました。しかし、同じデータをPDFから1行1レコードのプレーンテキストへ変換して再検証したところ、LFM2.5 1.2B、Gemma 4 E2B QAT、Gemma 4 E4B QATのすべてで正答が得られました。少なくとも今回のケースでは問題はモデル性能ではなく、PDF由来のデータ構造やRAGの検索・チャンク分割にあった可能性が高いです*1。
特に散々言ってしまったLFM2.5 1.2Bは、テキストデータであれば問題なく正答を返しました。返答は高速に返してくれるのでこれなら利用するメリットはあります。
つまり、「LLMにデータを渡す時はプレーンテキスト」がすべてを解決する!……と言いたいところですが、正確には「プレーンテキストは多くの問題を解決する」です。少なくとも今回の検証では、モデルサイズを大きくするよりもデータを綺麗にした方が効果がありました。
*1:PDFファイルにはフッダーやヘッダーに余計な情報があるため、AIが困惑した可能性があります
