Hello there, ('ω')ノ
「質問したのに、うまく答えてくれない…」そんな時こそ!
RAG(検索拡張型生成)を使っていて、よくあるのがこんな状況です:
- 質問に対して、検索結果がズレている
- 必要な情報が検索されていない
- AIがちゃんと答えられない…
この多くは、「質問のまま検索に使うと精度が落ちる」ことが原因です。
そんなときに威力を発揮するのが、「質問分解」と「クエリ拡張」という2つのテクニックです!
💡 そもそもこの2つ、何が違うの?
項目 | 質問分解 | クエリ拡張 |
---|---|---|
主な目的 | 複雑な質問を分けて理解する | シンプルな質問を広げて理解する |
向いている質問 | 複数の要素が含まれる質問 | 抽象的・あいまいな質問 |
例 | 「勤怠・休暇・出張のルールを教えて」 → 3つに分ける | 「福利厚生って何がある?」→ 保険・手当・制度名などを追加 |
使い方 | 質問を細分化し、それぞれに対して検索&生成 | キーワードを増やして意味的に関連した情報を引き出す |
🔍 ① 質問分解:複雑な問いを“ばらして”解決!
✅ こんな質問に向いています:
- 「〇〇と△△の違いは何ですか?」
- 「A・B・Cについて教えてください」
- 「〇〇の手順と注意点をまとめてください」
➡ これらは一問多答型の質問。検索時には情報がばらけて命中しにくくなります。
✏️ 分解テクニック(例)
元の質問:「有給・特別休暇・育児休暇の違いを教えてください」
分解:
- 「有給休暇とは?」
- 「特別休暇とは?」
- 「育児休暇とは?」
- 「それぞれの違いを比較する」
➡ こうすると検索ヒット率が上がり、生成結果もブレにくくなります。
🧠 ② クエリ拡張:あいまいな質問を“ふくらませて”検索!
✅ こんな質問に向いています:
- 「〇〇について詳しく知りたい」
- 「△△の事例はある?」
- 「××ってどうなってるの?」
➡ 抽象的で検索エンジンやベクトルDBではうまくヒットしない場合、関連語や具体語を足して補強する必要があります。
✏️ 拡張テクニック(例)
元の質問:「福利厚生って何がある?」
拡張キーワード:「保険」「住宅手当」「時短勤務」「健康診断」「社内制度」
➡ 拡張後は、それらを含む情報をより広く・深く検索できるように!
🛠 実装の工夫(自動化する方法も!)
✅ LangChainなどでの実装ヒント
質問分解ツール(Question Decomposition Tool)
→ LLMを使って質問を要素に分解 → 各要素に対して個別にRAG処理クエリ拡張ツール(Query Expander Tool)
→ もとの質問に類語・関連語を追加してベクトル検索強化
→ 例:「FAQ補完語リスト」などを用意してもOK
✅ 自然に組み込むには?
- ユーザーが1回質問したら裏で分解・拡張して複数クエリを実行する
- 最終的な回答は統合して返す(まとめ・比較・一覧形式)
🎯 使い分けのポイントまとめ
状況 | 使うべき技術 |
---|---|
複数要素が含まれる | 質問分解 |
抽象的・ふんわりした質問 | クエリ拡張 |
両方の傾向がある | ハイブリッドで実装(分解+拡張) |
✅ RAGの検索精度を“劇的に”上げたいなら…
- 質問をどう変換して検索に使うかは、RAGの成功可否を分けるポイント
- ユーザーの質問をそのまま突っ込むだけでは精度に限界あり
- 質問分解とクエリ拡張を併用することで、「答えやすい質問」に再設計できる!
Best regards, (^^ゞ