Архитектура

Общая архитектура

┌─────────────────────────────────────────────────────────────────┐
│                    Ego Pod (Капсула самосознания)                │
│                                                                 │
│  ┌───────────┐    ┌───────────┐    ┌───────────┐    ┌────────┐ │
│  │ Сборщик   │───→│ Компилятор│───→│  Движок   │───→│Хранили-│ │
│  │  данных   │    │  корпуса  │    │ обучения  │    │ще верс.│ │
│  └───────────┘    └───────────┘    └───────────┘    └────────┘ │
│       ↑                                                  ↓      │
│  ┌─────────┐                                      ┌──────────┐ │
│  │ Конфиг  │                                      │ Редакции │ │
│  │источник.│                                      │   Ego    │ │
│  └─────────┘                                      └──────────┘ │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                  Центр конфигурации                        │   │
│  │  Выбор базы · Опред. редакций · Параметры обуч. · Маппинг источн. · Расписание │
│  └──────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

Детали модулей

1. Data Collector (Сборщик данных)

Читает данные владельца из настроенных источников данных.

Поддерживаемые типы источников данных:

  • Локальные каталоги (пути файловой системы)
  • URL-адреса (HTTP/HTTPS-эндпоинты)
  • Облачные хранилища (S3, OSS, Google Drive и т.д., расширяемо через плагины)
  • Пользовательские адаптеры (пользователи могут писать плагины сбора)

Категории собираемых данных (соответствуют архитектуре iFay):

Категория данныхМодуль iFayПример из реальной жизни
Данные восприятияSenseЕжедневные маршруты тренировок, распределение времени использования телефона, часто посещаемые рестораны, паттерны сна
Поведенческие данныеActionПривычки работы с телефоном (всегда проверяет сообщения перед почтой), часто используемые горячие клавиши, скрипты автоматизации
Когнитивные данныеThoughtЗаметки о прочитанном, рабочие журналы, рефлексия об обучении, оценки и мыслительные процессы по техническим решениям
Данные навыковSkillЯзыки программирования и уровни владения, любимые рецепты, музыкальные инструменты и репертуар
Данные учётных записейCredentialsИдентификаторы личности, область авторизации (например, может отправлять письма от вашего имени, но не может делать переводы), границы разрешений

Например: Конфигурация Collector для фрилансера-переводчика может выглядеть так — Sense указывает на её память переводов (локальный каталог), Action указывает на логи операций в CAT-инструменте (URL), Thought указывает на её терминологические заметки (облачное хранилище), Skill указывает на список языковых пар и специализаций (локальный файл).

Collector не заботится о внутреннем формате данных (это определяется смежными проектами) — его интересует только «откуда забирать» и «какая категория данных была получена».

2. Corpus Compiler (Компилятор корпуса)

Преобразует собранные сырые данные в корпус, пригодный для обучения LoRA.

Основные обязанности:

  • Очистка и анонимизация данных — Особенно для данных, связанных с Credentials. Пример: Ваш API-ключ sk-abc123... заменяется на [REDACTED], гарантируя отсутствие конфиденциальной информации в обучающих данных
  • Стандартизация формата — Приведение к форматам, принимаемым фреймворками обучения. Пример: Заметка о прочитанном «Эта книга о теореме CAP в распределённых системах...» преобразуется в {"instruction": "Объясни теорему CAP", "output": "Теорема CAP в распределённых системах..."}
  • Классификация корпуса — Группировка по слоям LoRA. Пример: «Я люблю пить американо» попадает в слой предпочтений, «Путешествовал в Японию в 2024» — в слой памяти, «Механизм GIL в Python — это...» — в слой знаний
  • Фильтрация качества — Удаление шумовых данных и дубликатов. Пример: Дублирующиеся записи чатов сохраняются в одном экземпляре, слишком короткие фрагменты (вроде «ок», «ладно») отфильтровываются
  • Аугментация данных — Расширение корпуса через шаблоны или перефразирование при необходимости. Пример: Исходные данные «Порекомендуй песню» дополняются до «Выразите иначе: Порекомендуй песню», «Перефразируйте: Порекомендуй песню»

Выходные форматы:

  • Стандартный датасет для instruction fine-tuning (тройки instruction/input/output)
  • Датасет в формате диалога (многоходовая беседа)
  • Поднаборы данных, сгруппированные по слоям LoRA

3. Training Engine (Движок обучения)

Обучает LoRA-адаптеры на основе выбранной базовой модели и скомпилированного корпуса.

Мульти-бэкенд автоадаптация:

Trainer автоматически определяет ваше аппаратное окружение и выбирает оптимальный бэкенд обучения:

ПриоритетБэкендОкружениеСкорость
1UnslothNVIDIA GPU (CUDA)Максимальная (ускорение в 2 раза)
2HuggingFace PEFTNVIDIA GPU (CUDA)Стандартная скорость
3Apple MLXMac (Apple Silicon)Нативное ускорение
4HuggingFace PEFTТолько CPUМедленнее, но универсально
5StubБез ML-зависимостейРежим симуляции (разработка/тестирование)

Вам не нужно беспокоиться о том, какой бэкенд используется — Ego Pod выбирает автоматически. Если у вас RTX 4090, используется Unsloth для ускорения; если MacBook Pro M3 — используется MLX; если вы просто хотите попробовать процесс — используется режим Stub для симуляции обучения.

Процесс обучения:

  1. Загрузка базовой модели (4-битная квантизация)
  2. Последовательное обучение адаптеров по слоям LoRA
  3. Валидация результатов обучения (автоматическая оценка выравнивания)
  4. Генерация комбинаций база+LoRA для каждой редакции

Стратегия мульти-редакционного обучения:

  • Каждая редакция использует базовую модель разного масштаба
  • Один и тот же корпус, LoRA обучается отдельно для разных баз
  • Несколько редакций могут обучаться параллельно

Например: На настольном ПК с GPU запуск ego train заставит Ego Pod одновременно обучить три версии LoRA для ваших умных часов (lite), телефона (normal) и компьютера (plus). Весь процесс занимает около 10-30 минут в зависимости от объёма данных.

4. Version Vault (Хранилище версий)

Управляет версиями моделей Ego и выходными данными.

Обязанности:

  • Хранение LoRA-адаптеров, произведённых каждым циклом обучения
  • Управление файлами моделей для нескольких редакций
  • Поддержка отката версий (сохранение исторических версий)
  • Перезапись старых версий (поведение по умолчанию)
  • Экспорт в виде распространяемых Ego-пакетов

Например: Вы обучили Ego на прошлой неделе (v0.1.0), затем добавили новые данные и переобучили на этой неделе (v0.2.0). Вы обнаружили, что стиль ответов новой версии изменился — она больше не звучит как вы. Вы можете откатиться к v0.1.0 одним нажатием, как откат версии ОС на телефоне.

Структура Ego-пакета:

ego-output/
├── manifest.json              # Метаданные Ego (версия, информация о базе, список редакций)
├── lite/
│   ├── config.json            # Конфигурация редакции (базовая модель, квантизация, требования к оборудованию)
│   └── 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]/             # Пользовательская редакция
    ├── config.json
    └── adapters/
        └── ego-lora.safetensors

5. Config Center (Центр конфигурации)

Централизованно управляет всеми конфигурациями 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

# Определения редакций — какие версии вы хотите получить
editions:
  lite:
    base: "qwen3.5-0.8B"
    description: "Умные часы, диктофоны, дроны, IoT"
  normal:
    base: "qwen3.5-2B"
    description: "Телефоны, планшеты"
  plus:
    base: "qwen3.5-4B"
    description: "Высокопроизводительные ПК, локальные серверы"
  super:
    base: "qwen3.5-27B"
    description: "Облачные сервисы, GPU-кластеры"
  # Здесь можно добавить пользовательские редакции, например:
  # clinic:
  #   base: "qwen3.5-4B"
  #   description: "Редакция для амбулаторного приёма"

# Стратегия расписания — когда автоматически переобучать
schedule:
  auto_update: true
  interval: "weekly"          # Автоматическая ковка еженедельно
  trigger: "data_change"      # Или manual / cron (запланированная задача)