データフロー(文書→インデックス→検索→生成)

LlamaIndexにおける「データフロー(文書→インデックス→検索→生成)」は、LLMを用いた検索拡張生成(Retrieval-Augmented Generation, RAG)において中核をなすプロセスです。この流れは、大規模言語モデル(LLM)に外部知識を統合するための仕組みとして機能します。以下に各ステップの詳細を説明します。


1. 文書(Document)フェーズ

この段階では、ユーザーが対象とする情報源(例:PDF、Webページ、CSV、Notion、Google Docsなど)をLlamaIndexのDocumentオブジェクトとして読み込みます。

  • Documentはメタデータ(例:タイトル、日付、出典など)と本文テキストの構造を持つ。

  • 事前処理として、チャンク分割(Chunking)が行われ、長い文書が扱いやすい単位(例:数百トークン)に分割されます。


2. インデックス(Index)フェーズ

チャンク化されたテキストをもとに、効率的な検索を可能にするためのインデックス構造が生成されます。LlamaIndexは用途に応じてさまざまなインデックスタイプを提供します:

  • Vector Index(ベクトルインデックス):チャンクを埋め込みベクトルに変換し、ベクトルデータベースに格納。

  • Keyword Table Index:キーワードに基づいた逆インデックス。

  • Tree Index:階層的な木構造によるドキュメント整理。

  • List Index:順序情報を保ったリスト構造。

このフェーズでは、埋め込みモデル(例:OpenAI Embedding API、Hugging Faceモデルなど)を使ってチャンクごとにベクトル変換を行います。


3. 検索(Retrieval)フェーズ

ユーザーがクエリ(質問)を入力すると、インデックスを利用して関連するチャンク(ノード)を検索します。

  • Retrieverがインデックスを照会し、意味的に近いチャンク(Top-K)を取得。

  • 検索は埋め込みベース(類似度検索)か、キーワードベースで実施される。

  • 検索対象にフィルタやメタデータ制約を追加することも可能。


4. 生成(Generation)フェーズ

検索で取得した関連コンテンツをコンテキストとして、LLMがクエリに対する応答を生成します。

  • Query EngineがRetrieverからの結果を受け取り、プロンプトに挿入してLLMに問い合わせ。

  • Response Synthesizerが複数のチャンクから得られる情報を統合し、自然な文章で回答を作成。

  • この際、生成モデル(例:GPT-4、Claude、Mistralなど)は質問と一緒に渡された文脈に基づいて応答を返す。


補足:データフロー全体の流れまとめ

mathematica
Raw Data(生データ)  ↓(読み込み・チャンク化) DocumentNode  ↓(埋め込み生成・格納) IndexVector/Tree/Keywordなど)  ↓(類似文書検索) Retriever  ↓(プロンプト作成・LLM呼び出し) Query Engine  ↓ LLMからの応答(Answer

この一連の流れがLlamaIndexにおける「文書→インデックス→検索→生成」の典型的なデータフローです。これにより、LLMが外部知識ベースを参照しつつ、正確かつ信頼性の高い回答を生成できるようになります。

ChatGPT4o 生成日:2025/06/14