サブクエリ分解戦略
複雑なマルチホップ質問をサブクエリに分割し、それぞれに回答してから最終回答を合成します。
「サブクエリ分解戦略」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
単一ホップで失敗する場合
複数回の検索が必要な質問もあります:
「2022 年の Apple と 2023 年の Microsoft の売上を比較してください。」
類似度検索を 1 回行うだけでは両方の事実を取得できないため、2 つのサブクエリが必要です。
サブクエリ分解
LlamaIndex の SubQuestionQueryEngine は、質問をサブクエリに分割し、それぞれに回答してから、回答を統合します:
from llama_index.core.query_engine import SubQuestionQueryEngine
from llama_index.core.tools import QueryEngineTool, ToolMetadata
query_engine_tools = [
QueryEngineTool(
query_engine=apple_index.as_query_engine(),
metadata=ToolMetadata(name='apple', description='Financial data for Apple Inc.')
),
QueryEngineTool(
query_engine=msft_index.as_query_engine(),
metadata=ToolMetadata(name='microsoft', description='Financial data for Microsoft Corp.')
)
]
engine = SubQuestionQueryEngine.from_defaults(query_engine_tools=query_engine_tools)
response = engine.query('Compare 2022 revenue of Apple vs 2023 revenue of Microsoft')仕組み
- LLM が質問を分析します
- LLM がサブクエリを生成し、それぞれをツールに割り当てます
- 各サブクエリを並列に実行します
- LLM がサブクエリの回答から最終回答を統合します
サブクエリの確認
エンジンが生成したサブクエリを確認できます:
response = engine.query('Compare X and Y')
for sq in response.metadata.get('sub_qa', []):
print(sq.sub_q.sub_question, '->', sq.answer)サブクエリを使う場面
- 比較クエリ(X 対 Y)
- 複数ソースからの集約
- 複数の異なる事実を含む質問
使わない場面
- 単純な Q&A — 遅延とコストが増加します
- 単一ドキュメントのコンテキスト
- 分解してもメリットがないタスク
LLM によるルーティング
Sub-Question Engine は RouterQueryEngine と組み合わせて、まずどのインデックスの集合を検索するかを決定できます:
from llama_index.core.query_engine import RouterQueryEngine
router = RouterQueryEngine.from_defaults(query_engine_tools=query_engine_tools)
# Routes 'apple revenue' to apple index, 'msft margins' to msft, etc.コーディングエージェントのサブクエリ
コードを書くエージェントにとって、サブクエリは手順を計画する方法です:
「REST API を構築する」→ サブクエリ:モデルを設計、サブクエリ:CRUD ハンドラーを作成、サブクエリ:認証を追加
コストへの影響
サブクエリでは、1 回ではなく N 回のサブクエリを実行します。それぞれで LLM の呼び出しと検索が発生します。予算を適切に設定してください。単一ホップの場合より 3〜4 倍高コストになります。
ReAct との比較
サブクエリは事前に計画を立てます。ReAct(次のコースで扱います)は手順を 1 つずつ進めます。あらかじめ分解できるクエリではサブクエリの方が速く、探索的なタスクでは ReAct の方が柔軟に対応できます。
組み合わせ:ReAct + サブクエリツール
最も柔軟な方法は、サブクエリエンジンをツールとして持つ ReAct エージェントです。それぞれの「ツール呼び出し」自体が、多数のサブクエリに分解できます。
サブクエリ品質の評価
LLM が適切なサブクエリを生成しているかを追跡します。トレースを確認しないと、分解の失敗をデバッグするのは困難です。
分解のユースケース
サブクエリへの分解が最も役立つのは、どのような質問でしょうか。
復習
サブクエリへの分解により、1 つの複雑なクエリを複数の単純なクエリに変換できます。コストは高くなりますが、比較や複数ソースに関する質問では精度が大幅に向上します。
よくある質問
「サブクエリ分解戦略」レッスンは無料ですか?
はい。「サブクエリ分解戦略」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「サブクエリ分解戦略」で何を学びますか?
複雑なマルチホップ質問をサブクエリに分割し、それぞれに回答してから最終回答を合成します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「サブクエリ分解戦略」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。