./docs/全体構成図.md
---
title: 時代考証アシストAIシステム - 全体構成図
---
graph TB
subgraph "フロントエンド (Next.js)"
UI[ユーザーインターフェース]
ChatInput[チャット入力<br/>画像/テキスト]
AgentResponse[エージェント応答表示]
ThemeProvider[テーマプロバイダー]
end
subgraph "バックエンドAPI (FastAPI)"
API[POST /api/analyze]
JobAPI[GET /api/jobs/:job_id]
AgentListAPI[GET /api/agents]
StreamLogic[ストリーミング処理]
AsyncJobLogic[非同期ジョブ処理]
end
subgraph "時代考証エージェント (LangGraph)"
TaskMgr[タスク管理エージェント]
ListAll[文字・物体列挙エージェント]
ListUp[検証観点リストアップエージェント<br/>画像]
ListUpText[検証観点リストアップエージェント<br/>テキスト]
Verify[検証エージェント<br/>アンサンブル判定]
TaskMgr -->|画像入力| ListAll
TaskMgr -->|画像入力| ListUp
TaskMgr -->|テキスト入力| ListUpText
TaskMgr --> Verify
ListAll -->|enumerated_items| TaskMgr
ListUp -->|observations| TaskMgr
ListUpText -->|observations| TaskMgr
Verify -->|verifications| TaskMgr
end
subgraph "LLMモデル (LiteLLM経由)"
GPT5[GPT-5-mini<br/>デフォルト]
GPT52[GPT-5.2<br/>アンサンブル]
Claude[Claude Sonnet 4<br/>アンサンブル]
Gemini[Gemini 2.5 Flash<br/>アンサンブル]
GPT5Search[GPT-5<br/>検索用]
end
subgraph "外部ツール"
WebSearch[Web検索ツール<br/>DuckDuckGo]
ImageSearch[画像検索ツール<br/>DuckDuckGo]
end
subgraph "AWS/LocalStack (非同期モード)"
Lambda[Lambda Worker]
S3[S3バケット<br/>results/]
S3Input[S3バケット<br/>inputs/]
end
UI --> ChatInput
ChatInput -->|POST /api/analyze| API
API -->|同期モード| StreamLogic
API -->|非同期モード| AsyncJobLogic
StreamLogic --> TaskMgr
AsyncJobLogic --> Lambda
Lambda --> TaskMgr
Lambda -->|結果保存| S3
AsyncJobLogic -->|画像/テキスト保存| S3Input
JobAPI -->|ロングポーリング| S3
JobAPI --> AgentResponse
AgentListAPI --> UI
ListAll --> GPT5
ListUp --> GPT5
ListUpText --> GPT5
Verify -->|Phase1: 曖昧さ判定| GPT52
Verify -->|Phase1: 曖昧さ判定| Claude
Verify -->|Phase1: 曖昧さ判定| Gemini
Verify -->|Phase2: 検索実行| GPT5Search
GPT5Search --> WebSearch
GPT5Search --> ImageSearch
TaskMgr -->|最終結果| StreamLogic
TaskMgr -->|最終結果| Lambda
style TaskMgr fill:#e1f5ff
style ListAll fill:#fff4e6
style ListUp fill:#fff4e6
style ListUpText fill:#fff4e6
style Verify fill:#e8f5e9
style API fill:#f3e5f5
style Lambda fill:#fce4ec