0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカル文書に聞いたら答えてくれるQAアプリを作ってみた【Python × Streamlit × LLM】

Posted at

きっかけ

こんにちは!
最近、RAG(Retrieval-Augmented Generation)の動きをちゃんと理解してみたくていろいろ調べているのですが、クラウドサービスが主流の中、なかなかイメージしづらいものがありますよね。

で、どうせならローカルのPDFとかテキストに質問できるようなアプリにしたら面白そうだなと。
そうして作ったのが、LocalQA というWebアプリです。

手元のファイルを読み込んで、AIに「これどういうこと?」って聞いたら、ちゃんと中身を読んで答えてくれる。
実際に動かしてみると、思った以上に便利でびっくりしました。


できること

LocalQAでは、以下のようなことができます。

  • PDFやTXT、DOCXファイルをアップロードしてデータベース化
  • 文書の内容を自然言語で質問し、AIが回答
  • 回答の出典(元文書の一部)を表示
  • 関連する質問を自動で提案
  • データベースごとの統計やチャンク分布を可視化

セットアップ

Python環境で動きます。以下で起動できます。

git clone https://github.com/your_username/localqa.git
cd localqa
pip install -r requirements.txt

次に、.env ファイルを作成して、OpenAIのAPIキーを設定します。

OPENAI_API_KEY=your_api_key_here

アプリ起動:

streamlit run app.py

ブラウザが開いてWebアプリが立ち上がります。


データベースの作成と管理

サイドバーから「データベース管理」を選びます。

  • 新しいデータベースを作成
  • 既存のデータベースを選択(ラジオボタン)
  • 削除や初期化も可能です。

ファイルは複数同時にアップロード可能。対応フォーマットは PDF, TXT, DOCX

アップロードが完了すると、自動でチャンク分割(500文字 + オーバーラップ100文字)が行われ、埋め込み処理が始まります。


質問してみる

「質問応答」タブを開き、使用するデータベースを選びます。

質問を入力し、「質問する」ボタンをクリックすると、以下の情報が返ってきます。

  • AIによる回答
  • 出典テキスト(チャンク)
  • 関連質問の提案

データベース分析機能

アップロードされた文書やチャンクの状況をグラフと表で確認できます。

  • 総チャンク数
  • 総ファイル数
  • 総文字数
  • 平均チャンク長
  • チャンク長の分布
  • ファイルごとのチャンク数・文字数など

技術スタック

LocalQA は以下の技術で構成されています。

  • Python 3.9+
  • Streamlit:UI構築
  • OpenAI:埋め込み&質問応答
  • FAISS / ChromaDB:ベクトル検索
  • PyMuPDF, python-docx:ファイル読み込み
  • LangChain / LlamaIndex:一部機能に使用可能(拡張予定)

プロジェクト構成は以下の通りです:

local_qa/
├── app.py # Streamlitアプリの本体
├── file_loader.py # ファイル読み込み
├── embedder.py # 埋め込み処理
├── vector_store.py # ベクトルDB管理
├── qa_engine.py # 質問応答ロジック
├── config.py # 各種設定
├── logger.py # ログ出力
├── logs/ # ログ保存先
├── data/ # アップロードファイル格納
├── index/ # ベクトルDB格納先
├── requirements.txt
└── README.md

注意点

  • OpenAI APIキーが必要(.envファイルで管理)
  • ファイルサイズ上限は200MBまで
  • チャンク分割は自動(変更可能)
  • データベース削除は復元不可なので注意
  • 音声ではなく、テキストベースの応答です(音声対応は検討中)

GitHub

コードは以下で公開しています:

📎 https://github.com/mtrtrdev/localqa

スターしてもらえると嬉しいです!


日々のファイル整理と知識活用に、AIとの自然なやりとりができるLocalQA。
業務でも趣味でも、ローカルデータの新しい活かし方として、ぜひ使ってみてください。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?