./knowledge-base/docs/PROJECT_STRUCTURE.md

# Historical Research System - プロジェクト構造

```
HistorycalResearch/
│
├── README.md                              # プロジェクト概要
├── .gitignore                             # Git除外設定
├── deploy.sh                              # 自動デプロイスクリプト
├── era-list.json                          # 時代区分マスタ(元ファイル)
│
├── 仕様書_基本機能.md                      # 基本機能の詳細仕様書
├── 仕様書_基本機能_フロントエンド.md        # フロントエンド仕様書
├── 仕様書_時代考証アシスト.md              # 時代考証アシスト機能仕様(今回は未実装)
├── NHKAPIアクセスガイド.md                 # NHK AI Platform APIガイド
│
├── cdk/                                   # AWS CDKプロジェクト
│   ├── bin/
│   │   └── historical-research.ts        # CDKエントリーポイント
│   ├── lib/
│   │   └── historical-research-stack.ts  # メインCDKスタック定義
│   ├── package.json                       # Node.js依存関係
│   ├── tsconfig.json                      # TypeScript設定
│   └── cdk.json                           # CDK設定
│
├── lambda/                                # Lambda関数群
│   │
│   ├── layers/                            # Lambda Layer(共通ライブラリ)
│   │   └── common/
│   │       ├── python/
│   │       │   ├── utils.py              # ユーティリティ関数
│   │       │   └── aws_clients.py        # AWSクライアント
│   │       └── requirements.txt          # Python依存パッケージ
│   │
│   ├── upload-handler/                    # 画像アップロード処理
│   │   ├── handler.py                    # メイン処理
│   │   └── requirements.txt
│   │
│   ├── image-analyzer/                    # Claude Sonnet 4.5画像解析
│   │   ├── handler.py                    # 画像解析処理
│   │   └── requirements.txt
│   │
│   ├── embedding-generator/               # Titan Text V2エンベディング生成
│   │   ├── handler.py                    # エンベディング生成処理
│   │   └── requirements.txt
│   │
│   ├── search-api/                        # セマンティック検索API
│   │   ├── handler.py                    # 検索処理
│   │   └── requirements.txt
│   │
│   ├── bulk-processor/                    # 一括アップロード処理
│   │   ├── handler.py                    # 一括処理
│   │   └── requirements.txt
│   │
│   └── dlq-processor/                     # DLQ再処理
│       ├── handler.py                    # DLQ処理
│       └── requirements.txt
│
├── frontend/                              # Reactフロントエンド
│   ├── public/                           # 静的ファイル
│   ├── src/
│   │   ├── api/
│   │   │   └── client.ts                # APIクライアント
│   │   ├── components/                  # 共通コンポーネント(今後追加)
│   │   ├── pages/
│   │   │   ├── SearchPage.tsx          # 検索ページ
│   │   │   └── UploadPage.tsx          # アップロードページ
│   │   ├── types/
│   │   │   └── index.ts                # TypeScript型定義
│   │   ├── App.tsx                     # ルートコンポーネント
│   │   └── main.tsx                    # エントリーポイント
│   ├── index.html                       # HTMLテンプレート
│   ├── package.json                     # Node.js依存関係
│   ├── tsconfig.json                    # TypeScript設定
│   ├── vite.config.ts                   # Vite設定
│   ├── .env.example                     # 環境変数例
│   └── README.md                        # フロントエンドREADME
│
├── prompts/                               # プロンプト管理
│   ├── image-analysis/
│   │   ├── main.txt                     # 画像解析プロンプト
│   │   └── json-schema.json             # Claude出力スキーマ
│   └── master/
│       └── era-list.json                # 時代区分マスタ
│
└── docs/                                  # ドキュメント
    ├── DEPLOYMENT.md                      # 完全デプロイガイド
    └── opensearch-setup.md                # OpenSearchセットアップ
```

## 主要ファイルの説明

### CDK(インフラストラクチャ)

- **cdk/lib/historical-research-stack.ts**: すべてのAWSリソースを定義
  - S3バケット(3つ)
  - DynamoDB(処理ステータステーブル)
  - OpenSearch(ベクトル検索)
  - SQS(イメージ解析キュー、エンベディングキュー、DLQ)
  - Lambda関数(6つ)
  - API Gateway(REST API)
  - CloudFront(CDN配信)
  - VPC設定(既存VPC参照)

### Lambda関数

1. **upload-handler**: 
   - POST /process/upload - 単一画像アップロード
   - GET /process/status/{page_id} - ステータス取得

2. **image-analyzer**:
   - SQSトリガー
   - LiteLLM (Claude Sonnet 4.5)で画像解析
   - OpenSearchにドキュメント作成

3. **embedding-generator**:
   - SQSトリガー
   - OpenSearchから全属性取得
   - Bedrock Titan Text V2でエンベディング生成
   - OpenSearchに更新

4. **search-api**:
   - POST /search - テキスト検索
   - POST /search/image - 画像検索(未実装)
   - kNN検索でセマンティック検索

5. **bulk-processor**:
   - POST /process/bulk - 一括アップロード
   - 複数画像を同時処理

6. **dlq-processor**:
   - DLQトリガー
   - 失敗メッセージを再処理
   - リトライ回数管理

### フロントエンド

- **React 18 + TypeScript + Vite**
- **Material-UI v5**: UIコンポーネント
- **TanStack Query**: データフェッチング・キャッシング
- **React Router**: ルーティング

主要ページ:
- `/search`: 検索ページ
- `/upload`: アップロードページ

### プロンプトファイル

- **image-analysis/main.txt**: Claude Sonnet 4.5用プロンプト
- **image-analysis/json-schema.json**: Claude出力のJSONスキーマ
- **master/era-list.json**: 14時代区分マスタ

## データフロー

```
1. 画像アップロード
   Frontend → API Gateway → upload-handler → S3 + DynamoDB → SQS

2. 画像解析
   SQS → image-analyzer → LiteLLM(Claude) → OpenSearch → SQS

3. エンベディング生成
   SQS → embedding-generator → OpenSearch → Bedrock(Titan) → OpenSearch

4. 検索
   Frontend → API Gateway → search-api → OpenSearch(kNN) → Frontend
```

## デプロイ済みリソース

| リソース | 名前 | 説明 |
|---------|------|------|
| S3 | historical-research-images | 画像保存 |
| S3 | historical-research-web | フロントエンド配信 |
| S3 | historical-research-prompts | プロンプト管理 |
| DynamoDB | historical-research-processing-status | 処理ステータス |
| OpenSearch | historical-research-pages | ベクトル検索インデックス |
| SQS | historical-research-image-analysis-queue | 画像解析キュー |
| SQS | historical-research-embedding-queue | エンベディングキュー |
| Lambda | historical-research-* | 6つの処理関数 |
| API Gateway | historical-research-basic-api | REST API |
| CloudFront | - | CDN配信 |

## 次のステップ

1. **テストデータの投入**: サンプル画像をアップロード
2. **検索精度の検証**: セマンティック検索の精度確認
3. **プロンプトの最適化**: Claude Sonnet 4.5の出力品質向上
4. **フロントエンドの拡張**: 詳細ページ、履歴管理など
5. **時代考証アシスト機能の実装**: 次フェーズ