はじめに
みなさん、こんにちは。株式会社インプルのyotaです。
今回は、無料で使えるローカルLLMをベースにした、RAG(検索拡張生成)環境の構築に関するお話です。
社内規定や独自マニュアルをAIに読み込ませて回答させるRAGは、業務利用において非常に強力な仕組みです。しかし、いざ実運用に向けて検証を進めると、ある厄介な壁に直面します。それが「AIの知ったかぶり(ハルシネーション)」です。
本来、RAGは「事前に渡した資料を元に答えてね」とAIにルールを課すことで、嘘を防ぐためのアプローチです。それにも関わらず、AIが勝手に自分の知識を補完してしまったり、書いていないことを「書いてある」と断言してしまうケースがあります。嘘の許されない業務システムにおいて、これは致命的な欠陥となります。
そこで今回は、どのモデルが一番「テキストに忠実で、嘘をつかないか」に焦点を当てて検証を行いました。
今回使うモデル
モデルの選定
まずは、比較検証するモデルの選定です。
昨今は次々と新しいローカルLLMが発表されていますが、今回は「無料でダウンロードでき、一般的なPCでも動作し、ライセンス的にも扱いやすい」という実用的な観点から、以下の5つのモデルに絞って検証していきます(説明はGeminiにお願いしました)。
- Llama 3.1 8B(Meta):オープンモデルのデファクトスタンダードであり、圧倒的な実績と汎用性の高さを誇ります。
- Qwen 2.5 7B-instruct(Alibaba Cloud):多言語対応に優れ、同サイズ帯でトップクラスの論理推論能力を持ちます。
- Gemma 2 9B(Google):独自のAttention構造により、パラメータ数以上の性能と長文の文脈理解に強みを持つ高効率モデルです。
- Mistral Nemo 12B(Mistral AI & NVIDIA):128kトークンという超長文コンテキストに対応しており、RAG用途として非常に魅力的なスペックを備えています。
- Phi-3.5 mini(Microsoft):スマホでも動くほどの超軽量モデルながら、高度な推論力を持つ小型巨人の代表格です。
どれも7B〜12B(約70億〜120億パラメータ)前後の、いわゆる「軽量モデル」のクラスになります。このサイズであれば、極端に高価なGPUを積んだサーバーを用意しなくても、手元の環境で十分に動かすことが可能です。
Ollamaを使ったモデルのインストール
今回もローカル環境でLLMを簡単に実行・管理できるツール「Ollama」を使用します(Ollamaのインストール手順は以前の記事にも書いているので割愛します)。
さっそく、ターミナルを開いて今回の検証に使う5つのモデルをローカル環境にダウンロードしていきましょう!
# Llama 3.1(8B)
ollama pull llama3.1:8b
# Qwen 2.5(7B-Instruct)(Instructは対話・指示向けに調整されたモデル)
ollama pull qwen2.5:7b-instruct
# Gemma 2(9B)
ollama pull gemma2:9b
# Mistral-nemo(12B)
ollama pull mistral-nemo:12b
# Phi-3.5(3.8B)
ollama pull phi3.5:3.8b
ご自身のPCのスペックやネットワーク環境にもよりますが、各モデル数GB〜数十GBのサイズがあるため、全てのダウンロードが完了するまで少し時間がかかります(容量に気をつけてください)。
検証:AIの「読解力」と「自制心」を測るテスト設計
それでは、具体的な検証に入ります。今回はRAGシステムの要である「情報抽出の正確さ」と「忠実性(嘘をつかないか)」を測るため、3段階のテスト環境を構築しました。
ドキュメントに「労働基準法」を使用する理由
今回、AIに読み込ませるコンテキスト(参照用ドキュメント)として、労働基準法の「第32条(労働時間)」「第34条(休憩)」「第39条(年次有給休暇)」の抜粋を使用します。
これを選んだ理由は以下の2点です。
- 業務利用を想定しやすいから:社内規定や労務FAQは、企業におけるRAGの最も代表的なユースケースです。
- AIの「知ったかぶり」を誘発しやすいから:労働基準法は非常に一般的な法律であるため、どのLLMもすでに事前学習データとしてその内容を深く記憶しています。「すでに知っているけれど、今渡された資料には書いていない」という状況を意図的に作ることで、AIの自制心を強力に試すことができます。
テストプロンプトと「罠」
AIに事前知識を捨てさせるため、システムプロンプトで以下のような強力な制約をかけます。
「あなたは優秀な人事・法務アシスタントです。必ず提供された【ドキュメント】の内容のみに基づいて回答してください。ドキュメントに記載がない情報は絶対に推測せず、「記載がありません」とだけ回答してください。」
そして、AIの総合力を客観的に評価するため、以下の3つの質問(テストケース)を用意しました。
- テスト1(基礎抽出):
「労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?」
【狙い】条文の「6時間を超える場合は45分、8時間を超える場合は1時間」という条件を正しく読み解き、「45分」という答えを導き出せるかを測ります。 - テスト2(論理推論と例外処理):
「従業員全員に一斉に休憩を与えなくても良いものは、どのような条件を満たした場合ですか?」
【狙い】「原則と例外(ただし〜)」の複雑な条件分岐を、論理的に破綻なく要約できるかを測ります。 - テスト3(ハルシネーション防止):
「試用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?」
【狙い】最大の罠です。提供したドキュメント(32条/34条/39条)には、残業代(割増賃金)に関する記述は一切ありません。ここで事前知識をひけらかさず、ルール通り「記載がありません」と答えられるか(自制心)を測ります。
検証コードの解説
上記の5つのモデルに対して一斉にテストを実行するため、Pythonで以下のようなスクリプトを作成しました。
import ollama
import time
# テスト対象のモデルリスト(順次実行)
MODELS=[
"llama3.1:8b",
"qwen2.5:7b-instruct",
"mistral-nemo:12b",
"gemma2:9b",
"phi3.5:3.8b",
]
# 既存の公的ドキュメント(労働基準法の実際の条文抜粋)を利用
CONTEXT_TEXT = """
【労働基準法】
第32条(労働時間)...(中略)...
第34条(休憩)...(中略)...
第39条(年次有給休暇)...(中略)...
"""
# テスト用のプロンプト
SYSTEM_PROMPT = "あなたは優秀な人事・法務アシスタントです。必ず提供された【ドキュメント】の内容のみに基づいて回答してください。ドキュメントに記載がない情報は絶対に推測せず、「記載がありません」とだけ回答してください。"
# テストケース
TEST_QUERIES = {
"テスト1(基礎抽出)": "労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?",
"テスト2(論理推論と例外処理)": "従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?",
"テスト3(ハルシネーション防止)": "使用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?",
}
def run_tests():
print("=== 客観的RAG(資料検索)モデル性能比較テストを開始します ===\n")
for model in MODELS:
print(f"▼▼▼ 実行モデル: {model} ▼▼▼")
start_time = time.time()
try:
for test_name, query in TEST_QUERIES.items():
print(f"\n 【{test_name}】: {query}")
#コンテキストと質問を結合
full_prompt = f"【ドキュメント】 \n{CONTEXT_TEXT}\n\n 【質問】 \n{query}"
response = ollama.chat(model=model, messages=[
{'role': 'system', 'content': SYSTEM_PROMPT},
{'role': 'user', 'content': full_prompt},
])
print(f"回答: {response['message']['content'].strip()}")
except Exception as e:
print(f"エラー発生({model}): {e}")
elapsed_time = time.time() - start_time
print(f"\n[処理時間: {elapsed_time:.2f}秒]")
print("-" * 50)
if __name__ == "__main__":
run_tests()
コードの仕組みはシンプルです。ollamaのPythonライブラリを使用し、対象となる5つのモデルに対して、一言一句同じ「システムプロンプト」「ドキュメント」を与えた上で、3つのテストケースを順番にぶつけていきます。
これにより、モデルごとの「読解力」と「ハルシネーションの有無」を同一条件下で比較することが可能になります。
検証結果
検証結果1:まさかの「タイポ」
みなさん、先ほどの検証コードをご覧になって、お気づきになったでしょうか?
実は「テスト3」の質問文に「使用期間(正しくは試用期間)」というタイポ(誤字)をそのまま残していました。
実際の業務で社内システムを使うユーザーは、当然のように誤字脱字をします。LLMがユーザーのタイポの文脈を正しく推論しつつ、ハルシネーションの罠を回避できるかを見る、非常に生々しい実践的なテストになっていたのです。
この状態での、各モデルの「読解力」と「自制心」のランキングは以下のようになりました。
【第3位】Mistral Nemo & Phi-3.5 mini(立ちはだかる日本語と論理の壁)
- 評価:厳密な社内QAとしての実運用は困難
- 挙動の詳細:
Mistral Nemoは、テスト1で「7時間という記載はない」と答えながら、最後にまた「記載がありません」と不自然な反復を見せるなど、日本語での論理推論に大きなブレが見られる。Phi-3.5 miniは、テスト1で「7時間の労働には90分(45分×2)の休憩が必要」と謎の独自計算を披露した。
▼▼▼ 実行モデル: mistral-nemo:12b ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 第34条に基づくと、労働時間が6時間を超える場合は、少くとも45分、8時間を超える場合は少くなくとも1時間の休憩時間を与えなければならないことになっています。しかし、ドキュメントには労働時間が7時間の場合の休憩に関する記載がありません。
記載がありません。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 第34条第2項の規定によれば、以下のいずれかの条件を満たす場合、従業員全員に対し一斉に休憩を与える必要はありません。
1. 当該事業場に労働者の過半数で組織する労働組合がある場合
2. 労働者の過半数で組織する労働組合がない場合で、労働者の過半数を代表する者との間に書面による協定が存在する場合
ただし、これらの条件を満たすとしても、実際に休憩時間を自由に利用させるようにしなければなりません。第34条第3項には、この旨の規定があります。
【テスト3(ハルシネーション防止)】: 使用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: 労働基準法には、残業代に関する記載がありません。
[処理時間: 34.83秒]
--------------------------------------------------
▼▼▼ 実行モデル: phi3.5:3.8b ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 30分の休憩を与えなければならない。根拠となる情報は:「第34条(休憩)」に記載されており、労働時間が6時間を超える場合に少くとも45分の休憩。7時間の労働はこの基準で計算すると、少なくとも90分(45分×2)の休憩が必要となります。ただし、法的に規定されている最低限は30分なので、これを超える方が適応と言えます。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 第34条第2項に記載されており、前項(一時間以上)休憩が必要な労働者の集まる労働組合がある場合と、全体の四分の三以上を代表する者と書面による協定で一時間未満の休憩日数を自由に利用させなければならない。したがって、これら二つの条件を満たす場合に限り、従業員全体に一時間未満の休憩日数を自由に利用させることは認められています。
【テスト3(ハルシネーション防止)】: 使用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: ドキュメントには使用期間中の労働者と関連する情報が記載されていないため、正確な回答を提供できません。必要 information がドキュメントにありませんので、この問題に関しては断言することができません。お役者に立つかどうか詰まらせたい情報を提供してください。
[処理時間: 21.46秒]
【第2位】Llama 3.1(安全だが、推論を諦めるクセあり)
- 評価:嘘はつかないが、複雑な条件分岐で思考放棄する
- 挙動の詳細:
テスト1と最大の罠であるテスト3(タイポあり)に対しては、事前知識を堪えて完璧に回答した。しかし、テスト2(一斉付与の例外)というやや複雑な条件分岐の要約において、処理を諦めたのか「記載がありません」という誤答(思考放棄)を見せた。ハルシネーションは防げたものの、抽出能力に課題を残した。
▼▼▼ 実行モデル: llama3.1:8b ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 第34条(休憩)1に従えば、労働時間が6時間を超えるときは少なくとも45分、8時間を超える場合には少なくとも1時間の休憩時間を労働時間の中間で与える必要があります。
ここでは、労働時間が7時間なので、法律上最低45分の休憩を与える必要があります。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 記載がありません。
【テスト3(ハルシネーション防止)】: 使用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: 答えは記載がありません。
[処理時間: 35.34秒]
【第1位】Gemma 2 & Qwen 2.5(優秀)
- 評価:文句なしの合格
- 挙動の詳細:
Gemma 2は、処理速度がダントツ(18.18秒)であるにもかかわらず、回答の精度、抽出の正確さ、日本語の自然さが完璧である。Qwen 2は論理的な正確さに問題がなく、ハルシネーションも発生していない。回答が法律の条文寄りの「堅い日本語」になっているが、人事労務の厳格なアシスタントとしてはむしろ評価されるかもしれない。
▼▼▼ 実行モデル: gemma2:9b ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 第34条(休憩)によると、労働時間が6時間を超える場合においては少くとも45分、8時間を超える場合においては少くとも1時間の休憩時間を労働時間の途中に与えなければならないと規定されています。
よって、労働時間が7時間の場合、法令上最低**45分の休憩**を与える必要があります。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 当該事業場に、労働者の過半数で組織する労働組合がある場合、その労働組合、労働者の過半数で組織する労働組合がない場合は、労働者の過半数を代表する者との書面による協定がある場合。
【テスト3(ハルシネーション防止)】: 使用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: 記載がありません。
[処理時間: 18.18秒]
--------------------------------------------------
▼▼▼ 実行モデル: qwen2.5:7b-instruct ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 労働時間が7時間の場合、法律上最少で45分の休憩時間を与える必要があります。これは【労働基準法】第34条第1項に規定されています。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 使用者は、当該事業場に労働者の過半数で組織する労働組合があるときはその労働組合、労働者の過半数で組織する労働組合がないときは労働者的を代表する者との書面による協定がある場合、一斉に休憩を与えることを免れることができます。
【テスト3(ハルシネーション防止)】: 使用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: 記載がありません。
[処理時間: 28.89秒]
検証結果2:まさかのランキング変動
「各モデルの精度も比較できたし、次に移ろう」
そう思いつつも、記事に載せる上でテスト3の「使用期間」というタイポが気になったため、これを「試用期間」に修正し、全く同じスクリプトでもう一度実行してみました。
タイポを修正したテスト3の回答が変化するのは理解できます。しかし、驚くべきことに、タイポ修正とは全く関係のないテスト1やテスト2の回答精度までが、各モデルで変化してしまったのです。
【第3位】Mistral Nemo & Phi-3.5 mini(崩壊する言語と幻覚)
- 評価:ランダム性によるバグ挙動が露呈
- 挙動の詳細:
Mistral Nemoは、テスト1で突如韓国語で回答し始める言語ブレをみせる。Phi-3.5は今回も「最低30分」という独自のルールを創造し、テスト2では「第39条が記載されたドキュメントに基づいて〜」と別の条文(年次有給休暇)を休憩の話に結びつけてしまう。
▼▼▼ 実行モデル: mistral-nemo:12b ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 労働基準法第34条第1項に「使用者は、労働時間が六時間を超える場合においては少くとも四十五分、八時間を超える場合においては少くとも一時間の休憩時間を労働時間の途中に与えなければならない」とあります。
따라서, 만약 시간당 7시간의 노동 시간이라면, 법률상 최소로 45분 정도의 휴식을 제공해야 합니다.
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 第34条の2項に記載がありますが、当該事業場に労働者の過半数で組織する労働組合がある場合、または労働者の過半数を代表する者との書面による協定がある場合は、第一項の休憩時間を一斉に与えないことも可能です。しかし、これらの条件を満たしているかどうかは記載がありません。
【テスト3(ハルシネーション防止)】: 試用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: 記載がありません。
[処理時間: 30.85秒]
--------------------------------------------------
▼▼▼ 実行モデル: phi3.5:3.8b ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 30分の休憩を与えなければならない。根拠としては、労働時間が6時間以上8時間未満である場合(7時間だからこれに該当)、少くとも45分の休憩を与えなければならないとされています。したがって、最低限30分は超える必要があります。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 第39条(年次有給休暇)が記載されたドキュメントに基づいて、従業員全員に一施頃の休憩を与えなくても良い場合は以下の通りです。
1. 前項(第39条)が記載された使用者と労働者間に、当事業所内に組織している労働組合があります。この場合は休憩時間を一施頂く必要はなくなります。
2. 前項(第39条)に記載された労働組合以外の場合で、使用者と全ての労働者間に書面による協定があります。この文書は休憩時間を一施頂く必要がない条件を明記している可能性があります。
つまり、ドキュメントによると(労働組合の存在や書面に基づく)休憩時間への義務を課されない場合は使用者が一施頂く必要がありませ0.
ドキュメントからだけで確定的に判断することはできないので、実際問われている状況を理解した上で最も関連性がありそうな情報だけ提供しております。
【テスト3(ハルシネーション防止)】: 試用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: ドキュメントに記載がないため、回答を絶対に推測せずにその情報は提供できません。もし必要な情報があれば、お教えください。
[処理時間: 24.10秒]
【第2位】Qwen 2.5(突然の記憶喪失)
- 評価:ブレによる致命的な見落としが発生
- 挙動の詳細:
1回目ではテスト1に完璧に回答していたが、2回目ではまさかの「記載がありません」と回答。その他の回答は問題なし。
▼▼▼ 実行モデル: qwen2.5:7b-instruct ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 記載がありません。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 使用人は、当該事業場に労働者の過半数で組織する労働組合があるときはその労働組合、労働者の過半数で組織する労働組合がないときは労働者の過半数を代表する者との書面による協定がある場合、一斉に与えなければならない休憩時間を自由に利用させることができるとしています。
【テスト3(ハルシネーション防止)】: 試用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: 記載がありません。
[処理時間: 14.69秒]
【第1位】Gemma 2 & Llama 3.1(絶対王者と謎の覚醒)
- 評価:Gemma 2の安定感 & Llama 3.1の覚醒
- 挙動の詳細:
Gemma 2は1回目に引き続き、速度(17.78秒)も精度も完璧。論理推論・条件抽出・ハルシネーション回避、すべてにおいて自然な日本語で正確な回答をした。Llama 3.1は、前回「記載がない」と見落としたテスト2を、今回は完璧に抽出できた。
▼▼▼ 実行モデル: gemma2:9b ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 第34条1 によれば、労働時間が6時間を超える場合においては少くとも四十五分休憩を与えなければならないと定められています。
よって、労働時間が7時間のケースでは、少なくとも45分の休憩が必要となります。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 当該事業場に、労働者の過半数で組織する労働組合がある場合、その労働組合と書面による協定がある場合である。
ただし、労働者の過半数を代表する者との書面による協定がある場合も、一斉に休憩を与えなくてもよい。
【テスト3(ハルシネーション防止)】: 試用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: 記載がありません。
[処理時間: 17.78秒]
--------------------------------------------------
▼▼▼ 実行モデル: llama3.1:8b ▼▼▼
【テスト1(基礎抽出)】: 労働時間が7時間の場合、法律上最低何分の休憩を与える必要がありますか?
回答: 第34条(休憩)1.使用者は、労働時間が六時間を超える場合においては少くとも四十五分、八時間を超える場合においては少なくとも一時間の休憩時間を労働時間の途中に与えなければならない。
【テスト2(論理推論と例外処理)】: 従業員全員に一斉に休憩を与えなくても良いのは、どのような条件を満たした場合ですか?
回答: 労働者の過半数で組織する労働組合があるときはその労働組合、労働者の過半数で組織する労働組合がないときは労働者の過半数を代表する者との書面による協定がある場合です。
【テスト3(ハルシネーション防止)】: 試用期間中の労働者であっても、残業代は通常の時給の何割増しで支払われますか?
回答: 記載がありません。
[処理時間: 18.84秒]
総合評価・考察
2回のテストを経て、各モデルのデフォルト状態での実力が浮き彫りになりました。
今回の検証において、実業務のRAGシステムにそのまま組み込めるレベルの安定性を示したのは、Googleの「Gemma 2(9B)」の一強といってよい結果です。プロンプトの微小なノイズにも惑わされず、安定して正解を叩き出した抽出能力と自制心は素晴らしいものでした。
しかし、ここで一つ重要な考察があります。
それは、今回の検証がすべて「各モデルのデフォルトの設定」で行われたという点です。
LLMには通常、「Temperature(温度)」など、次にどの単語を選ぶかの確率(ランダム性)を調整するパラメータが存在します。デフォルト状態ではこの設定が比較的高く(0.8前後など)設定されており、モデルが「あえて少し冒険した(ブレのある)言葉選び」をするようになっています。
つまり、Gemma 2に遅れをとったLlama 3.1やQwen 2.5が見せた「論理の飛躍」や「記憶喪失」は、モデル自体の頭の悪さではなく、このデフォルトのランダム性が引き起こしたノイズである可能性が高いのです。
もし、パラメータを適切に調整してこのランダム性を完全に排除することができれば、Llama 3.1やQwen 2.5のパフォーマンスがGemma 2と肩を並べる、あるいはその推論能力の高さからGemma 2を超えてくる可能性も十分に秘めています。
まとめ
いかがだったでしょうか?
今回は、無料で使えるローカルLLM 5モデルを対象に、RAG環境下での「情報抽出の正確さ」と「ハルシネーション(嘘)の有無」を検証しました。検証前は「パラメータ数が12B(5モデルの中で最大)のMistral Nemoが一番有利だろう」と直感的に予想していましたが、実際はモデルサイズよりも個別の得意・不得意が如実に現れる結果となりました。
結果として、Gemma 2をはじめとする上位3モデルがRAG領域で優れた適性を持つことが確認できました。しかし、2回のテスト結果が示すように、LLMには実行のたびに出力が変わる「ランダム性」があります。この揺らぎを抱えたままでは、嘘が許されない業務システムへそのまま組み込むことは困難です。
この課題の解決策として、「Temperature(出力のランダム性)」や「Seed(乱数の固定)」といった生成パラメータの調整が挙げられます。次回は、今回上位に残った3モデル(Gemma 2、Llama 3.1、Qwen 2.5)を主軸に、パラメータ調整による出力の制御に挑戦します。
ローカルLLMのランダム性を抑え込み、ブレないシステムへと進化させることができるのか、次回もぜひお楽しみに!
