Архитектура
Общая архитектура
┌─────────────────────────────────────────────────────────────────┐
│ 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 автоматически определяет ваше аппаратное окружение и выбирает оптимальный бэкенд обучения:
| Приоритет | Бэкенд | Окружение | Скорость |
|---|---|---|---|
| 1 | Unsloth | NVIDIA GPU (CUDA) | Максимальная (ускорение в 2 раза) |
| 2 | HuggingFace PEFT | NVIDIA GPU (CUDA) | Стандартная скорость |
| 3 | Apple MLX | Mac (Apple Silicon) | Нативное ускорение |
| 4 | HuggingFace PEFT | Только CPU | Медленнее, но универсально |
| 5 | Stub | Без ML-зависимостей | Режим симуляции (разработка/тестирование) |
Вам не нужно беспокоиться о том, какой бэкенд используется — Ego Pod выбирает автоматически. Если у вас RTX 4090, используется Unsloth для ускорения; если MacBook Pro M3 — используется MLX; если вы просто хотите попробовать процесс — используется режим Stub для симуляции обучения.
Процесс обучения:
- Загрузка базовой модели (4-битная квантизация)
- Последовательное обучение адаптеров по слоям LoRA
- Валидация результатов обучения (автоматическая оценка выравнивания)
- Генерация комбинаций база+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 (запланированная задача)
