本稿は LlamaIndex (ラマインデックス) に関する記事です。
| この記事の要点 |
- LlamaIndex は "LLM × あなたのデータ" に特化したフレームワーク。RAG を最短経路で構築できる
- 140+ のデータコネクタ (PDF/Notion/Slack/Confluence/Google Drive 等) が標準で用意
- Index 抽象 (ベクトル / キーワード / 木 / グラフ) でデータの持ち方を選べる
- 本格的なエージェントは AgentWorkflow で組む
- 運用補助に LlamaCloud / LlamaHub がある
- Python / TypeScript の双方で提供
|
LlamaIndex とは?
LlamaIndex は、「LLM と自社データを繋ぐ」ことを目的としたフレームワークです。LangChain と並んで LLM アプリ開発の代表格で、特に RAG (検索拡張生成) のためのデータ取込み・インデックス・検索・回答合成を一気通貫で扱う点に強みがあります。
もともと「GPT Index」という名前で始まり、LLM に外部データを与えるための仕組みを軽量に提供してきました。現在はエージェント・ワークフロー機能も拡充し、汎用 LLM アプリフレームワークとして発展しています。
LlamaIndex ファミリーの全体像
| プロダクト | 役割 |
| LlamaIndex (Python) | 本体。RAG・エージェント・ワークフロー構築 |
| LlamaIndex.TS | TypeScript / JavaScript 版 |
| LlamaHub | データコネクタ・ツール・パックの公開リポジトリ |
| LlamaParse | PDF・Word・複雑表組みの高品質パーサ (SaaS) |
| LlamaCloud | 本番向けインデックス管理・パイプラインのマネージドサービス |
主な特徴
- RAG 専用 API がシンプル —
VectorStoreIndex.from_documents + query_engine の 2 行で動く
- 豊富なデータコネクタ — PDF、Word、Notion、Slack、Confluence、Google Drive、SQL、Web Crawler など 140+ が LlamaHub で公開
- Index の種類が選べる — ベクトル / キーワード / 木 / 知識グラフ / SQL / ハイブリッド
- Query Engine の組み立て — 検索 → 再ランク → 合成、サブクエリ分解、複数 Index ルーティング
- Agent / AgentWorkflow — ツール使用・複数手順のエージェント
- マルチプロバイダ対応 — OpenAI、Anthropic、Google、Cohere、Hugging Face、ローカル LLM (Ollama)
- マルチモーダル — 画像・PDF・テーブル混在のドキュメントに対応
典型的な使い方: 最短 RAG
|
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
# 1) ローカルフォルダから全文書ロード
docs = SimpleDirectoryReader("./manual").load_data()
# 2) インデックス作成 (埋め込み + ベクトル DB を裏で構築)
index = VectorStoreIndex.from_documents(docs)
# 3) クエリエンジン
qe = index.as_query_engine()
print(qe.query("このマニュアルの返金ポリシーを要約して"))
|
主要コンポーネント
| 層 | 役割 | 代表クラス |
| Document Loader | 各種データソースから文書を読み込み | SimpleDirectoryReader、各種 LlamaHub Reader |
| Node Parser | 文書をチャンク (Node) に分割 | SentenceSplitter、SemanticSplitter |
| Embedding | ベクトル化 | OpenAI、HuggingFace、BGE、Cohere |
| Index | 検索可能なデータ構造 | VectorStoreIndex、SummaryIndex、KnowledgeGraphIndex |
| Retriever | Index からの検索 | VectorIndexRetriever、ハイブリッド検索 |
| Postprocessor / Reranker | 再ランクで上位を絞り込み | Cohere Rerank、SentenceTransformersRerank |
| Response Synthesizer | 検索結果+クエリから回答生成 | refine / tree_summarize / compact |
| Query Engine | 上記をまとめた問合せ口 | index.as_query_engine() |
| Agent / Workflow | ツール使用・複数手順 | FunctionAgent、AgentWorkflow |
LangChain との使い分け
| 観点 |
LlamaIndex |
LangChain |
| RAG を最短で作りたい | ◎ | ○ (部品組合せ) |
| 多種データソース取込 | ◎ (LlamaHub のリーダ豊富) | ○ (Document Loader) |
| エージェント中心の汎用 LLM アプリ | ○ (AgentWorkflow) | ◎ (LangGraph) |
| プロバイダ抽象化 | ○ | ◎ |
| Tool エコシステム | ○ | ◎ (圧倒的) |
| 商用サポート | LlamaCloud | LangSmith / LangGraph Cloud |
緑行は LlamaIndex の本領が活きるシナリオ。
インデックスの種類
| Index | 用途 |
| VectorStoreIndex | ベクトル類似検索。標準の RAG はこれ |
| SummaryIndex | 「全部要約」型。短い文書や FAQ |
| TreeIndex | 階層的要約。長い書籍・大量資料 |
| KeywordTableIndex | キーワード辞書ベース |
| KnowledgeGraphIndex | 知識グラフ。関係性が重要なデータ |
| DocumentSummaryIndex | 各文書サマリでルーティング → ドリルダウン |
| SQL / Pandas | 構造化データを LLM から問合せ |
| ComposableGraph | 複数 Index を統合 |
インストール
|
# Python
pip install llama-index
# 個別パッケージで絞ることも可能
pip install llama-index-core llama-index-llms-openai llama-index-embeddings-openai
pip install llama-index-vector-stores-chroma
# TypeScript / JavaScript
npm install llamaindex
|
運用上のヒント
| Tips |
- チャンクサイズと重複 (
chunk_size / chunk_overlap) は検索精度に直結。文書種別ごとに調整
- 本番では外部ベクトル DB (pgvector / Qdrant / Pinecone) に永続化
- 再ランク (Reranker) を入れると精度が大きく上がる (Cohere Rerank / BGE Reranker)
- 複雑な PDF / 表組みは LlamaParse でテキスト化精度を上げる
- クエリ書き換え・サブクエリ分解 (
SubQuestionQueryEngine) で複雑質問に対応
- 応答合成方式 (
refine / compact / tree_summarize) を試して、コストと品質のバランスを取る
- 本番監視は LlamaCloud や Phoenix (OpenInference) 等のオブザーバビリティと統合
|
注意点
| よくある落とし穴 |
- API が変動的 — メジャー版で大きく変わることがある。
requirements.txt で固定
- チャンク分割の質が悪いと検索結果も劣化。PDF はそのままだと表組み崩れ
- 埋め込みのコスト: 大量取込で OpenAI Embedding 料金が膨らむ。ローカル埋め込み (bge / e5) と比較
- ベクトル DB の永続化: メモリ版は再起動で消える。
persist_dir 設定または外部 DB
- 機密文書を取り込む場合、埋め込みもクラウド送信される点を確認 (オンプレ埋め込みモデル選択)
- マルチテナントのメタデータフィルタを正しく設計しないと情報漏れリスク
- 大規模インデックスはビルド時間と再構築コストに注意。差分更新の仕組みが必要
|
関連