カスタムDocumentLoaderの実装

LlamaIndexにおける「カスタムDocumentLoaderの実装」とは、標準で用意されているデータローダ(例:SimpleDirectoryReaderWikipediaReaderなど)では対応できない独自形式のデータソースを処理するために、自分でBaseReaderクラスを継承してカスタム実装を作成することを意味します。以下に、その詳細と手順を説明します。


カスタムDocumentLoaderの目的

LlamaIndexでは、文書(Document)をインデックスに登録する前に、あらゆる形式のデータ(PDF、HTML、APIレスポンス、データベース内容など)をDocumentオブジェクトへと変換する必要があります。標準のリーダークラスが対応していない形式の場合、自作のリーダーを実装することで対応可能です。


基本構造

カスタムのDocumentLoaderは、以下のクラス構成に基づいて作成します:

python
from llama_index.readers.base import BaseReader from llama_index.schema import Document class MyCustomLoader(BaseReader): def load_data(self, **kwargs) -> list[Document]: # ここでデータの読み込みとDocumentの生成を行う raise NotImplementedError

実装例:カスタムJSONファイル読み込み

例えば、JSONファイルの内容を読み取って各エントリを1つのDocumentに変換するカスタムローダーは以下のように実装します。

python
import json from llama_index.readers.base import BaseReader from llama_index.schema import Document class JSONLoader(BaseReader): def __init__(self, file_path: str): self.file_path = file_path def load_data(self, **kwargs) -> list[Document]: with open(self.file_path, 'r', encoding='utf-8') as f: data = json.load(f) documents = [] for item in data: text = item.get("content", "") metadata = {k: v for k, v in item.items() if k != "content"} documents.append(Document(text=text, metadata=metadata)) return documents

利用方法

このカスタムローダーは、通常のリーダーと同様に以下のようにして使用します。

python
loader = JSONLoader("data/sample.json") documents = loader.load_data()

documentsDocumentオブジェクトのリストであり、これをそのままインデックス化の処理に渡すことができます。


注意点

  • Documentの作成には、必ずtextパラメータが必要です。

  • メタデータ(例:作成日、著者、カテゴリなど)はmetadata引数で渡すことができます。

  • load_dataメソッドは同期関数であり、LlamaIndexがそれを呼び出す設計になっています。


応用例

  • Web APIからデータ取得 → requestsで取得 → Document化

  • SQLデータベースから取得 → sqlite3SQLAlchemyで取得 → Document化

  • 複数ファイルのフォルダ内処理 → os.listdirでループ処理 → Document化


まとめ

LlamaIndexのカスタムDocumentLoaderは、あらゆる独自データソースから文書データを取り込む柔軟な仕組みを提供します。BaseReaderを継承してload_dataを実装するだけで、さまざまなデータ形式に対応したインデックス作成が可能になります。

ChatGPT4o 生成日:2025/06/14