BLUEPRINT
架构设计
整体架构
┌─────────────────────────────────────────────────────────────────┐
│ Ego Pod(自我意识胶囊) │
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌────────┐ │
│ │ 数据采集器 │───→│ 语料构建器 │───→│ 训练引擎 │───→│ 版本管理│ │
│ │ Collector │ │ Compiler │ │ Trainer │ │ Vault │ │
│ └───────────┘ └───────────┘ └───────────┘ └────────┘ │
│ ↑ ↓ │
│ ┌─────────┐ ┌──────────┐ │
│ │数据源配置 │ │ Ego 产出 │ │
│ │ Sources │ │ Editions │ │
│ └─────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 配置中心(Config) │ │
│ │ 基座选型 · Edition 定义 · 训练参数 · 数据源映射 · 调度策略 │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
模块说明
1. 数据采集器(Collector)
从配置指定的数据源读取宿主数据。
支持的数据源类型:
- 本地目录(文件系统路径)
- URL(HTTP/HTTPS 端点)
- 云存储(S3、OSS、Google Drive 等,通过插件扩展)
- 自定义适配器(用户可编写采集插件)
采集的数据类别(对应 iFay 架构):
| 数据类别 | 对应 iFay 模块 | 现实示例 |
|---|---|---|
| 感知数据 | Sense | 你每天的运动轨迹、手机使用时长分布、常去的餐厅位置、睡眠时间规律 |
| 行为数据 | Action | 你在手机上的操作习惯(总是先看微信再看邮件)、常用的快捷指令、自动化脚本 |
| 认知数据 | 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 机制是..." 归入知识层
- 质量过滤 — 去除噪声数据、重复数据。例如:重复的聊天记录只保留一份,过短的片段(如 "嗯"、"好的")被过滤掉
- 数据增强 — 必要时通过模板或改写扩充语料。例如:原始数据 "推荐一首歌" 会被增强为 "请用不同的方式表达:推荐一首歌"、"换一种说法:推荐一首歌"
输出格式:
- 标准的指令微调数据集(instruction/input/output 三元组)
- 对话格式数据集(multi-turn conversation)
- 按 LoRA 层级分组的子数据集
3. 训练引擎(Trainer)
基于选定基座和构建好的语料,训练 LoRA 适配器。
多后端自动适配:
Trainer 会自动检测你的硬件环境,选择最优的训练后端:
| 优先级 | 后端 | 适用环境 | 速度 |
|---|---|---|---|
| 1 | Unsloth | NVIDIA GPU (CUDA) | 最快(2x 加速) |
| 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-bit 量化)
- 按 LoRA 层级依次训练适配器
- 验证训练效果(自动评估对齐度)
- 为每个 edition 生成对应的基座+LoRA 组合
多 Edition 训练策略:
- 每个 edition 使用不同规模的基座
- 同一份语料,针对不同基座分别训练 LoRA
- 可并行训练多个 edition
例如:你有一台带 GPU 的台式机,运行
ego train后,Ego Pod 会同时为你的手表(lite)、手机(normal)和电脑(plus)训练三个版本的 LoRA。整个过程大约 10-30 分钟,取决于数据量。
4. 版本管理(Vault)
管理 Ego 模型的版本和产出。
职责:
- 存储每次训练产出的 LoRA 适配器
- 管理多个 edition 的模型文件
- 支持版本回滚(保留历史版本)
- 覆盖旧版本(默认行为)
- 导出为可分发的 Ego 包
例如:你上周训练了一个 Ego(v0.1.0),这周又加了新数据重新训练(v0.2.0)。结果发现新版本的回答风格变了,不像你了。这时你可以一键回滚到 v0.1.0,就像手机系统降级一样。
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(定时任务)
