🔥

LangchainとVector Storeでチャットボットが参照した文献情報を確認する

2023/09/15に公開

LangchainとVector Storeでチャットボットが参照した文献情報を確認する

はじめに

前回の記事では、langchainのVector Storeを使って、PDF書類を読み込ませたチャットボットの作り方を紹介しました。

https://zenn.dev/pipon_tech_blog/articles/08f959bab19c97

Vectore StoreにPDF書類を読み込ませると、デフォルトでは、PDF書類の読み込んだ時に、使用したファイルパスとページ番号のみがmetadataとして保存されます。

しかし、PDF書類などを参照するチャットボットの場合、回答だけでなく、書類の作成日時やダウンロード先のURLを返すことも必要になるかと思います。

本記事では、回答だけでなく、参照した書類の情報を返す方法を紹介します。

方法

  • 書類の情報をmetadataに追加する
  • 回答でmetadataを返す

書類の情報をmetadataに追加する

やり方はシンプルで、PDF書類を読み込んでいるところで、metadataに追加したい情報を辞書型で渡すだけです。

まず、PyPDFLoaderでPDF書類を読み込みます。

from langchain.document_loaders import PyPDFLoader

path = "sample.pdf"
loader = PyPDFLoader(path)
pages = loader.load_and_split()

このとき、pagesの中身はlangchain.document.Documentオブジェクトのリストになっています。

langchain.document.Documentオブジェクトは、page_contentmetadataを持つオブジェクトです。

metadataは、sourcepageの2つのキーを持つ辞書型です。

次に、metadataに追加したい情報を辞書型で渡します。

for page in pages:
    page.metadata['title'] = 'pdfのタイトル'
    page.metadata['url'] = 'pdfのダウンロード先のURL'
    page.metadata['created_at'] = 'pdfの作成日時'

これで、metadataに追加したい情報を追加できました。

あとは、前回の記事で紹介したように、VectorStoreDocumentオブジェクトを保存すれば、metadataに追加した情報も保存されます。

https://zenn.dev/pipon_tech_blog/articles/08f959bab19c97

回答でmetadataを返す

langchainを使用したチャットボットでmetadataを返すには、引数にreturn_source_documents=Trueを渡します。

# チャットボットを作成する
qa = ConversationalRetrievalChain.from_llm(
    ChatOpenAI(model_name="gpt-3.5-turbo",temperature=0), # ボットの文章を生成するためのllm
    vector_stores.as_retriever(),
    return_source_documents=True # sourceを返すか
)

return_source_documents=Trueを設定すると、返り値にsource_documentsキーが追加され、こちらからmetadataを取得できるようになります。

    query = input("ボットへの質問:")
    chat_history = []
    result = qa({'question': query, "chat_history": chat_history})
    references = [doc.metadata for doc in result['source_documents']]

おわりに

本記事では、LangchainのVector Storeを使用して、PDF書類を参照するチャットボットのメタデータを強化する方法について詳しく説明しました。通常、PDF書類を読み込むだけでは保存されるメタデータが限られていますが、この方法を用いれば、回答に加えて書類の作成日時やダウンロード先のURLなど、重要な情報を取得できるようになります。

Langchainを活用することで、よりコンテキストに合った回答をユーザーに提供し、チャットボットの質を向上させることができます。今後もLangchainとVector Storeを活用したさまざまな応用に挑戦し、ユーザーエクスペリエンスを向上させる方法を追求していきましょう。詳細な実装手順は記事内で紹介されているので、ぜひ試してみてください。

株式会社piponでは定期的に技術勉強会を開催しています。
ChatGPT・AI・データサイエンスについてご興味がある方は是非、ご参加ください。
https://chatgptllm.connpass.com/
株式会社piponではChatGPT・AI・データサイエンスについて業界ごとの事例を紹介しています。ご興味ある方はこちらのオウンドメディアをご覧ください。
https://bigdata-tools.com/

株式会社piponのテックブログ

Discussion