NFC Global Market Chaser システム設計書 (Architecture)
当ブログで構築中の「24時間全自動のAI経済ニュース局(NFC)」は、どのように動き、どのように管理されているのか。本ページでは、システムの全体像とデータの流れ(アーキテクチャ)を公開します。
1. システムの思想 (Philosophy)
このシステムは、「番組ごとの完全な独立性(疎結合)」 を最優先して設計されています。 新しいコーナー(例:新しい経済指標、決算速報など)を追加する際、システムの根幹である「司令塔」や「編集室」のコードを一切変更せず、「新しいプロデューサー(Pythonファイル)を追加するだけ」で実現できるプラグイン構造を採用しています。
また、AI特有の幻覚(ハルシネーション)やデータ取得エラーによる「誤報」を防ぐため、本番環境への配信前に人間のチェックを挟む「ヒューマン・イン・ザ・ループ(Human-in-the-Loop)」の思想を取り入れているのが最大の特徴です。
2. データの流れ (Data Pipeline)
全体のパイプラインは、大きく分けて「制作」「承認」「放送」「広報」の4つのラインで構成されています。
graph TD
%% --- 左側:制作フロー (非同期) ---
subgraph Production_Line ["1. 制作ライン"]
Scheduler["nfc_scheduler.py
編成局"] -->|1. 指示| Station
Station["main_station.py
司令塔"] -->|2. 発注| Producer["producers/*.py
制作部"]
Producer -->|3. 原稿・音声生成| Station
Station -->|4. 素材渡し| Composer["nfc_video_composer.py
編集室"]
Composer -->|5. 完パケ動画納品| Station
end
%% --- 中央:承認フロー (ヒューマンインザループ) ---
subgraph Approval_Line ["2. 承認・検閲ライン"]
Station -->|6. プレビュー送信| Slack["Slack API
★局長スマホへ通知"]
Slack -->|7. 承認ボタン押下| Station
end
%% --- 右側:送出・表示フロー (リアルタイム) ---
subgraph OnAir_Line ["3. 放送・送出ライン"]
HUD_Server["hud_server.py
★リアルタイムHUD"] -.->|HTML常時配信| OBS
Station -->|8a. 再生指示| OBS_Ctrl["OBS Websocket"]
Station -->|動画保存| Storage[("Video Storage")]
Storage -->|読込| OBS["OBS Studio
配信ソフト"]
OBS -->|合成出力| YouTube["YouTube Live"]
end
%% --- 下側:広報フロー ---
subgraph SNS_PR ["4. 広報ライン"]
Station -->|8b. 広報依頼| SNS_Manager["nfc_sns_manager.py
SNS広報局"]
SNS_Manager --> X_API["X / Twitter"]
SNS_Manager --> Shorts_Gen["YouTube Shorts"]
end
%% スタイル定義
style HUD_Server fill:#ffaaaa,stroke:#333,stroke-width:2px
style OBS fill:#444,stroke:#f00,stroke-width:4px,color:#fff
style Slack fill:#e1bee7,stroke:#8e24aa,stroke-width:2px
3. モジュール詳細と責任範囲
システムが複雑化(スパゲッティ化)するのを防ぐため、各スクリプトファイルには明確な「やっていいこと」と「責任範囲」を定めています。
| ファイル名 | 役割 | 責任範囲 (やっていいこと) |
nfc_scheduler.py | 編成局 | 時刻表の管理のみ。「何時にどの番組を呼ぶか」だけを知っている。 |
main_station.py | 司令塔 | システムの起動とループ処理。各部署への指示出し、エラー監視とリトライの統括。 |
nfc_video_composer.py | 編集室 | 「レイアウトの遵守」。渡された画像を所定の位置に配置し、動画化する。 |
slack_approval.py | スラック連携局 | 完成した動画をSlackに投げ、人間が「承認」した時のみロックを解除する最後の砦。 |
producers/*.py | 制作担当 | 独自のデータ取得、独自の画像生成、独自のプロンプトによる原稿作成を行う。 |
nfc_sns_manager.py | SNS広報局 | Xへのポスト、ショート動画の生成とYouTubeアップロードを一手に引き受ける。 |
hud_server.py | HUD送出 | OBS上にリアルタイムの市場データ(為替・金利・番組予定)を常時表示するためのHTML(テロップ)を生成・配信し続ける。 |
今後、この設計図をベースに、各プロデューサーが裏側でどのように動いているのか、実際のPythonコードやプロンプトを順次公開していきます。