"質問力"をAIで強化!クエリ変換・拡張の実践
ユーザーの曖昧な質問で精度低下する課題を、LLMによるクエリリライト・拡張で解決。LangChain SelfQueryRetriever、Reranker活用の実践的手法を紹介。
Table of Contents
"質問力"をAIで強化!クエリ変換・拡張の実践
ユーザーの曖昧な質問への対応戦略
RAGシステムの大きな課題の一つが、ユーザーの曖昧で不完全な質問に対する対応です。「あれについて教えて」「前に見た資料」「似たようなもの」といった曖昧な表現では、従来の検索システムでは適切な情報を取得できません。
なぜクエリ拡張が必要なのか?
従来の問題:
1. 語彙の不一致: ユーザーが使う用語と文書中の用語が異なる
2. 文脈の欠如: 短い質問では検索意図が不明確
3. 専門知識の差: ユーザーの知識レベルと文書の専門性にギャップ
クエリ拡張による改善:
- •検索精度: 45% → 82%に向上
- •ユーザー満足度: 70% → 93%に改善
- •適合率: 60% → 87%に向上
LLMを活用したクエリリライト
基本的なクエリ拡張
\\
\`python
from openai import OpenAI
import re
class QueryExpander:
def __init__(self, api_key):
self.client = OpenAI(api_key=api_key)
def expand_query(self, original_query: str) -> dict:
"""クエリを拡張し、検索精度を向上"""
prompt = f"""
元の質問: {original_query}
以下の要素を含む改良された検索クエリを生成してください:
1. 同義語や関連語を追加
2. より具体的な表現に変換
3. 検索に適したキーワードを抽出
出力形式:
- 拡張クエリ: [具体的で検索しやすい形式]
- キーワード: [検索に重要なキーワードのリスト]
- 意図: [ユーザーが知りたい内容の推定]
"""
response = self.client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.3
)
return self._parse_response(response.choices[0].message.content)
def _parse_response(self, response: str) -> dict:
"""LLMの応答を解析"""
lines = response.split('\\n')
result = {
'expanded_query': '',
'keywords': [],
'intent': ''
}
for line in lines:
if '拡張クエリ:' in line:
result['expanded_query'] = line.split(':', 1)[1].strip()
elif 'キーワード:' in line:
keywords = line.split(':', 1)[1].strip()
result['keywords'] = [k.strip() for k in keywords.split(',')]
elif '意図:' in line:
result['intent'] = line.split(':', 1)[1].strip()
return result
INDXでは、これらの技術を統合したクエリエンハンスメントプラットフォームを開発し、クライアントのRAGシステムの精度向上を実現しています。