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

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

Nov 07, 2024 pm 03:50 PM

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

今日は、私のプロジェクトである 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python vs. C:パフォーマンスと効率の探索 Python vs. C:パフォーマンスと効率の探索 Apr 18, 2025 am 12:20 AM

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Pythonの学習:2時間の毎日の研究で十分ですか? Pythonの学習:2時間の毎日の研究で十分ですか? Apr 18, 2025 am 12:22 AM

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Python vs. C:重要な違​​いを理解します Python vs. C:重要な違​​いを理解します Apr 21, 2025 am 12:18 AM

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか? Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか? Apr 27, 2025 am 12:03 AM

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

科学コンピューティングのためのPython:詳細な外観 科学コンピューティングのためのPython:詳細な外観 Apr 19, 2025 am 12:15 AM

科学コンピューティングにおけるPythonのアプリケーションには、データ分析、機械学習、数値シミュレーション、視覚化が含まれます。 1.numpyは、効率的な多次元配列と数学的関数を提供します。 2。ScipyはNumpy機能を拡張し、最適化と線形代数ツールを提供します。 3. Pandasは、データ処理と分析に使用されます。 4.matplotlibは、さまざまなグラフと視覚的な結果を生成するために使用されます。

See all articles