アーキテクチャ設計

全体アーキテクチャ

┌─────────────────────────────────────────────────────────────────┐
│                      Ego Pod(自我意識カプセル)                   │
│                                                                 │
│  ┌───────────┐    ┌───────────┐    ┌───────────┐    ┌────────┐ │
│  │データコレクター│───→│コーパスコンパイラー│───→│ 訓練エンジン │───→│バージョン管理│ │
│  │ Collector  │    │ Compiler  │    │ Trainer   │    │ Vault  │ │
│  └───────────┘    └───────────┘    └───────────┘    └────────┘ │
│       ↑                                                  ↓      │
│  ┌─────────┐                                      ┌──────────┐ │
│  │データソース設定│                                   │ Ego 出力  │ │
│  │ Sources  │                                      │ Editions │ │
│  └─────────┘                                      └──────────┘ │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                    設定センター(Config)                   │   │
│  │ ベース選定 · Edition 定義 · 訓練パラメーター · データソースマッピング · スケジュール │
│  └──────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

モジュール説明

1. データコレクター(Collector)

設定で指定されたデータソースからホストデータを読み取ります。

対応データソースタイプ:

  • ローカルディレクトリ(ファイルシステムパス)
  • URL(HTTP/HTTPS エンドポイント)
  • クラウドストレージ(S3、OSS、Google Drive など、プラグインで拡張)
  • カスタムアダプター(ユーザーが収集プラグインを作成可能)

収集するデータカテゴリ(iFay アーキテクチャ対応):

データカテゴリ対応 iFay モジュール現実の例
知覚データSense毎日の運動軌跡、スマートフォン使用時間分布、よく行くレストランの位置、睡眠時間パターン
行動データActionスマートフォンでの操作習慣(いつも LINE を先に見てからメールを見る)、よく使うショートカット、自動化スクリプト
認知データThought読書メモ、業務日誌、学習ノート、技術方案への評価と思考プロセス
スキルデータSkill使えるプログラミング言語と習熟度、得意なレシピ、演奏できる楽器と曲目リスト
認証データCredentials身元識別子、認可範囲(例:代わりにメールは送れるが送金はできない)、権限境界

例えば:フリーランス翻訳者の Collector 設定はこのようになるかもしれない——Sense は翻訳メモリ(ローカルディレクトリ)を指し、Action は CAT ツールの操作ログ(URL)を指し、Thought は用語ノート(クラウドストレージ)を指し、Skill は言語ペアと専門分野リスト(ローカルファイル)を指す。

Collector はデータの内部フォーマットには関心がなく(それは姉妹プロジェクトが定義)、「どこから取得するか」と「取得したのはどのカテゴリのデータか」だけに関心があります。

2. コーパスコンパイラー(Compiler)

収集した生データを LoRA 訓練に使用可能なコーパスに変換します。

コア責務:

  • データクレンジングと匿名化 — 特に Credentials 関連データ。例:API キー sk-abc123...[REDACTED] に置換され、訓練データに機密情報が含まれないことを保証
  • フォーマット標準化 — 訓練フレームワークが受け入れ可能なフォーマットに統一。例:読書メモ「この本は分散システムの CAP 定理について...」が {"instruction": "CAP 定理を説明して", "output": "CAP 定理は分散システムの..."} に変換
  • コーパス分類 — LoRA レイヤー別にグループ化。例:「アメリカンコーヒーが好き」は嗜好レイヤーに、「2024年に日本旅行した」は記憶レイヤーに、「Python の GIL メカニズムは...」は知識レイヤーに分類
  • 品質フィルタリング — ノイズデータ、重複データを除去。例:重複チャット記録は1つだけ保持、短すぎる断片(「うん」「了解」など)はフィルタリング
  • データ拡張 — 必要に応じてテンプレートやリライトでコーパスを拡充。例:元データ「曲をおすすめして」が「別の言い方で表現して:曲をおすすめして」「言い換えて:曲をおすすめして」に拡張

出力フォーマット:

  • 標準的な指示ファインチューニングデータセット(instruction/input/output 三つ組)
  • 対話形式データセット(multi-turn conversation)
  • LoRA レイヤー別にグループ化されたサブデータセット

3. 訓練エンジン(Trainer)

選定したベースと構築済みコーパスに基づいて、LoRA アダプターを訓練します。

マルチバックエンド自動適応:

Trainer はハードウェア環境を自動検出し、最適な訓練バックエンドを選択します:

優先度バックエンド適用環境速度
1UnslothNVIDIA GPU (CUDA)最速(2x 高速化)
2HuggingFace PEFTNVIDIA GPU (CUDA)標準速度
3Apple MLXMac (Apple Silicon)ネイティブ高速化
4HuggingFace PEFTCPU のみ遅いが汎用
5StubML 依存なしシミュレーションモード(開発/テスト用)

どのバックエンドを使うか気にする必要はありません——Ego Pod が自動選択します。RTX 4090 があれば Unsloth で高速化、MacBook Pro M3 なら MLX を使用、まずフローを試したいだけなら Stub モードでシミュレーション訓練。

訓練フロー:

  1. ベースモデルをロード(4-bit 量子化)
  2. LoRA レイヤー別に順次アダプターを訓練
  3. 訓練効果を検証(自動整合度評価)
  4. 各 edition に対応するベース+LoRA の組み合わせを生成

マルチ Edition 訓練戦略:

  • 各 edition は異なる規模のベースを使用
  • 同一コーパスで、異なるベースに対してそれぞれ LoRA を訓練
  • 複数 edition の並列訓練が可能

例えば:GPU 搭載のデスクトップ PC で ego train を実行すると、Ego Pod がスマートウォッチ(lite)、スマートフォン(normal)、PC(plus)の3バージョンの LoRA を同時に訓練します。全プロセスは約 10-30 分、データ量に依存します。

4. バージョン管理(Vault)

Ego モデルのバージョンと出力を管理します。

責務:

  • 各訓練で生成された LoRA アダプターを保存
  • 複数 edition のモデルファイルを管理
  • バージョンロールバックをサポート(履歴バージョンを保持)
  • 旧バージョンの上書き(デフォルト動作)
  • 配布可能な Ego パッケージとしてエクスポート

例えば:先週 Ego を訓練し(v0.1.0)、今週新しいデータを追加して再訓練(v0.2.0)。新バージョンの回答スタイルが変わって、あなたらしくなくなった。この時、ワンクリックで v0.1.0 にロールバックできます。スマートフォンの OS ダウングレードのように。

Ego パッケージ構造:

ego-output/
├── manifest.json              # Ego メタデータ(バージョン、ベース情報、edition リスト)
├── lite/
│   ├── config.json            # edition 設定(ベース型番、量子化方式、ハードウェア要件)
│   └── adapters/
│       └── ego-lora.safetensors  # LoRA アダプター重み
├── normal/
│   ├── config.json
│   └── adapters/
│       └── ego-lora.safetensors
├── plus/
│   ├── config.json
│   └── adapters/
│       └── ego-lora.safetensors
├── super/
│   ├── config.json
│   └── adapters/
│       └── ego-lora.safetensors
└── [custom-name]/             # ユーザーカスタム edition
    ├── config.json
    └── adapters/
        └── ego-lora.safetensors

5. 設定センター(Config)

Ego Pod のすべての設定を統一管理します。

設定項目:

# ego-config.yaml 例

# データソースマッピング — Ego Pod にデータの場所を教える
sources:
  sense:
    type: "local"
    path: "/data/ifay/sense/"          # 知覚データディレクトリ
  action:
    type: "url"
    endpoint: "https://api.example.com/action-logs"  # 行動ログ API
  thought:
    type: "local"
    path: "/data/ifay/thought/"        # メモと知識ベース
  skill:
    type: "s3"
    bucket: "ifay-skills"              # クラウドスキルデータ
    prefix: "user-001/"
  credentials:
    type: "local"
    path: "/data/ifay/credentials/"    # 認証データ(自動匿名化)

# 訓練パラメーター — 通常変更不要、デフォルト値がほとんどのシナリオに適合
training:
  method: "qlora"
  quantization: "4bit"
  lora_rank: 16
  lora_alpha: 32
  learning_rate: 2e-4
  epochs: 3
  batch_size: 4

# Edition 定義 — 出力したいバージョン
editions:
  lite:
    base: "qwen3.5-0.8B"
    description: "スマートウォッチ、ボイスレコーダー、ドローン、IoT"
  normal:
    base: "qwen3.5-2B"
    description: "スマートフォン、タブレット"
  plus:
    base: "qwen3.5-4B"
    description: "ハイパフォーマンス PC、ローカルサーバー"
  super:
    base: "qwen3.5-27B"
    description: "クラウドサービス、GPU クラスター"
  # カスタム edition を追加可能、例:
  # clinic:
  #   base: "qwen3.5-4B"
  #   description: "外来診療専用版"

# スケジュール戦略 — いつ自動再訓練するか
schedule:
  auto_update: true
  interval: "weekly"          # 毎週自動修練
  trigger: "data_change"      # または manual(手動トリガー)/ cron(定期タスク)