アーキテクチャ概要
システム構成
┌─────────────────────────────────────────────────────────────────┐
│ ユーザー │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Static Web App │
│ (React + Vite) │
│ - チャットUI │
│ - PDF ビューワー │
│ - 履歴管理 │
│ - 認証UI │
└─────────────────────────────────────────────────────────────────┘
│ HTTPS
▼
┌─────────────────────────────────────────────────────────────────┐
│ Azure Functions │
│ (Python 3.9) │
│ │
│ /api/search → 検索API │
│ /api/summarize → 要約生成API │
│ /api/direct-answer → 直接回答API │
│ /api/reference → 参照取得API │
│ /api/auth/* → 認証API │
│ /api/manage/* → 管理API │
└─────────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Azure AI Search │ │ Azure OpenAI │ │ Table Storage │
│ │ │ │ │ │
│ - ベクトル検索 │ │ - GPT-4o │ │ - ユーザー管理 │
│ - ハイブリッド検索│ │ - Embeddings │ │ │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│
▼
┌──────────────────┐
│ Blob Storage │
│ │
│ - PDF ドキュメント│
│ - チャンクデータ │
└──────────────────┘
技術スタック
フロントエンド
| 技術 |
バージョン |
用途 |
| React |
18.x |
UIフレームワーク |
| TypeScript |
5.x |
型安全性 |
| Vite |
5.x |
ビルドツール |
| Tailwind CSS |
3.x |
スタイリング |
バックエンド
| 技術 |
バージョン |
用途 |
| Python |
3.9 |
ランタイム |
| Azure Functions |
v4 |
サーバーレス実行環境 |
| OpenAI SDK |
1.x |
Azure OpenAI連携 |
| PyJWT |
2.x |
JWT認証 |
| bcrypt |
4.x |
パスワードハッシュ |
Azure サービス
| サービス |
用途 |
| Azure Static Web Apps |
フロントエンドホスティング |
| Azure Functions |
バックエンドAPI |
| Azure AI Search |
ベクトル検索 |
| Azure OpenAI |
LLM(GPT-4o)、Embedding |
| Azure Blob Storage |
ドキュメント保存 |
| Azure Table Storage |
ユーザーデータ |
| Azure Key Vault |
シークレット管理 |
| Application Insights |
監視・ログ |
データフロー
質問→回答フロー
1. ユーザーが質問を入力
│
▼
2. /api/search でドキュメント検索
- Azure AI Search でハイブリッド検索
- 関連チャンクを取得
│
▼
3. /api/direct-answer または /api/summarize で回答生成
- GPT-4o にコンテキストと質問を送信
- 引用情報付きの回答を生成
│
▼
4. フロントエンドで回答表示
- Markdown レンダリング
- 引用リンク表示
引用スコアリング
検索結果から最適な引用を選択:
1. 規程本文(第○条)を優先 → +100点
2. 手続き書類にペナルティ → -80点
3. トピック関連キーワード → +15点/各
ディレクトリ構成
KnowledgeYardV2/
├── app/
│ ├── api/ # バックエンド(Azure Functions)
│ │ ├── routes/ # APIエンドポイント
│ │ │ ├── auth.py # 認証API
│ │ │ ├── admin.py # 管理API
│ │ │ ├── search.py # 検索API
│ │ │ ├── summarize.py # 要約API
│ │ │ ├── direct_answer.py # 直接回答API
│ │ │ └── reference.py # 参照API
│ │ ├── services/ # ビジネスロジック
│ │ │ ├── auth.py # 認証サービス
│ │ │ └── table_storage.py # Table Storage操作
│ │ ├── prompts/ # プロンプトテンプレート
│ │ └── function_app.py # エントリポイント
│ │
│ └── web/ # フロントエンド(React)
│ ├── src/
│ │ ├── components/ # Reactコンポーネント
│ │ ├── lib/ # ユーティリティ
│ │ └── App.tsx # メインアプリ
│ └── vite.config.ts
│
├── data/ # データファイル
│ ├── source_pdfs/ # 元PDF
│ └── chunks_v4.jsonl # チャンクデータ
│
├── ingest/ # データ取り込み
├── search/ # 検索クライアント
├── scripts/ # 運用スクリプト
├── docs/ # ドキュメント
└── .env # 環境変数
関連ドキュメント