ホームページ >バックエンド開発 >Python チュートリアル >OpenAI と Streamlit を使用したドキュメント検索および Q&A システムの構築

OpenAI と Streamlit を使用したドキュメント検索および Q&A システムの構築

Susan Sarandon
Susan Sarandonオリジナル
2024-11-07 15:50:03528ブラウズ

開発者コミュニティの皆さん、こんにちは! ?

今日は、私のプロジェクトである EzioDevIo RAG (Retrieval-Augmented Generation) について説明できることを嬉しく思います。このシステムにより、ユーザーは PDF ドキュメントをアップロードし、その内容に基づいて質問し、OpenAI の GPT-3.5 Turbo モデルによって生成されたリアルタイムの回答を受け取ることができます。これは、大きなドキュメントをナビゲートしたり、関連情報をすばやく抽出したりする場合に特に便利です。 ??

Building a Document Retrieval & Q&A System with OpenAI and Streamlit

完全なコードは、私の GitHub: EzioDevIo RAG プロジェクトで見つけることができます。プロジェクトに飛び込んで、各ステップを詳しく見てみましょう!

? EzioDevIo RAG プロジェクト GitHub リポジトリの完全なコードベースとセットアップ手順を詳しく見てみましょう!

プロジェクト概要

何を学ぶか

  1. OpenAI の言語モデルを PDF ドキュメントの取得と統合する方法。
  2. Streamlit を使用してユーザーフレンドリーなインターフェイスを作成する方法。
  3. デプロイを容易にするために、Docker を使用してアプリケーションをコンテナ化する方法。 プロジェクトの特徴
  • PDF をアップロードし、そこから情報を取得します。
  • アップロードされた PDF の内容に基づいて質問します。
  • OpenAI の gpt-3.5-turbo モデルによって生成されたリアルタイム応答。
  • Docker を使用した簡単な導入により拡張性を実現します。

*プロジェクト ディレクトリの最終構造は次のとおりです: *

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: プロジェクトのセットアップ

前提条件

以下のものがあることを確認してください:

  • Python 3.8 : アプリケーションをローカルで実行します。
  • OpenAI API キー: OpenAI のモデルにアクセスするにはこれが必要です。 OpenAI API にサインアップしてキーを取得してください。
  • Docker: オプションですが、デプロイメント用にアプリケーションをコンテナ化する場合に推奨されます。

ステップ 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

各ファイルには特定の役割があります:

  • app.py: Streamlit インターフェイスを管理し、ユーザーがファイルをアップロードしたり質問したりできるようにします。
  • document_loader.py: PyMuPDF を使用して PDF の読み込みと処理を処理します。
  • retriever.py: FAISS を使用して文書テキストのインデックスを作成し、ユーザーのクエリに基づいて関連セクションを取得します。
  • main.py: OpenAI の API を呼び出して応答を生成するなど、すべてを結び付けます。

ステップ 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

説明:

  • このコードは、Streamlit を使用してシンプルな UI を作成し、ユーザーが PDF をアップロードして質問を入力できるようにします。
  • ユーザーが「回答を取得」をクリックすると、アプリは関連するドキュメントを取得し、回答を生成します。

ステップ 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 コンテナの実行

  1. Docker イメージをビルドします:
git clone https://github.com/EzioDEVio/RAG-project.git
cd RAG-project

  1. コンテナを実行します:
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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。