← 返回文档归集

MetaPact 记忆/人格架构 vs 代聊持久记忆框架 v0.2 · 逐点对照

日期:2026-06-22 | PM:张一章 对照对象:MetaPact(仓库源码实读)↔ 11/PRD/持久记忆框架设计_代聊系统_v0.2.md 一句话:MetaPact 是「纯文件 + 双层记忆 + 单角色单用户」;你的框架是「两平面 + 三作用域 + 百万×万多租户隔离」。思想多处同源,实现量级完全不同。


0. 本质差异(先定调)

MetaPact 你的 v0.2
规模 单角色 × 单用户(一次部署=一个分身) 百万用户 × 万创作者,多对多,多 persona
隔离单元 无(就一个人) Relationship = (UserFacet × CreatorPersona)
存储 markdown 文件 + memory/日期.md DB + Redis + 向量索引(分区/冷热)
召回 全量读今日+昨日+MEMORY.md BM25+向量 RRF + 时间衰减,先平面A裁剪再 ANN
关系建模 身份/关系图(来自结构化元数据,非对话抽取)
合规 成人向、可欺骗 已披露 AI、创作者在环、不可欺骗、不可串台

结论:MetaPact 是"单租户玩具级"的优雅实现,可作架构思想样本,不能作你的底座。 它验证了你几条设计的正确性,也提供 3 个你 PRD 还没写的轻模块。


1. 逐维度对照(做法 → 抄/不抄)

维度 MetaPact 做法 你 v0.2 做法 判定
记忆分层 双层:memory/日期.md(原始日志) + MEMORY.md(蒸馏) 三作用域:PersonaProfile广播 / RelationshipMemory私有 / GlobalUserProfile受控 思想抄:它的"原始日志+蒸馏长期"正好对应你 RelationshipMemory 的 L2/L3;你比它多了多租户三作用域,对
写入管线 memory-write.sh --summary/--long,对话后滚动更新 MEMORY 事件→去重→隐私过滤→存原始;会话结束规则预抽+一次 LLM 归纳 印证不抄实现:你"绝不每条调 LLM"是规模刚需,它单用户无所谓
召回 把今日+昨日+MEMORY 全量塞 prompt 向量+BM25+时间+重要度,Top-K(3-5) 不能抄:全量塞在多用户/长历史下爆 token,你必须向量召回
隔离/隐私 MEMORY.md 仅主会话加载,群聊不加载 RelationshipMemory 严格按 relationship_id 隔离,GlobalUserProfile 默认不下放 强印证:它的"按会话类型决定加载哪层"= 你不可串台的运行时落地,可抄成显式开关
人格模型 SOUL(稳定) + custom.md(用户层,升级不覆盖) + 5 阶段好感 CreatorPersonaProfile(固定设定,按 persona 广播) 抄分层:给 PersonaProfile 加"custom 覆盖层"(运营可改、模板升级不覆盖)
情绪/主动 heartbeat-check.sh cron 每30min,思念值≥80 主动发;mood-recovery 收消息回血;阶段门控频率 (PRD 未覆盖主动触达) 可抄(轻):这是你代聊"AI主动破冰/召回"的现成轻实现,但要挂 relationship + 受确权/合规约束
prompt 组装 启动按序读 SOUL→USER→memory→MEMORY 注入 = PersonaProfile + RelationshipMemory TopK + (授权)GlobalUserProfile 同源:你的注入模板已是它的多租户版,无需改
存储介质 纯文件、可版本化、全本地 DB+Redis+向量 不能抄:文件方案撑不住百万×万
多平台/多模态 cc-connect 接十几个 IM + 6 个媒体 skill 平台方自有渠道 不抄:你是平台方,不需要第三方 IM hack 与成人媒体栈

2. 能直接抄的(4 条,按价值排序)

  1. 思念/主动触达机制 → 你 PRD 的空白。抄它的极轻实现:状态文件(思念值) + 定时检查(阈值触发) + 收到消息回血。落到代聊:挂在 relationship_id 维度,触发"AI主动破冰/召回沉默用户";但频率/内容受**确权 + 合规(不得伪装真人)**约束,对应 AI-01~06。
  2. 人设 custom 覆盖层 → 给 CreatorPersonaProfile 加一层"运营/创作者可改的 custom",人设模板升级时不覆盖单 persona 的定制(MetaPact 的 custom.md 升级不覆盖 = 直接可抄的工程纪律)。
  3. 按上下文类型门控加载哪层记忆 → MetaPact"MEMORY 仅主会话"印证你"GlobalUserProfile 默认不下放"。把它写成显式运行时规则:不同会话场景(私聊/群/跨 persona)决定加载 PersonaProfile / RelationshipMemory / GlobalUserProfile 中哪几层。
  4. 原始日志 + 蒸馏长期 的双层形态 → 你 RelationshipMemory 的 L2(episodic)/L3(semantic) 可借它"raw daily → curated"的产物形态(你用 DB 行不用 md 文件,但"先存原始、再定期蒸馏"的节奏一致,呼应你§4.2 管线)。

3. 明确不能抄的(5 条,会踩规模/合规坑)

  1. 纯文件存储——百万×万级必须 DB+Redis+向量,文件是单租户玩具。
  2. 无隔离单元——你的命根子是 Relationship 多租户隔离 + 确权锚点,MetaPact 完全没有这层。
  3. 全量塞 prompt 召回——多用户/长历史下 token 爆炸,必须向量+时间 Top-K。
  4. 人格/阶段/NSFW 全内嵌超长 prompt——你受合规约束(已披露 AI、不可欺骗),且多 persona 不能每条全量内嵌,要按需召回。它的 5 阶段表可作为 persona 模板的一个可选字段,但不是情绪引擎。
  5. cc-connect 非官方 IM 接入 + 成人媒体/BLE 栈——你是平台方自有渠道,合规与账号风险都不接受。

4. 规模差异怎么补(MetaPact 简单方案 → 你的量级)

MetaPact(单租户文件) 补到你百万×万
memory/日期.md 原始日志 → DB 原始事件表,按 relationship_id 分区 + 冷热分层(Redis 热 / 冷存 rehydrate)
MEMORY.md 全量读 → BM25+向量 RRF Top-K;先用平面A(relationship_id)裁剪搜索空间再 ANN
单一 MEMORY 文件 → 三作用域(PersonaProfile 广播 / RelationshipMemory 私有 / GlobalUserProfile 受控)
"主会话才读 MEMORY" → 确权隔离(relationship_id)+ GlobalUserProfile 显式授权才下放
cron 每 30min 跑单 agent → 事件驱动 + 异步队列,按 relationship 批处理,绝不每条 LLM
custom.md 单文件 → persona 级 custom 覆盖层(运营可改、模板升级不覆盖)
阶段好感表(固定脚本) → persona 模板字段 + 与你 用户分级 T-01~T-10 联动的策略,而非硬编码阶段

5. 对你 PRD v0.2 的 3 条具体修订建议

  1. 新增 §X 主动触达(破冰/召回)模块:借 MetaPact heartbeat 思路,定义"沉默阈值 → 异步检查 → 生成主动消息",挂 relationship 维度,明确合规边界(不得制造"在和真人谈恋爱"的欺骗,对齐 §0.3)。
  2. CreatorPersonaProfile 增加 custom 覆盖层:区分"模板层(可升级)"与"persona 定制层(升级不覆盖)",写进 §3.1。
  3. §3.3 不可串台补"按会话类型门控加载":把"哪种会话加载哪几层记忆"显式化为运行时规则(MetaPact 的主会话/群聊隔离是现成范例)。

结论

MetaPact 对你的价值 = 架构思想样本 + 3 个轻模块(主动触达 / custom 覆盖层 / 上下文门控加载),且反向印证了你"隔离优先、绝不每条 LLM、按上下文决定加载"几条核心设计是对的。但它的存储、召回、单租户模型在你百万×万多对多场景下全部需要升级替换——按上表补齐即可。它不是底座,是参照系。