LangChainでPDF検索をやってみた(FAISS、ConversationSummaryMemory、ConversationalRetrievalChain)

はじめに

LangChainの会話履歴を保存するMemory機能の1つであるConversationSummaryMemoryを検証してみました。LangChainのConversationSummaryMemoryの挙動を確認したい方におすすめです。

開発環境

  • Windows 11
  • Python 3.11.5
  • dotenv
  • LangChain
  • Azure OpenAI Embeddings
  • CharacterTextSplitter
  • FAISS
  • PyPDFLoader

実装

事前準備

今回は以下の記事で事前にベクトルストアを作成し、そこから回答を生成する方式をとります。

https://qiita.com/tatsuki-tsuchiyama/items/a48d1cc4afce588e1797

私はランニングを行っていることもあり、以下のランニング時計の取扱説明書のPDFをベクトル化しました。

https://download.garmin.com/jp/download/manuals/Forerunner255_OM_JA.pdf

必要なパッケージのインストール

以下のコマンドで必要なパッケージをインストールします。

環境変数の設定と依存関係の読み込み

.envファイルを作成し、Azure Open AIの環境変数の設定をします。
ご自身の環境に合わせて設定してください。

.env

必要なライブラリをインポートします。

test.py

使用するモデルの準備

Azure Chat OpenAIとAzure OpenAI Embeddingsを定義します。

test.py

FAISSベクトルストアの読み込み

ローカルに保存しているベクトルストアの読み込みを行い、as_retriever()メソッドで検索機能を作成します。

test.py

ConversationSummaryMemoryの定義

以下のようにConversationSummaryMemoryを定義します。要約にllmを使います。会話履歴と出力のキーを指定しています。
ConversationBufferMemoryは会話履歴を要約して保持します。

test.py

chainを作成し、実行

最後にchainを作成し、実行します。質問は3問準備しており、2問目は1問目を詳しく説明する質問、3問目はそれまでの会話をもとに回答できるかを検証する質問に設定しました。

test.py

これまでのPythonコードを上から順に記述し終わったら、Pythonファイルを実行します。
実行結果は以下のようになりました。

会話履歴が英語で要約されていることが分かります。日本語ではないので、使用する際は注意が必要です。

おわりに

LangChainの会話履歴を保存するmemory機能の一つであるConversationSummaryMemoryを検証してみました。文書検索に会話履歴を導入する際の選択肢の1つになります。ぜひ、試してみてください。

最後までお読みいただき、ありがとうございました!

この記事を書いた人

azure-recipe-user