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

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

今日は、私のプロジェクトである 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 までご連絡ください。
Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Apr 25, 2025 am 12:28 AM

Arraysinpython、特にvianumpy、arecrucialinscientificComputing fortheirefficienty andversitility.1)彼らは、fornumericaloperations、data analysis、andmachinelearning.2)numpy'simplementation incensuresfasteroperationsthanpasteroperations.3)arayableminablecickick

同じシステムで異なるPythonバージョンをどのように処理しますか?同じシステムで異なるPythonバージョンをどのように処理しますか?Apr 25, 2025 am 12:24 AM

Pyenv、Venv、およびAnacondaを使用して、さまざまなPythonバージョンを管理できます。 1)Pyenvを使用して、複数のPythonバージョンを管理します。Pyenvをインストールし、グローバルバージョンとローカルバージョンを設定します。 2)VENVを使用して仮想環境を作成して、プロジェクトの依存関係を分離します。 3)Anacondaを使用して、データサイエンスプロジェクトでPythonバージョンを管理します。 4)システムレベルのタスク用にシステムPythonを保持します。これらのツールと戦略を通じて、Pythonのさまざまなバージョンを効果的に管理して、プロジェクトのスムーズな実行を確保できます。

標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?Apr 25, 2025 am 12:21 AM

numpyarrayshaveveraladvantages-averstandardpythonarrays:1)thealmuchfasterduetocベースのインプレンテーション、2)アレモレメモリ効率、特にlargedatasets、および3)それらは、拡散化された、構造化された形成術科療法、

アレイの均質な性質はパフォーマンスにどのように影響しますか?アレイの均質な性質はパフォーマンスにどのように影響しますか?Apr 25, 2025 am 12:13 AM

パフォーマンスに対する配列の均一性の影響は二重です。1)均一性により、コンパイラはメモリアクセスを最適化し、パフォーマンスを改善できます。 2)しかし、タイプの多様性を制限し、それが非効率につながる可能性があります。要するに、適切なデータ構造を選択することが重要です。

実行可能なPythonスクリプトを作成するためのベストプラクティスは何ですか?実行可能なPythonスクリプトを作成するためのベストプラクティスは何ですか?Apr 25, 2025 am 12:11 AM

craftexecutablepythonscripts、次のようになります

numpyアレイは、アレイモジュールを使用して作成された配列とどのように異なりますか?numpyアレイは、アレイモジュールを使用して作成された配列とどのように異なりますか?Apr 24, 2025 pm 03:53 PM

numpyarraysarasarebetterfornumeroperations andmulti-dimensionaldata、whilethearraymoduleissuitable forbasic、1)numpyexcelsinperformance and forlargedatasentassandcomplexoperations.2)thearraymuremememory-effictientivearientfa

Numpyアレイの使用は、Pythonで配列モジュール配列の使用と比較してどのように比較されますか?Numpyアレイの使用は、Pythonで配列モジュール配列の使用と比較してどのように比較されますか?Apr 24, 2025 pm 03:49 PM

NumPyArraySareBetterforHeavyNumericalComputing、whilethearrayarayismoreSuitableformemory-constrainedprojectswithsimpledatatypes.1)numpyarraysofferarays andatiledance andpeperancedatasandatassandcomplexoperations.2)thearraymoduleisuleiseightweightandmemememe-ef

CTypesモジュールは、Pythonの配列にどのように関連していますか?CTypesモジュールは、Pythonの配列にどのように関連していますか?Apr 24, 2025 pm 03:45 PM

ctypesallowsinging andmanipulatingc-stylearraysinpython.1)usectypestointerfacewithclibrariesforperformance.2)createc-stylearraysfornumericalcomputations.3)passarraystocfunctions foreffientientoperations.how、how、becuutiousmorymanagemation、performanceo

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、