ホームページ >バックエンド開発 >Python チュートリアル >OpenAI と Streamlit を使用したドキュメント検索および Q&A システムの構築
開発者コミュニティの皆さん、こんにちは! ?
今日は、私のプロジェクトである EzioDevIo RAG (Retrieval-Augmented Generation) について説明できることを嬉しく思います。このシステムにより、ユーザーは PDF ドキュメントをアップロードし、その内容に基づいて質問し、OpenAI の GPT-3.5 Turbo モデルによって生成されたリアルタイムの回答を受け取ることができます。これは、大きなドキュメントをナビゲートしたり、関連情報をすばやく抽出したりする場合に特に便利です。 ??
完全なコードは、私の GitHub: EzioDevIo RAG プロジェクトで見つけることができます。プロジェクトに飛び込んで、各ステップを詳しく見てみましょう!
? EzioDevIo RAG プロジェクト GitHub リポジトリの完全なコードベースとセットアップ手順を詳しく見てみましょう!
プロジェクト概要
何を学ぶか
*プロジェクト ディレクトリの最終構造は次のとおりです: *
RAG-project/ ├── .env # Environment variables (API key) ├── app.py # Streamlit app for the RAG system ├── document_loader.py # Code for loading and processing PDF documents ├── retriever.py # Code for indexing and retrieving documents ├── main.py # Main script for RAG pipeline ├── requirements.txt # List of required libraries ├── Dockerfile # Dockerfile for containerizing the app ├── .gitignore # Ignore sensitive and unnecessary files ├── data/ │ └── uploaded_pdfs/ # Folder to store uploaded PDFs └── images/ └── openai_api_setup.png # Example image for OpenAI API setup instructions
ステップ 1: プロジェクトのセットアップ
前提条件
以下のものがあることを確認してください:
ステップ 2: リポジトリのクローンを作成し、仮想環境をセットアップする
2.1.リポジトリのクローンを作成します
まず、GitHub からプロジェクト リポジトリのクローンを作成し、プロジェクト ディレクトリに移動します。
git clone https://github.com/EzioDEVio/RAG-project.git cd RAG-project
2.2.仮想環境をセットアップする
プロジェクトの依存関係を分離するには、仮想環境を作成してアクティブ化します。これは、他のプロジェクトのパッケージとの競合を防ぐのに役立ちます。
python -m venv venv source venv/bin/activate # On Windows, use `venv\Scripts\activate`
2.3.依存関係をインストール
requirements.txt にリストされている必要な Python ライブラリをインストールします。これには、言語モデルの OpenAI、UI の Streamlit、PDF 処理の PyMuPDF、効率的な類似性検索の FAISS が含まれます。
pip install -r requirements.txt
2.4. OpenAI API キーを構成します
プロジェクトのルート ディレクトリに .env ファイルを作成します。このファイルには、OpenAI API キーが安全に保存されます。次の行をファイルに追加し、your_openai_api_key_here を実際の API キーに置き換えます:
RAG-project/ ├── .env # Environment variables (API key) ├── app.py # Streamlit app for the RAG system ├── document_loader.py # Code for loading and processing PDF documents ├── retriever.py # Code for indexing and retrieving documents ├── main.py # Main script for RAG pipeline ├── requirements.txt # List of required libraries ├── Dockerfile # Dockerfile for containerizing the app ├── .gitignore # Ignore sensitive and unnecessary files ├── data/ │ └── uploaded_pdfs/ # Folder to store uploaded PDFs └── images/ └── openai_api_setup.png # Example image for OpenAI API setup instructions
?ヒント: プロジェクトをパブリック リポジトリにプッシュする場合に API キーが公開されるのを避けるために、.env が .gitignore ファイルに追加されていることを確認してください。
ステップ 3: プロジェクト構造を理解する
コードをナビゲートするのに役立つディレクトリ構造の概要を次に示します。
コードをナビゲートするのに役立つディレクトリ構造の概要を次に示します。
git clone https://github.com/EzioDEVio/RAG-project.git cd RAG-project
各ファイルには特定の役割があります:
ステップ 4: コア コードのビルド
それでは、プロジェクトの主要コンポーネントを見ていきましょう。
4.1.ドキュメントのロード (document_loader.py)
document_loader.py ファイルは、PDF からテキストを抽出します。ここでは、PyMuPDF ライブラリを使用して PDF 内の各ページを処理し、テキストを保存します。
python -m venv venv source venv/bin/activate # On Windows, use `venv\Scripts\activate`
説明: この関数は、指定されたフォルダー内のすべての PDF ファイルを読み取り、各ページからテキストを抽出し、そのテキストを辞書のリストに追加します。各辞書は、テキストとファイル名を持つドキュメントを表します。
4.2.ドキュメントのインデックス作成と取得 (retriever.py)
FAISS (Facebook AI 類似性検索) は、類似性検索の実行に役立ちます。これを使用してドキュメントの埋め込みのインデックスを作成し、ユーザーが質問したときに関連するセクションを取得できるようにします。
pip install -r requirements.txt
説明:
create_index: OpenAIEmbeddings を使用してドキュメント テキストを埋め込みに変換し、FAISS でインデックスを作成します。
retrieve_documents: ユーザーのクエリに基づいて、関連するドキュメントのセクションを検索します。
4.3.レスポンスの生成 (main.py)
このモジュールは、OpenAI の言語モデルを使用して、ユーザーのクエリを処理し、関連するドキュメントを取得し、回答を生成します。
OPENAI_API_KEY=your_openai_api_key_here
説明:
generate_response: 取得したドキュメントとユーザーのクエリからコンテキストを含むプロンプトを作成し、それを OpenAI の API に送信します。応答は回答として返されます。
ステップ 5: Streamlit インターフェイス (app.py) を作成する
Streamlit はインタラクティブなフロントエンドを提供し、ユーザーが簡単にファイルをアップロードしたり質問したりできるようにします。
RAG-project/ ├── .env # Environment variables (API key) ├── app.py # Streamlit app for the RAG system ├── document_loader.py # Code for loading and processing PDF documents ├── retriever.py # Code for indexing and retrieving documents ├── main.py # Main script for RAG pipeline ├── requirements.txt # List of required libraries ├── Dockerfile # Dockerfile for containerizing the app ├── .gitignore # Ignore sensitive and unnecessary files ├── data/ │ └── uploaded_pdfs/ # Folder to store uploaded PDFs └── images/ └── openai_api_setup.png # Example image for OpenAI API setup instructions
説明:
ステップ 6: アプリケーションの Docker 化
Docker を使用すると、アプリをコンテナーにパッケージ化できるため、デプロイが簡単になります。
Dockerfile
RAG-project/ ├── .env # Environment variables (API key) ├── app.py # Streamlit app for the RAG system ├── document_loader.py # Code for loading and processing PDF documents ├── retriever.py # Code for indexing and retrieving documents ├── main.py # Main script for RAG pipeline ├── requirements.txt # List of required libraries ├── Dockerfile # Dockerfile for containerizing the app ├── .gitignore # Ignore sensitive and unnecessary files ├── data/ │ └── uploaded_pdfs/ # Folder to store uploaded PDFs └── images/ └── openai_api_setup.png # Example image for OpenAI API setup instructions
説明:
最終イメージをスリムに保つために、マルチステージ ビルドを使用します。
アプリケーションはセキュリティのために非 root ユーザーとして実行されます。
Docker コンテナの実行
git clone https://github.com/EzioDEVio/RAG-project.git cd RAG-project
python -m venv venv source venv/bin/activate # On Windows, use `venv\Scripts\activate`
ステップ 7: GitHub アクションを使用した CI/CD のセットアップ
運用準備として、Docker イメージを構築、テスト、スキャンするための CI/CD パイプラインを追加します。このセットアップのリポジトリには .github/workflows ファイルがあります。
最終的な感想
このプロジェクトは、OpenAI の言語モデル機能とドキュメント検索を組み合わせて、機能的で対話型のツールを作成します。このプロジェクトを気に入っていただけた場合は、GitHub リポジトリにスターを付けて、Dev Community で私をフォローしてください。もっと素晴らしいプロジェクトを一緒に構築しましょう! ?
? GitHub リポジトリを表示しますか? EzioDevIo RAG プロジェクト GitHub リポジトリ!
以上がOpenAI と Streamlit を使用したドキュメント検索および Q&A システムの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。