Llama index RAGのメタデータ保存

Llama index RAGのメタデータ保存

[RAGカスタマイズ] LlamaIndexで情報元のPDFのメタデータを含めた回答を生成する
を参考に行う

社内資料の検索をスムーズにするRAGシステムをLlamaIndexを使用して開発している際にある問題に当たった.
「情報の出所がどのPDFの何ページ目かを知りたい」
営業やカスタマーセンターの方が顧客から質問され,RAGを使用して回答を得て,顧客に回答するという使用方法を想定する場合,間違った情報を伝えてはならない.従って,情報源となるPDFのページを示すことで,簡単にファクトチェックを行えるようになる.
今回の記事では,このRAGシステムを構築する際によく遭遇する問題をLlamaIndexで解決していく
というコンセプトらしい

この中で

from llama_index.core import (
    StorageContext,
    load_index_from_storage,
    get_response_synthesizer
)
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.postprocessor import SimilarityPostprocessor

# 保存済みのindexを読み込み
index_path = "path/to/storage"
storage_context = StorageContext.from_defaults(persist_dir=index_path)

index = load_index_from_storage(storage_context=storage_context)

# Retrieverを準備
retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=5
)

# NodePostProcessorの準備
# スコアが0.75以下のNodeを削除
score_filtter_processor = SimilarityPostprocessor(similarity_cutoff=0.75)
node_postprocessors=[score_filtter_processor]

# Synthesizerの作成
response_synthesizer = get_response_synthesizer(
    output_cls=ResponseModel
)

# QueryEngineの作成
query_engine = RetrieverQueryEngine(
    retriever=retriever,
    response_synthesizer=response_synthesizer,
    node_postprocessors=[AddMetadataNodePostprocessor()]
)

output = query_engine.query("質問を入力")


「保存されたインデックス(index)を読み込んでクエリを実行する流れ」を記述したものであり、インデックスを保存する処理(=永続化のための保存処理)は含まれていません

RAGの回答にメタデータを含める
それでは,これらの方法を応用して,RAGで生成する回答に出所となるPDFファイルとそのページを含める方法についてまとめる.大きく3つの手順が必要になる.
1. PDFからDocumentオブジェクトを生成する際に所望のメタデータを含める
2. Retrieverで検索をする際にPostNodeProcessorによりNodeのテキストにメタデータを追加する
3. Synthesizerの出力形式をpydanticで指定し,メタデータが含まれるようにする

Nodeオブジェクトに所望のメタデータを含める
LlamaIndexでは,PDF → Documentオブジェクト → Nodeオブジェクト の順でデータが変換されていく.
DocumentオブジェクトのメタデータはNodeオブジェクトにも継承される.
つまり,PDFのファイルパスやページ数をメタデータとして含める場合は,
PDF → Documentの部分でそれぞれのDocumentオブジェクトにメタデータを持たせる.

LlamaIndexが提供しているSimpleDirectoryReaderでは,PDFをDocumentに変換する際,デフォルトでメタデータを付与してくれる.従って,メタデータを付与するための処理は以下の処理だけで良い.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です