Cell 管理
Cell 是 wesclaw 中数据隔离和 AI 运行的基本单元。本文介绍 Cell 的概念、温度管理、导出导入和多 Cell 场景。
Cell 概念说明
什么是 Cell
Cell 是一个完整、独立、可移植的 AI Agent 运行时。可以把它理解为一个"AI 工作空间",包含了 AI 运行所需的全部数据和配置:
- 对话历史和消息
- 记忆(个人偏好、学到的知识等)
- Agent 配置
- 技能包
- 知识库
- 运行追踪和统计
- 定时任务配置
Cell 与用户的关系
| 部署形态 | Cell 数量 | 说明 |
|---|---|---|
| 桌面版(默认) | 1 个(main) | 个人使用,所有数据在一个 Cell 中 |
| 桌面版(多 Profile) | 多个 | 工作/私人分离,每个 Profile 一个 Cell |
| SaaS 云端版 | 每用户 1 个 | 由平台自动管理 |
单 Cell 模式(默认)
对于大多数个人用户,wesclaw 默认创建一个名为 main 的 Cell。你不需要了解 Cell 的细节,一切开箱即用:
- 所有对话、记忆、设置都在这个 Cell 中
- 数据存储在本地数据目录下
- 无需手动管理
Cell 的物理结构
每个 Cell 在数据目录下有独立的文件夹:
$DATA_DIR/cells/main/
├── meta.db # Cell 元数据
├── sessions.db # 对话和消息
├── state.db # 运行状态和追踪
├── skills/ # 已安装的技能包
├── knowledge/ # 知识库文件
├── workspace/ # AI 产出的文件
├── .scratch/ # 临时计算(Run 结束后自动清理)
└── .plans/ # Plan 产物
温度管理
什么是温度
Cell 有四种温度状态,表示其资源占用和激活程度:
| 温度 | 状态 | 资源占用 | 激活成本 |
|---|---|---|---|
| 🔴 Hot | 有活跃 Run 正在执行 | 高(CPU + 内存 + DB 连接) | 0 |
| 🟡 Warm | 无活跃 Run,但 goroutine 和 DB 连接保持 | 中(内存 + DB 连接) | 0 |
| 🔵 Cool | 磁盘保留,无 goroutine | 低(仅磁盘) | 100-500ms |
| ⚫ Cold | 已停止 | 无 | 1-3s |
温度转换
Hot → Warm:Run 结束后
Warm → Cool:空闲 15 分钟后自动降温
Cool → Cold:空闲数天后(可配置)
温度对用户的影响
| 温度 | 发送消息的体验 |
|---|---|
| Hot/Warm | 立即响应 |
| Cool | 有约 100-500ms 的短暂预热延迟 |
| Cold | 首次请求返回"正在启动",约 1-3 秒后自动就绪 |
为什么需要降温
- 节省资源 — 不活跃的 Cell 释放内存和 DB 连接
- 自动管理 — 无需手动启停
- 按需唤醒 — 发送消息时自动唤醒
对于单 Cell 的个人用户,温度管理是自动的,你通常不需要关注。多 Cell 场景下温度管理更有意义。
Cell 导出 / 导入
导出 Cell
Cell 导出会将整个 Cell 打包为一个 .tar.gz 文件,包含所有数据:
操作步骤:
- 打开 设置 → 数据管理
- 点击 导出数据
- 选择保存位置
- 等待导出完成
导出包含的内容:
| 数据 | 包含 |
|---|---|
| 对话历史 | ✅ |
| 记忆 | ✅ |
| Agent 配置 | ✅ |
| 技能包 | ✅ |
| 知识库 | ✅ |
| 运行追踪 | ✅ |
| AI 产出的文件(workspace) | ✅(默认包含,可排除) |
| 临时文件(.scratch) | ❌(永不包含) |
导出特点:
- 使用 SQLite 原子快照(
VACUUM INTO),保证数据一致性 - 导出过程不影响正常使用
- 导出文件可以在不同设备间传输
导入 Cell
从备份文件恢复 Cell 数据:
操作步骤:
- 打开 设置 → 数据管理
- 点击 导入数据
- 选择之前导出的
.tar.gz文件 - 确认导入(现有数据会被替换)
- 等待导入完成
注意事项:
- 导入会替换当前 Cell 的全部数据
- 建议先导出当前数据作为备份
- 导入完成后可能需要重新配置 Provider(API Key 不在导出包中)
- 应用可能需要重启
命令行操作(高级)
通过 API 也可以执行 Cell 导出/导入:
# 导出
GET /admin/cells/main/export
# 返回 tar.gz 流
# 导入
POST /admin/cells/import
Content-Type: application/gzip
# 请求体:tar.gz 文件内容
多 Cell 场景
Profile 模式(计划功能)
wesclaw 支持创建多个 Profile,每个 Profile 对应一个独立的 Cell:
| Profile | CellID | 用途 |
|---|---|---|
| 默认 | main | 日常使用 |
| 工作 | profile-work | 工作相关的对话和记忆 |
| 私人 | profile-personal | 个人事务 |
Profile 的隔离性
不同 Profile 之间完全隔离:
| 数据 | 是否共享 |
|---|---|
| 对话历史 | ❌ 独立 |
| 记忆 | ❌ 独立 |
| Agent | ❌ 独立 |
| 技能 | ❌ 独立 |
| 知识库 | ❌ 独立 |
| Provider 配置 | ❌ 独立 |
| 登录凭证 | ✅ 共享 |
切换 Profile
切换 Profile 时:
- 当前 Profile 的 Cell 降温(Warm → Cool)
- 新 Profile 的 Cell 唤醒
- 所有界面数据刷新为新 Profile 的数据
切换 Profile 不需要重启应用。
创建新 Profile
设置 → Profile 管理 → 新建 Profile
新 Profile 从空白开始,你也可以:
- 从已有 Profile 克隆(复制所有数据)
- 从备份文件导入
多 Cell 的数据目录结构
多 Cell 场景下,数据目录结构如下:
$DATA_DIR/
├── hypervisor.db # Hypervisor 管理所有 Cell 的注册信息
├── secrets/
│ └── spec.key # Cell 配置加密密钥
├── cells/
│ ├── main/ # 默认 Cell
│ │ ├── meta.db
│ │ ├── sessions.db
│ │ ├── state.db
│ │ └── ...
│ ├── profile-work/ # 工作 Profile
│ │ ├── meta.db
│ │ ├── sessions.db
│ │ └── ...
│ └── profile-personal/ # 私人 Profile
│ ├── meta.db
│ ├── sessions.db
│ └── ...
├── db/
│ └── wesclaw.db # 应用层数据(跨 Cell 共享)
└── logs/
└── wesclaw.log
Cell 状态查看
通过 UI 查看
- 设置 → 关于 页面显示当前 Cell 状态
- 状态栏显示 AI 就绪状态
通过 API 查看
# 查看 Cell 状态
GET /cells/main/state
# 返回示例
{
"id": "main",
"temperature": "warm",
"active_runs": 0,
"memory_count": 156,
"session_count": 42
}
Cell 管理注意事项
数据安全
- Cell 数据存储在本地,请定期备份
- 删除 Cell 会永久删除其所有数据
- 导出功能可以作为备份手段
资源管理
- 多个 Hot Cell 会消耗更多内存
- 引擎自动管理 Cell 温度,通常无需手动干预
- 如果内存紧张,可以手动停止不使用的 Cell
迁移
Cell 可以在不同设备间迁移:
- 在源设备导出 Cell
- 将
.tar.gz文件传输到目标设备 - 在目标设备导入 Cell
- 重新配置 Provider(API Key 需要重新输入)
SaaS 版差异
SaaS 云端版本:
- Cell 由平台自动管理
- 不支持手动导出/导入(通过平台 API 管理)
- 温度管理由平台统一调度
- 多 Profile 功能暂不可用