LlamaIndex
LlamaIndexは、LLM向けにプライベートデータを読み込み、インデックス化し、検索するオープンソースフレームワークです。RAGパイプラインやドキュメントエージェントを支えます。
LlamaIndexは、大規模言語モデル (LLM)を非公開データに接続するオープンソースフレームワークです。ドキュメント、データベース、APIを読み込み、内容をインデックス化し、モデルが質問に答えるために必要な箇所を検索します。LlamaIndexを使ったアプリケーションの多くは、企業のマニュアル、契約書、チケットに基づいて回答するアシスタントや、ドキュメントを読み取って操作するAIエージェントなど、検索拡張生成 (RAG)を利用します。Jerry Liuは2022年11月にGPT Indexとしてプロジェクトを公開し、2023年2月にLlamaIndexへ改称しました。LlamaIndexフレームワークはPythonとTypeScriptで利用でき、同社は複雑なPDF、表、スライドをインデックス化しやすいテキストに変換するホステッドサービス、LlamaParseも提供しています。
LlamaIndexの仕組み#
LlamaIndexアプリケーションには2つのフェーズがあります。データの取り込みはデータ更新ごとに1回実行します。LlamaHubのコネクターがファイルやサービスをDocumentオブジェクトとして読み込み、ノードパーサーがそれぞれをNodesと呼ばれるチャンクに分割します。埋め込みモデルは各Nodeをベクトルに変換し、その埋め込みをインデックスに保存します。クエリ処理は質問ごとに実行します。リトリーバーが質問に最も近いNodesを見つけ、再ランキングモデルなどの後処理器が並べ替えやフィルタリングを行います。回答合成器は、残ったNodesをコンテキストウィンドウに配置し、それらを根拠に回答するようLLMに指示します。
VectorStoreIndexはデフォルトで、埋め込みをメモリまたは外部のベクトルデータベースに保存します。ほかのインデックスでは、すべてのチャンクをモデルに送って要約させたり、エンティティと関係性の知識グラフを構築してGraphRAG形式のクエリに対応したり、キーワードを照合したりします。クエリエンジンは単一の質問に回答し、チャットエンジンは会話を維持します。LlamaIndexのイベント駆動型オーケストレーション層であるWorkflowsは、検索、ツール、複数のエージェントをつなぎ、何をいつ検索するかを判断するエージェント型RAGシステムを構築します。
画像に含まれる内容によるインデックス化#
テキストで記述できるあらゆるコンテンツを検索できます。Ultralytics YOLO26で写真コレクションを処理すると、各画像を検索可能な説明に変換できます。Results.verbose()は、predictモードの結果についてクラスごとの検出数を短い文字列として返します。この文字列がDocumentとなり、メタデータに画像URLを保持します。ローカルのHugging Face埋め込みモデルを使えば、APIキーなしでインデックスを実行できます。
from llama_index.core import Document, Settings, VectorStoreIndex
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from ultralytics import YOLO
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")
model = YOLO("yolo26n.pt")
# Describe each image by its detections; the URL stays in metadata and out of the embedding
docs = []
for url in ["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]:
results = model(url)
text = f"A photo containing {results[0].verbose()}"
docs.append(Document(text=text, metadata={"image": url}, excluded_embed_metadata_keys=["image"]))
# Index the descriptions, then retrieve the image that best matches a question
index = VectorStoreIndex.from_documents(docs)
retriever = index.as_retriever(similarity_top_k=1)
nodes = retriever.retrieve("Which photo shows a bus?")
print(nodes[0].node.metadata["image"], round(nodes[0].score, 3))リトリーバーは、ファイル名ではなく検出器の説明を使って見つけたバスの画像と、そのコサイン類似度スコアを返します。回答合成器を追加すると、コレクションに関する質問に文章で回答できます。これは、コンピュータビジョンとドキュメント検索を組み合わせるマルチモーダルRAGシステムの基本パターンです。
LlamaIndexと関連ツールの比較#
- LangChain: 幅広い統合機能を備えた、LLMアプリケーションとエージェント向けの汎用フレームワークです。両プロジェクトとも検索とエージェントに対応するようになりました。LlamaIndexはデータ取り込み、解析、インデックスの種類をより深く扱い、チームはLangChainやLangGraphのエージェント内でそのリトリーバーを使うこともよくあります。
- ベクトルデータベース: ベクトルを保存し、ベクトル検索を実行します。LlamaIndexはその上位層として、ドキュメントの解析、チャンク分割、埋め込み、検索、モデルへの受け渡し方法を決定します。バックエンドとして数十種類のベクトルストアをサポートしています。
- セマンティック検索: 検索処理そのものです。LlamaIndexは生成機能を追加するため、出典を示すNodeを添えた回答として結果を返します。










