INDX
"質問力"をAIで強化!クエリ変換・拡張の実践
ブログ
AI技術

"質問力"をAIで強化!クエリ変換・拡張の実践

ユーザーの曖昧な質問で精度低下する課題を、LLMによるクエリリライト・拡張で解決。LangChain SelfQueryRetriever、Reranker活用の実践的手法を紹介。

髙谷 謙介
COO
8

"質問力"を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システムの精度向上を実現しています。

タグ

クエリ拡張
LangChain
SelfQueryRetriever
Reranker