PDFについて回答してくれるAI / AIアプリ開発入門 その4 #chatgpt #langchain #streamlit
PDFについて回答してくれるAIアプリをLangChain+Streamlitで作る この記事の内容 PDFをアップロードし、その内容に対して質問できるAIアプリの構築方法を紹介します LangChain・Streamlit・PyPDF2・Qdrant(ベクターDB)を組み合わせた実装手順を解説します テキストをエンベディング(ベクトル化)してベクターDBに保存する仕組みを説明します LangChainのRetrievalQAを使ってPDFの内容を参照した質問応答を実現する方法を紹介します ローカル環境からクラウド(Qdrant Cloud)への移行手順もカバーします PDFに質問できるAIアプリとは 大量のPDFドキュメントを読み込んで、その内容に対してチャットで質問できるアプリを作ります。ChatGPTは2021年9月までのデータで学習されているため、独自のPDFに書かれた情報については直接答えることができません。 そこで、PDFのテキストをデータベースに格納し、質問に関連する内容を取り出してプロンプトに埋め込むという手法を使います。プロンプトの中に情報を与えることで、ChatGPTがその内容をもとに回答を生成できるようになります。 全体の処理フロー アプリの処理は大きく「保存フェーズ」と「質問応答フェーズ」に分かれます。 保存フェーズ(PDFアップロード時) StreamlitのUIでPDFをアップロード PyPDF2でPDFのテキストを読み取る LangChainのRecursiveCharacterTextSplitterでテキストをチャンクに分割 OpenAI Embeddings APIで各チャンクをベクトル化(エンベディング) QdrantベクターDBにエンベディングを保存 質問応答フェーズ(ユーザーが質問したとき) 質問文をOpenAI Embeddings APIでベクトル化 ベクターDBから類似度の高いチャンクを検索 取得した関連テキストをプロンプトに埋め込む ChatGPTに回答を生成させて表示 必要なライブラリのインストール 以下のライブラリを事前にインストールしておきます。 pip install pypdf2 pip install qdrant-client pip install langchain pip install streamlit pip install openai pip install tiktoken ページ切り替えの実装 Streamlitでは、サイドバーのセレクトボックスを使ってページを切り替えることができます。 import streamlit as st selection = st.sidebar.selectbox("ページを選択", ["PDFアップロード", "質問"]) if selection == "PDFアップロード": show_upload_page() elif selection == "質問": show_qa_page() PDFのアップロードとテキスト分割 StreamlitのファイルアップローダーとPyPDF2を組み合わせて、PDFを読み込みテキストを抽出します。 ...