存储与 Ledger
云雀 Agent 使用 双层持久化架构:SQLite 关系存储 + Ledger KV 配置存储,所有数据本地优先,无需外部服务。
架构概览
┌──────────────────────────────────────────┐
│ 应用层 │
├───────────┬──────────────┬───────────────┤
│ SQLite │ Ledger KV │ 文件系统 │
│ (关系数据) │ (键值配置) │ (插件/技能) │
├───────────┴──────────────┴───────────────┤
│ data/yunque.db │
└──────────────────────────────────────────┘SQLite 关系存储
云雀使用 纯 Go 嵌入式 SQLite(modernc.org/sqlite),无 CGO 依赖。
核心表
| 表名 | 用途 | 索引 |
|---|---|---|
memories | 记忆条目(短期/中期/长期),含向量嵌入 | tenant_id, category |
sessions | 对话会话 | tenant_id |
messages | 对话消息(role + content),级联删除 | session_id |
bots | Bot 定义与配置 | — |
inbox | 收件箱(通知、任务事件) | is_read |
models | 已注册模型(含 base_url、modalities) | — |
生产配置
WAL 模式 — 并发读,单写不阻塞
_busy_timeout=5000 — 锁等待 5 秒
MaxOpenConns=1 — SQLite 单写者模式Ledger KV 存储
Ledger KV 将 JSON 配置数据统一存储在 SQLite 中,替代了早期的 JSON 文件散落模式。通过 KVConfigStore 封装,提供命名空间隔离。
KV 命名空间
超过 25 个子系统 使用 Ledger KV,包括:
| 类别 | 子系统 |
|---|---|
| 核心状态 | 状态内核 (StateKernel)、信任分 (TrustScore)、成本追踪 (CostTracker) |
| 记忆 | 知识库 (Knowledge)、情感历史 (EmotionHistory)、工作记忆 (WorkingMemory) |
| 任务 | 任务模板 (TaskTemplate)、任务增长 (TaskGrowth)、线程状态 (Thread)、分支持久化 (ForkPersist) |
| 技能 | 技能优化器 (Optimizer)、技能增长检测 (SkillGrow) |
| 安全 | 审批规则 (ApprovalRules)、渠道分组 (ChannelGroups)、身份绑定 (IdentityBinding) |
| 执行 | 工作流存储 (WorkflowStore)、触发器 (TriggerStore)、沙箱 (WasmSandbox) |
| 认知 | 内心独白 (Reverie)、经验库 (ExperienceStore)、LoRA 调度 (LoRAScheduler) |
| 其他 | Bot 管理 (BotManager)、收件箱 (Inbox)、身份解析 (IdentityResolver) |
所有写入使用 KV 优先、文件回退 模式 — 启动时自动迁移 JSON 文件到 KV。
向量索引
云雀内置三种向量检索引擎,按数据规模自动选择:
| 引擎 | 复杂度 | 适用场景 |
|---|---|---|
| IVF (倒排文件) | O(N/K × nprobe) | 默认,>1000 条向量 |
| HNSW (层级导航小世界) | O(log N) | 大规模部署,10w+ 向量 |
| 暴力搜索 | O(N) | <1000 条时自动回退 |
Ledger 持久化层
Ledger 通过两个持久化组件桥接内存计算与 SQLite 存储:
- LedgerPersister — 持久化中期/长期记忆层(TF-IDF、BM25、向量计算在内存中完成)
- LedgerOrchPersister — 持久化知识图谱(实体+关系)和可编辑记忆
自动维护
| 间隔 | 任务 |
|---|---|
| 5 分钟 | WAL Checkpoint |
| 1 小时 | 完整性检查 |
| 6 小时 | 记忆时间衰减 |
| 24 小时 | 事件压缩 |
文件系统存储
部分数据仍使用文件系统,包括数据库文件本身和目录型资源:
data/
├── yunque.db # SQLite 主数据库
├── plugins/ # 插件目录(plugin.json + 脚本)
├── skills/ # 文件技能目录(SKILL.md + meta.json)
├── knowledge/ # 知识库文档
├── stickers/ # 表情包素材
└── backup/ # 自动备份分布式同步(实验性)
多实例部署支持:
- SyncEngine — 版本向量因果排序
- HTTP SyncTransport — 点对点事件同步
- HTTP StreamTransport — 实时事件广播