maluyuu/RAG-InputPrediction

Python

0

3 commits

updated Nov 10, 2025

See the code

README

RAG Input Prediction App

Google の Project VOICE にインスパイアされた、LLM と RAG 技術を用いた入力予測アプリケーションです。

特徴

  • AI駆動の入力予測: Gemini API を使用して、入力途中の文章の続きを予測
  • RAGによるコンテキスト参照: 過去の入力をFAISSベクトルデータベースに保存し、関連する文章を参照して予測精度を向上
  • 日本語特化: ruri-v3-30m 埋め込みモデルによる高精度な日本語ベクトル化
  • モダンなWebUI: 直感的で使いやすいインターフェース
  • リアルタイム統計: 保存された文章数やベクトルDBのサイズをリアルタイム表示

技術スタック

バックエンド

  • FastAPI: 高速なPython Webフレームワーク
  • Gemini API (gemini-2.0-flash): テキスト生成
  • ruri-v3-30m: 日本語埋め込みモデル (256次元, 最大8192トークン)
  • FAISS: Facebook製の高速ベクトル類似検索ライブラリ
  • Transformers: Hugging Face のモデル統合

フロントエンド

  • Vanilla JavaScript: シンプルで高速
  • CSS3: モダンなグラデーションとアニメーション
  • Responsive Design: モバイル対応

アーキテクチャ

Frontend (HTML/CSS/JS)
    ↓ HTTP REST API
Backend (FastAPI)
    ├── Gemini API Client (テキスト予測)
    ├── RAG System (FAISS + ruri-v3-30m)
    │   ├── Embedding Generation
    │   └── Vector Similarity Search
    └── FAISS Index Storage

プロジェクト構造

RAG-InputPrediction/
├── backend/
│   ├── main.py              # FastAPIメインアプリケーション
│   ├── rag_system.py        # RAGシステム (FAISS + ruri-v3-30m)
│   ├── gemini_client.py     # Gemini APIクライアント
│   └── requirements.txt     # Python依存関係
├── frontend/
│   ├── index.html           # メインHTML
│   ├── style.css            # スタイルシート
│   └── app.js               # フロントエンドJavaScript
├── data/
│   └── faiss_index/         # FAISSインデックス保存先
├── .env.example             # 環境変数テンプレート
└── README.md                # このファイル

セットアップ

1. 前提条件

  • Python 3.9 以上
  • pip (Pythonパッケージマネージャー)
  • Gemini API キー (Google AI Studio で取得)

2. インストール

# リポジトリのクローン (または移動)
cd RAG-InputPrediction

# Python依存関係のインストール
cd backend
pip install -r requirements.txt

注意: 初回起動時、ruri-v3-30m モデル(約150MB)が自動的にダウンロードされます。

3. 環境変数の設定

# プロジェクトルートで .env ファイルを作成
cp .env.example .env

# .env ファイルを編集して Gemini API キーを設定
# GEMINI_API_KEY=your_actual_api_key_here

4. アプリケーションの起動

方法1: クイックスタートスクリプト使用(推奨)

./start.sh

方法2: 手動起動

# 仮想環境をアクティベート
source .venv/bin/activate

# backendディレクトリから起動
cd backend
python main.py

サーバーは http://localhost:8000 で起動します。

5. ブラウザでアクセス

ブラウザで http://localhost:8000 を開きます。

使い方

  1. テキストを入力: テキストエリアに文章を途中まで入力
  2. 予測を実行: 「続きを予測」ボタンをクリック
  3. 候補を選択: 表示された予測候補をクリックして入力に追加
  4. 文章を保存: 完成した文章を「保存」ボタンでベクトルDBに保存
  5. 履歴を参照: 過去の予測履歴から文章を復元可能

コンテキスト参照機能

  • 「過去の入力を参照」にチェックを入れると、保存された関連文章を参照して予測を生成
  • 関連する過去の入力が「参照された過去の入力」セクションに表示されます

API エンドポイント

POST /predict

テキスト予測を実行

リクエスト:

{
  "text": "今日は天気が",
  "num_suggestions": 3,
  "use_context": true
}

レスポンス:

{
  "suggestions": ["良いですね", "悪いです", "曇りです"],
  "context_used": ["昨日は天気が良かった"]
}

POST /save

文章をベクトルDBに保存

リクエスト:

{
  "text": "今日は天気が良いです"
}

GET /stats

統計情報を取得

レスポンス:

{
  "total_texts": 42,
  "index_size": 42
}

GET /search?query=天気&k=5

類似文章を検索

技術的な詳細

ruri-v3-30m エンベディング

ruri-v3-30m は名古屋大学が開発した日本語特化の埋め込みモデルです:

  • 次元数: 256次元
  • 最大トークン数: 8192トークン
  • プレフィックス:
    • 検索クエリ: "検索クエリ: "
    • 検索文書: "検索文書: "
    • セマンティック: 空文字列

FAISSインデックス

  • インデックスタイプ: IndexFlatIP (内積)
  • 正規化: L2正規化済みベクトル
  • 永続化: ファイルシステムに自動保存

Gemini API

  • モデル: gemini-2.0-flash (高速・効率的)
  • パラメータ:
    • Temperature: 0.7
    • Top-p: 0.95
    • Max tokens: 150

トラブルシューティング

モデルのダウンロードが遅い

初回起動時、ruri-v3-30m モデルのダウンロードに時間がかかる場合があります。安定したネットワーク環境で実行してください。

Gemini API エラー

  • API キーが正しく設定されているか確認
  • API の使用制限に達していないか確認
  • Google AI Studio でAPIキーの状態を確認

ポートが既に使用されている

別のポートで起動する場合:

PORT=8080 python main.py

パフォーマンス最適化

  • GPU対応: GPUを使用する場合、requirements.txt の faiss-cpu を faiss-gpu に変更
  • モデルキャッシュ: 一度ダウンロードされたモデルは ~/.cache/huggingface/ にキャッシュされます

参考

謝辞

このプロジェクトは Google の Project VOICE にインスパイアされて開発されました。

maluyuu/RAG-InputPrediction

Python

0

3 commits

updated Nov 10, 2025

See the code

README

RAG Input Prediction App

Google の Project VOICE にインスパイアされた、LLM と RAG 技術を用いた入力予測アプリケーションです。

特徴

  • AI駆動の入力予測: Gemini API を使用して、入力途中の文章の続きを予測
  • RAGによるコンテキスト参照: 過去の入力をFAISSベクトルデータベースに保存し、関連する文章を参照して予測精度を向上
  • 日本語特化: ruri-v3-30m 埋め込みモデルによる高精度な日本語ベクトル化
  • モダンなWebUI: 直感的で使いやすいインターフェース
  • リアルタイム統計: 保存された文章数やベクトルDBのサイズをリアルタイム表示

技術スタック

バックエンド

  • FastAPI: 高速なPython Webフレームワーク
  • Gemini API (gemini-2.0-flash): テキスト生成
  • ruri-v3-30m: 日本語埋め込みモデル (256次元, 最大8192トークン)
  • FAISS: Facebook製の高速ベクトル類似検索ライブラリ
  • Transformers: Hugging Face のモデル統合

フロントエンド

  • Vanilla JavaScript: シンプルで高速
  • CSS3: モダンなグラデーションとアニメーション
  • Responsive Design: モバイル対応

アーキテクチャ

Frontend (HTML/CSS/JS)
    ↓ HTTP REST API
Backend (FastAPI)
    ├── Gemini API Client (テキスト予測)
    ├── RAG System (FAISS + ruri-v3-30m)
    │   ├── Embedding Generation
    │   └── Vector Similarity Search
    └── FAISS Index Storage

プロジェクト構造

RAG-InputPrediction/
├── backend/
│   ├── main.py              # FastAPIメインアプリケーション
│   ├── rag_system.py        # RAGシステム (FAISS + ruri-v3-30m)
│   ├── gemini_client.py     # Gemini APIクライアント
│   └── requirements.txt     # Python依存関係
├── frontend/
│   ├── index.html           # メインHTML
│   ├── style.css            # スタイルシート
│   └── app.js               # フロントエンドJavaScript
├── data/
│   └── faiss_index/         # FAISSインデックス保存先
├── .env.example             # 環境変数テンプレート
└── README.md                # このファイル

セットアップ

1. 前提条件

  • Python 3.9 以上
  • pip (Pythonパッケージマネージャー)
  • Gemini API キー (Google AI Studio で取得)

2. インストール

# リポジトリのクローン (または移動)
cd RAG-InputPrediction

# Python依存関係のインストール
cd backend
pip install -r requirements.txt

注意: 初回起動時、ruri-v3-30m モデル(約150MB)が自動的にダウンロードされます。

3. 環境変数の設定

# プロジェクトルートで .env ファイルを作成
cp .env.example .env

# .env ファイルを編集して Gemini API キーを設定
# GEMINI_API_KEY=your_actual_api_key_here

4. アプリケーションの起動

方法1: クイックスタートスクリプト使用(推奨)

./start.sh

方法2: 手動起動

# 仮想環境をアクティベート
source .venv/bin/activate

# backendディレクトリから起動
cd backend
python main.py

サーバーは http://localhost:8000 で起動します。

5. ブラウザでアクセス

ブラウザで http://localhost:8000 を開きます。

使い方

  1. テキストを入力: テキストエリアに文章を途中まで入力
  2. 予測を実行: 「続きを予測」ボタンをクリック
  3. 候補を選択: 表示された予測候補をクリックして入力に追加
  4. 文章を保存: 完成した文章を「保存」ボタンでベクトルDBに保存
  5. 履歴を参照: 過去の予測履歴から文章を復元可能

コンテキスト参照機能

  • 「過去の入力を参照」にチェックを入れると、保存された関連文章を参照して予測を生成
  • 関連する過去の入力が「参照された過去の入力」セクションに表示されます

API エンドポイント

POST /predict

テキスト予測を実行

リクエスト:

{
  "text": "今日は天気が",
  "num_suggestions": 3,
  "use_context": true
}

レスポンス:

{
  "suggestions": ["良いですね", "悪いです", "曇りです"],
  "context_used": ["昨日は天気が良かった"]
}

POST /save

文章をベクトルDBに保存

リクエスト:

{
  "text": "今日は天気が良いです"
}

GET /stats

統計情報を取得

レスポンス:

{
  "total_texts": 42,
  "index_size": 42
}

GET /search?query=天気&k=5

類似文章を検索

技術的な詳細

ruri-v3-30m エンベディング

ruri-v3-30m は名古屋大学が開発した日本語特化の埋め込みモデルです:

  • 次元数: 256次元
  • 最大トークン数: 8192トークン
  • プレフィックス:
    • 検索クエリ: "検索クエリ: "
    • 検索文書: "検索文書: "
    • セマンティック: 空文字列

FAISSインデックス

  • インデックスタイプ: IndexFlatIP (内積)
  • 正規化: L2正規化済みベクトル
  • 永続化: ファイルシステムに自動保存

Gemini API

  • モデル: gemini-2.0-flash (高速・効率的)
  • パラメータ:
    • Temperature: 0.7
    • Top-p: 0.95
    • Max tokens: 150

トラブルシューティング

モデルのダウンロードが遅い

初回起動時、ruri-v3-30m モデルのダウンロードに時間がかかる場合があります。安定したネットワーク環境で実行してください。

Gemini API エラー

  • API キーが正しく設定されているか確認
  • API の使用制限に達していないか確認
  • Google AI Studio でAPIキーの状態を確認

ポートが既に使用されている

別のポートで起動する場合:

PORT=8080 python main.py

パフォーマンス最適化

  • GPU対応: GPUを使用する場合、requirements.txt の faiss-cpu を faiss-gpu に変更
  • モデルキャッシュ: 一度ダウンロードされたモデルは ~/.cache/huggingface/ にキャッシュされます

参考

謝辞

このプロジェクトは Google の Project VOICE にインスパイアされて開発されました。