异步提炼管线与存储架构
L1→L3 的提炼全部异步完成:Timer 分片扫描投递任务,Worker 竞争消费、加锁执行、失败重试;结果按「数据库 + 文件」双通道落盘。
MemoryCore 服务层 + 存储层
① 异步调度 timer-scanner.ts + pipeline-worker.ts
Timer Scanner(无主模式)
16 个分片 ZSET:tdai_memory:timers:shard_{0..15};成员 = instanceId\x00sessionId:type,score = fireAtMs。
  • 所有 Pod 都扫描,无需选主
  • Lua 原子认领 ZRANGEBYSCORE + ZREM,无重复消费
  • 扫描间隔默认 2s,每 shard 每次最多 1000
任务队列
L1_idle / L2_schedule / L3 等任务类型入队。
  • 级联:L1 完成 → 推进 L2 Timer;L2 完成 → 直接入队 L3
Pipeline Worker(竞争消费)
默认 60 并发协程;poll 200ms。
  • 分布式锁:per-session(L1/L2)、per-instance(L3)
  • 锁 TTL 10min,每 30s 续约,续约失败 abort
  • LLM 执行 + 写入 VDB / COS
执行器
executeL1 / L2 / L3,调 LLM 提炼后写回。
  • 重试:抢锁失败 5s 重投;LLM 超时指数退避 5s / 15s / 45s,最多 3 次
  • 幂等:VDB upsert by record_id,COS 覆盖写
死信队列
超过重试上限的任务落死信,持久化错误供人工排查。
② 存储架构 数据库 + 文件双通道
vectors.db(数据面)
  • l0_conversations 表(原始对话元数据)
  • l0_vec 虚拟表(L0 向量)
  • l1_records 表(原子记忆元数据)
  • l1_vec 虚拟表(cosine)+ FTS5(BM25)
  • skills / skill_fts / skill_vec(技能资产)
本地文件(L2/L3 权威)
  • conversations/YYYY-MM-DD.jsonl(L0 原文)
  • records/YYYY-MM-DD.jsonl(L1 备份)
  • scene_blocks/*.md(L2 场景档案,文件权威)
  • persona.md(L3 画像,全实例一份)
  • .metadata/recall_checkpoint.json(进度)
metadata.db(管控面)
  • meta_* 资产表:User / Team / Agent / Task / Asset
  • 绑定关系、权限 ACL、版本状态
  • memory_prompts / memory_generation_refs
data 面与管控面分离: 资产内容走 vectors.db; 绑定 / 权限 / 版本走 metadata.db
可选扩展后端:腾讯云 TCVDB(原生 hybridSearch)、COS、MongoDB、ClickHouse、Redis/Kafka。IMemoryStore 抽象(factory.ts 分发)支持 sqlite / tcvdb 双实现。来源:MemoryCore/src/services/ + src/core/store/。