Skip to content

LisaJD/GradioRAGApp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDFベースのドキュメント検索・要約RAGアプリケーション

📝 概要

本アプリケーションは、PDFドキュメントを読み取り、文書をチャンク単位で分割・ベクトル化した上で、ユーザーのクエリに最も関連する文書部分を検索し、OpenAI GPTモデルを用いて日本語で要約・回答を生成するものです。

Gradio による Web UI を備えており、直感的に使えるインターフェースを通じて、PDF検索+要約が可能です。


🔍 デモ手順

  1. 以下のURLにアクセス
  1. ユーザー名とパスワードを入力
  • ユーザー名: moneyforward
  • パスワード: 30072025

⚙️ 使用技術と選定理由

技術・ライブラリー 用途 選定理由
Python アプリケーション全体 豊富なNLPライブラリとGradioによるUI構築のしやすさ
Gradio ユーザーインターフェース 軽量でデモに適しており、セットアップが容易
SentenceTransformers (BAAI/bge-m3) 文ベクトル生成 高精度な多言語バイエンコーダモデル
FAISS ベクトル検索 高速な類似文書検索が可能
OpenAI API 要約・質問応答生成 高精度な生成モデルによる自然な応答生成
PyMuPDF (fitz) PDFテキスト抽出 高精度で安定した日本語PDFテキストの抽出が可能
dotenv APIキー管理 セキュアな環境変数管理を実現
AWS EC2 アプリケーションのホスティング セットアップやデプロイが容易

🛠️ セットアップ方法

1. 必要なライブラリをインストール

pip install -r requirements.txt

または個別に:

pip install gradio faiss-cpu sentence-transformers openai python-dotenv transformers pymupdf 

2. OpenAI APIキーを設定

プロジェクトルートに .env ファイルを作成し、以下のように記述してください:

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3. PDFファイルを配置

documents/ フォルダに処理対象のPDFファイルを格納してください。


🚀 実行方法

以下のコマンドでアプリケーションを起動します:

python main.py

起動後、ブラウザで表示されるURL(例: http://127.0.0.1:7860)からアプリにアクセスできます。


🔌 簡単なAPI仕様(バックエンド)

  • 入力: Textbox でのユーザー質問(日本語)
  • 出力: 入力に最も関連する文書の要約+質問への回答(日本語)
  • 処理内容:
    1. ユーザー質問をベクトル化
    2. FAISSで関連文書を検索(上位5件)
    3. コンテキストと質問をテンプレートに埋め込み、OpenAIに送信
    4. 生成された要約と回答を返却

✨ 工夫した点

  • ベクトル検索による高速なドキュメント抽出:事前に文書をベクトル化・インデックス化することで、問い合わせごとの再処理を回避
  • BGEモデルを使った高精度な日本語文類似度計算
  • Gradioによる手軽なUI構築:非エンジニアにも使いやすいフロントエンドを構築
  • Prompt Engineering:複数のプロンプトを試行し、最も安定して良い結果が得られたものを選定
  • チャンキング:RAGの精度向上のため、文書をトークン長に基づいてチャンク分割
  • AWS:AWS EC2上でホスティング

😵 苦労した点

  • トークン長の制限対応:モデルに渡すテキストのトークン数が制限(8192)を超えるケースがあり、chunking戦略の調整が必要だった
  • FAISSとベクトル整形のバグ回避:1次元 vs 2次元ベクトルの扱いの違いで型エラーが発生しやすい点に注意が必要
  • AWS無料枠に収まるようアプリの容量とメモリ使用量を削減:モデルや処理フローを見直し、t3.microなどの低スペックインスタンスでも動作可能に最適化
  • PDF読み取りライブラリの選定:当初 Docling を使用したが一部PDFでクラッシュしたため、安定性の高い PyMuPDF に切り替えた

📁 ディレクトリ構成

.
├── your_script.py
├── documents/             # PDF格納フォルダ
├── .env                   # APIキー
├── requirements.txt       # 依存ライブラリ(任意)
└── README.md

📌 今後の拡張案

  • FAISSインデックスをMongoDB Atlas Vector Searchに置き換え
  • ハイブリッド検索やリランキング導入による検索精度の向上
  • PDFの前処理パイプラインを最適化し、処理速度と精度を向上
  • EC2の代替としてAWS Fargateを用いたスケーラブルなコンテナベースの運用に移行
  • ユーザーごとの履歴保存
  • ストリーミング対応(リアルタイム応答)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages