システム全体像(Architecture)

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.pySNS広報局Xへのポスト、ショート動画の生成とYouTubeアップロードを一手に引き受ける。
hud_server.pyHUD送出OBS上にリアルタイムの市場データ(為替・金利・番組予定)を常時表示するためのHTML(テロップ)を生成・配信し続ける。

今後、この設計図をベースに、各プロデューサーが裏側でどのように動いているのか、実際のPythonコードやプロンプトを順次公開していきます。