ナレッジベースの構築（後編）

[前編](https://qiita.com/b-wind/items/933a6f7daa70ae35cec9) のナレッジ（経済的/高品質）を使用する チャットボット を用意し、回答精度を比較してみます。

## 比較検証の仕様
* LLM が異なるチャットボットに対して、３種類の同じ質問を入力する。
* 「経済的」「高品質」の２種類のナレッジベースで確認する。
* すべての検証で、同じシステムプロンプトを使用する。

### システムプロンプト
```text
ナレッジ（コンテキスト）の内容を参照して、ユーザーからの質問に対する回答を作成してください。
関連する情報をナレッジ（コンテキスト）から得られなかった場合は、「関連する情報をナレッジ（コンテキスト）から得られませんでした。」と出力してください。
回答文は、丁寧で分かりやすい文章で作成してください。
```

### 使用する LLM
* Gemini 2.0 Flash-Lite
* Gemini 2.0 Flash
* Gemini 2.5 Flash Preview 04-17

### 入力する質問（３種類）
* 今年入社しました。毎月の給料の内訳について教えてください。
* 手当の種類と、貰える金額の両方を教えてください。
* 有給休暇は何日でしょうか？ 結婚式や葬儀などで休暇を取ることはできますか？

## 実行結果
### 経済的ナレッジベース
#### 所感
* キーワード検索 ということで、そもそも関連情報の検索精度が良くない。
質問に含まれる単語にヒットした原文を、質問の意図とは関係なく抽出してしまっている模様。
* 同じ検索結果から得られる回答も、後発で性能が上のモデルほど「人間向けのマイルドな表現」の回答文を作成しようとしているようだ。

#### ボットから出力された回答
<details>
<summary>Q. 今年入社しました。毎月の給料の内訳について教えてください。</summary>

||出力結果|
|:-:|:-|
|2.0 Lite|申し訳ありませんが、給料の内訳に関する情報は、このナレッジ（コンテキスト）からは得られませんでした。|
|2.0 Flash|申し訳ありませんが、給料の内訳に関する情報は提供されていません。 採用や異動に関する情報のみがあります。|
|2.5 Flash|関連する情報をナレッジ（コンテキスト）から得られませんでした。|
</details>

<details>
<summary>Q. 手当の種類と、貰える金額の両方を教えてください。</summary>

||出力結果|
|:-:|:-|
|2.0 Lite|技術手当と家族手当について、以下のことが分かります。<br>*   **技術手当:** 会社が指定する特定の技能・資格を有し、その職務に就く従業員に対し、会社の定める基準により支給されます。<br>*   **家族手当:** 扶養家族を有する従業員に対し、会社の定める基準により支給されます（詳細は別途定める）。<br>それぞれの金額については、会社の定める基準によるため、ナレッジ（コンテキスト）からは具体的な金額を知ることができません。|
|2.0 Flash|賃金の構成要素として、基本給と諸手当があります。<br>諸手当の種類としては、以下のものが記載されています。<br>*   家族手当<br>*   通勤手当<br>*   役職手当<br>*   技術手当<br>*   時間外勤務手当<br>*   休日勤務手当<br>*   深夜勤務手当<br>それぞれの金額については、家族手当と技術手当について、会社の定める基準により支給されると記載されていますが、具体的な金額は記載されていません。家族手当の詳細は別途定められているようです。|
|2.5 Flash|記載されている手当の種類としては、家族手当、通勤手当、役職手当、技術手当、時間外勤務手当、休日勤務手当、深夜勤務手当などがあります。<br>これらの手当について、具体的な金額の記載はありませんでした。技術手当や家族手当は、会社の定める基準により支給されると記載されています。|
</details>

<details>
<summary>Q. 有給休暇は何日でしょうか？ 結婚式や葬儀などで休暇を取ることはできますか？</summary>

||出力結果|
|:-:|:-|
|2.0 Lite|入社からの継続勤務期間と、その間の出勤率によって年次有給休暇の日数は異なります。<br>｜ 勤続期間 ｜ 付与日数 ｜<br>｜---｜---｜<br>｜ 6か月 ｜ 10日 ｜<br>｜ 1年6か月 ｜ 11日 ｜<br>｜ 2年6か月 ｜ 12日 ｜<br>｜ 3年6か月 ｜ 14日 ｜<br>｜ 4年6か月 ｜ 16日 ｜<br>｜ 5年6か月 ｜ 18日 ｜<br>｜ 6年6か月以上 ｜ 20日 ｜<br>結婚式や葬儀などの慶弔休暇については、別途休暇が定められています。詳細については、会社の規定をご確認ください。|
|2.0 Flash|年次有給休暇の日数は、勤続期間によって異なります。具体的には以下の通りです。<br>* 採用日から6か月間継続勤務し、所定労働日の8割以上出勤した場合：10日<br>* その後1年間継続勤務するごとに、所定労働日の8割以上出勤した場合：勤続期間に応じて11日～20日<br>｜ 勤続期間 ｜ 付与日数 ｜<br>｜---｜---｜<br>｜ 6か月 ｜ 10日 ｜<br>｜ 1年6か月 ｜ 11日 ｜<br>｜ 2年6か月 ｜ 12日 ｜<br>｜ 3年6か月 ｜ 14日 ｜<br>｜ 4年6か月 ｜ 16日 ｜<br>｜ 5年6か月 ｜ 18日 ｜<br>｜ 6年6か月以上 ｜ 20日 ｜<br>結婚式や葬儀などで休暇を取ることができるかどうかについては、慶弔休暇に関する規定があります。慶弔休暇については原則として無給とされています。|
|2.5 Flash|年次有給休暇の日数は、勤続期間によって異なります。<br>*   入社後6か月間継続勤務し、所定労働日の8割以上出勤した場合、10日付与されます。<br>*   その後は、継続勤務1年ごとに付与日数が増えていき、例えば勤続6年6か月以上で20日となります。<br>また、年次有給休暇のうち、年間5日の範囲で時間単位で取得できる場合があります。<br>結婚式や葬儀などで休暇を取得することについては、慶弔休暇が定められています。慶弔休暇期間中の賃金は、原則として無給となります。|
</details>


### 高品質ナレッジベース
#### 所感
* ベクトル検索の効果が出ているようで、質問に関係する情報を中心に検索出来ている模様。
* Gemini 2.0 Flash-Lite は、検索結果をそのまま回答文に用いる傾向がある。
* Gemini 2.0 Flash と Gemini 2.5 Flash Preview 04-17 は、回答結果の「まとめ」を図っていると思われる。
その結果、原文に記述されていた「表」が失われてしまった。
（Flash-Lite では「表」のまま出力された）
* Gemini 2.0 Flash と Gemini 2.5 Flash Preview 04-17 の回答精度は大きく変わらないが、Gemini 2.5 Flash の方が「人間向けの文章表現」に 若干 近いように感じる。

#### ボットから出力された回答
<details>
<summary>Q. 今年入社しました。毎月の給料の内訳について教えてください。</summary>

||出力結果|
|:-:|:-|
|2.0 Lite|毎月の給料の内訳についてですが、基本給、通勤手当が含まれます。<br>基本給は、あなたの職務内容、技能、経験、勤務成績、年齢などを考慮して決定されます。<br>通勤手当は、通勤に要する実費に相当する額を、月額50,000円を上限として支給されます。支給条件と計算方法は別途定められています。<br>**補足**<br>賃金は毎月15日に締め切り、当月25日に指定の金融機関口座へ振り込まれます。支払日が休日の場合は、その前営業日に支払われます。|
|2.0 Flash|今年入社されたとのこと、おめでとうございます。<br>給与の内訳については、この情報だけでは詳細をお伝えすることができません。ただ、以下の点については記載があります。<br>*   **基本給：** 職務内容、技能、経験、勤務成績、年齢などを考慮して個別に決定されます。<br>*   **通勤手当：** 通勤にかかる実費相当額が、月額50,000円を上限として支給されます。支給条件と計算方法は別途定められています。<br>*   **賃金の計算期間と支払日：** 毎月15日締め、当月25日に従業員指定の金融機関口座へ振り込みで支払われます。支払日が休日の場合は、その前営業日に支払われます。計算期間の途中で入社された場合は、日割り計算で支払われます。<br>詳細な内訳については、人事または給与担当部署にお問い合わせいただくのが確実です。|
|2.5 Flash|毎月の給料について、計算期間と支払日、および内訳の一部に関する情報がありますのでご説明します。<br>賃金は毎月15日に締め切って計算され、当月25日にご指定の金融機関口座へ振り込みにより支払われます。もし支払日が休日に当たる場合は、その前営業日となります。<br>給料の内訳について、以下の項目に関する情報があります。<br>- **基本給**: 本人の職務内容、技能、経験、勤務成績、年齢などを考慮して個別に決定されます。<br>- **通勤手当**: 通勤にかかる実費相当額が、月額50,000円を上限として支給されます。<br>これらの情報以外に、給料の内訳に関する全ての項目についての詳細は、提供されている情報からは確認できません。|
</details>

<details>
<summary>Q. 手当の種類と、貰える金額の両方を教えてください。</summary>

||出力結果|
|:-:|:-|
|2.0 Lite|この情報からは、以下の手当とその支給条件について把握できます。<br>*   **通勤手当:** 通勤に要する実費に相当する額を、月額50,000円を上限として支給されます。支給条件と計算方法は別途定められています。<br>*   **技術手当:** 会社が指定する特定の技能・資格を有し、その職務に就く者に対し、会社の定める基準により支給されます。<br>家族手当、役職手当、時間外勤務手当、休日勤務手当、深夜勤務手当など、他の諸手当があることも記載されていますが、それぞれの金額や支給条件についての詳細は、この情報からは分かりません。|
|2.0 Flash|賃金の構成要素として、基本給と諸手当があります。<br>諸手当には、以下のものが含まれます。<br>*   家族手当<br>*   通勤手当（月額50,000円を上限として、通勤に要する実費相当額が支給されます。支給条件及び計算方法は別途定められています。）<br>*   役職手当<br>*   技術手当（会社が指定する特定の技能・資格を有し、その職務に就く者に対し、会社の定める基準により支給されます。）<br>*   時間外勤務手当<br>*   休日勤務手当<br>*   深夜勤務手当<br>各手当の支給条件や計算方法の詳細は別途定められています。|
|2.5 Flash|お尋ねの手当の種類と金額についてご説明します。<br>記載されている手当の種類は以下の通りです。<br>*   通勤手当<br>*   家族手当<br>*   役職手当<br>*   技術手当<br>*   時間外勤務手当<br>*   休日勤務手当<br>*   深夜勤務手当<br>*   その他諸手当<br>それぞれの金額については以下の通りです。<br>*   **通勤手当**: 通勤にかかる実費に相当する額が支給され、上限は月額50,000円です。具体的な支給条件や計算方法は別途定められています。<br>*   **技術手当**: 会社が指定する特定の技能・資格を有し、その職務に就く方に対し、会社の定める基準により支給されますが、具体的な金額に関する記載はありません。<br>*   **その他の手当（家族手当、役職手当、時間外勤務手当、休日勤務手当、深夜勤務手当など）**: 金額に関する具体的な記載がありませんでした。<br>したがって、通勤手当以外については、具体的な金額の情報がございません。|
</details>

<details>
<summary>Q. 有給休暇は何日でしょうか？ 結婚式や葬儀などで休暇を取ることはできますか？</summary>

||出力結果|
|:-:|:-|
|2.0 Lite|年次有給休暇は、採用日から6か月間継続勤務し、所定労働日の8割以上出勤した従業員に対して10日付与されます。その後1年ごとに、以下のとおり勤続期間に応じた日数の年次有給休暇が付与されます。<br>｜ 勤続期間 ｜ 付与日数 ｜<br>｜---｜---｜<br>｜ 6か月 ｜ 10日 ｜<br>｜ 1年6か月 ｜ 11日 ｜<br>｜ 2年6か月 ｜ 12日 ｜<br>｜ 3年6か月 ｜ 14日 ｜<br>｜ 4年6か月 ｜ 16日 ｜<br>｜ 5年6か月 ｜ 18日 ｜<br>｜ 6年6か月以上 ｜ 20日 ｜<br>結婚や葬儀などの慶弔事の際にも休暇を取得できます。<br>*   本人が結婚したとき：5日<br>*   妻が出産したとき：2日<br>*   配偶者、子又は父母が死亡したとき：5日（喪主の場合は7日）<br>*   兄弟姉妹、祖父母、配偶者の父母が死亡したとき：3日<br>*   配偶者の兄弟姉妹が死亡したとき：1日|
|2.0 Flash|年次有給休暇は、採用日から6か月間継3続勤務し、所定労働日の8割以上出勤した従業員に対しては10日付与されます。その後は、勤続期間に応じて付与日数が増加します。<br>結婚や葬儀の際には、慶弔休暇を取得できます。本人が結婚した場合は5日、妻が出産した場合は2日、配偶者、子または父母が死亡した場合は5日（喪主の場合は7日）、兄弟姉妹、祖父母、配偶者の父母が死亡した場合は3日、配偶者の兄弟姉妹が死亡した場合は1日の慶弔休暇が付与されます（連続した日数とし、休日を含みます）。|
|2.5 Flash|年次有給休暇の日数は、お勤めいただいている期間によって異なります。例えば、採用日から6か月間継続勤務し、所定労働日の8割以上出勤された場合は10日の年次有給休暇が付与されます。その後も、勤続期間に応じて付与される日数は増えていきます。<br>結婚式や葬儀などでお休みを取得することは可能です。慶弔休暇として、ご本人が結婚された場合は5日、配偶者が出産された場合は2日、その他、ご家族などが亡くなられた場合にも、関係性に応じて1日から7日の休暇が付与されます。|
</details>

## 総評
Dify が推奨するナレッジベースの設定は「ハイブリッド検索（ベクトル検索＋キーワード検索）」方式。
「経済的（キーワード検索）」では『質問に対する的確な回答』を得るのは難しいようで、AI利用時の作業品質にも影響を与えかねない。

そのため、<font color="blue">**特別な理由が無い限り（多少 コストが生じても）ナレッジを使用する際は「ハイブリッド検索」を採用するのがベスト**</font> と考えられる。

なお、ナレッジデータの検索精度を向上させる「Rerankモデル」を採用すると、さらに回答精度が向上する可能性があり、<font color="blue">**ナレッジベースを多用する際は 「Rerankモデル」の採用も検討した方が良さそう**</font>。

## 終わりに
ある意味、予想どおりの結論でした。
* ナレッジから的確に情報を検索できるのは「ハイブリッド検索」。
* 回答文章は Gemini 2.5 Flash が一番しっくりくる。（個人の感想）

有料プランを契約しておらず 残念ながら「Gemini 2.5 Pro」は検証できませんでしたが、回答文章の「仕上がり具合」は 向上しているかもしれません。
（より 人間が理解しやすい回答文章に **まとめる力** が上がっていそう）