AIアプリケーションフレームワーク · 02

LlamaIndex 詳細解説· データ接続と RAG エンジン(AI に知識を与える)

LLM に外部知識を持たせることで、Q&A をより正確にする。

FRAMEWORK MAP
LlamaIndex 詳細解説
データ接続と RAG エンジン(AI に知識を与える)
LLM に外部知識を持たせることで、Q&A をより正確にする。
一言で要約

LlamaIndexは、まるで超優秀な司書のように、さまざまなデータを整理し、必要なときに最も関連性の高い内容を素早く見つけ出し、それをLLMに渡して正確な答えを生成するのを手伝ってくれます。

1. LlamaIndex とは何ですか?

LlamaIndex(旧名 GPT Index)は、構築するためのデータ駆動型 LLM アプリのフレームワーク。コア目標:さまざまなデータソースを接続し、インデックスを構築し、強力な検索と生成機能を提供すること。

データソース
さまざまなソースからデータを読み込む
インデックス構築
整理、分割、ベクトル化
検索拡張
関連情報を素早く検索する
回答を生成する
コンテキストを組み合わせて回答を生成する

2. コアフロー(RAGフロー)

Step 1
データの読み込み
Load
Step 2
テキストチャンク分割
Chunk
Step 3
ベクトル化
Embed
Step 4
インデックス構築
Index
Step 5
検索
Retrieve
Step 6
回答を生成する
Generate

3. コアモジュール(Code Map)

Readers データローダー

複数のデータソース(ファイル、Webページ、データベースなど)をサポート

Nodes ノード(テキストブロック)

ドキュメントを意味的に類似したノードに分割する

Indexes 索引構造

複数のインデックス構造でノードを整理・保存する

Retrievers 检索器

クエリに基づいてインデックスから関連テキストを取得する

Query Engine クエリエンジン

検索と LLM を統合して最終回答を生成する

Embeddings 埋め込みモデル

テキストをベクトル表現に変換する

Storage ストレージ層

ストレージのインデックス、ドキュメント、ベクトルなどのデータを保存する

Callbacks コールバック機構

ログ、デバッグ、イベント処理など

4. データ読み込み(Readers がサポートするデータソース)

ファイル
PDFTXTDOCXPPTXCSVJSON
ウェブページ
ウェブサイトAPIインターフェースRSSNotionGitHubYouTube
データベース
SQLMongoDBPostgreSQLMySQLElasticsearch
その他
Slackクラウドストレージ(S3, GCS)カスタムデータソース

5. インデックス構造(Indexes)

Vector Index
ベクトル索引

ベクトル類似度検索に基づく(最も一般的)

対象:一般的な Q&A、セマンティック検索
Tree Index
ツリー型インデックス

階層構造を構築し、要約系のクエリに適しています

対象:階層的な要約が必要
List Index
リスト索引

順序付きリスト、構造はシンプルで直感的

対象:単純順次アクセス
Keyword Index
キーワード索引

キーワードマッチングに基づく検索

対象:キーワードの完全一致
Graph Index
グラフ索引

関係グラフ、複雑な知識検索

対象:グラフ関係が必要

6. 検索とクエリ(Retrieval)

Top K 検索

最も関連性の高い K 個のノードに戻る

類似度しきい値検索

類似度が閾値を上回るノードを返す

ハイブリッド検索(Hybrid)

ベクトル検索 + キーワード検索

再ランキング(Rerank)

再ランキングモデルを使用して結果を最適化する

コンテキスト圧縮(Compression)

コンテキストを圧縮し、重要な情報を保持する

7. クエリエンジン(Query Engine)

RetrieverQA

基本的なQ&A生成

SubQuestion

サブ問題の分解

Router

ルーターの複数戦略

Chat

対話モード、複数ターンの対話をサポート

Custom

カスタムエンジン、柔軟に拡張可能

8. コア機能

  • 統一インターフェース:複数のデータソースと LLM をサポート
  • モジュール化設計:拡張しやすい、組み合わせ可能なコンポーネント
  • 高効率インデックス:複数のインデックス構造で検索効果を最適化
  • RAG 最適化:検索拡張生成、幻覚を削減
  • 本番対応済み:並行処理、バッチ処理、キャッシュなどをサポート
  • エコシステムが豊富:主要なベクターデータベースやツールと統合

9. コード例(クイックスタート)

from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.core.query_engine import RetrieverQueryEngine

# 1. データを読み込む
reader = SimpleDirectoryReader("./data")
documents = reader.load_data()

# 2. インデックスを構築する
index = VectorStoreIndex.from_documents(documents)

# 3. クエリエンジンを作成する
query_engine = index.as_query_engine(similarity_top_k=3)

# 4. クエリ
response = query_engine.query("LlamaIndex とは何ですか?")
print(response)

10. 実例 & オープンソースプロジェクト