L3 长期画像:Persona 的生成与维护
L3 是「人格摘要」:从所有场景档案里提炼稳定画像,描述「这个用户 / 团队是谁」。它是四层里唯一每次新会话都无条件注入的一层。
L3 Core / Persona · persona-generator.ts
1
读取现有画像
读 persona.md 并剥离场景导航块;首次运行则视为空。promptMode=code 时产物是「team operating doctrine(团队运营规约)」而非 personae。
2
检测变化场景
加载 scene_index,筛选 updated 晚于 checkpoint.last_persona_time 的场景(保守策略:日期解析失败视为变化)。
3
读取变化场景全文
把变化场景的完整 raw 内容(含 META)预加载进 Prompt;无变化且画像已存在 → 跳过本次生成。
4
模式判定
existingPersona ? incremental(增量刷新): first(首次生成)。
5
备份 + LLM 沙箱生成
备份 persona.md(保留最近 3 份);CleanContextRunner 以工具模式运行,workspaceDir=dataDir,LLM 直接写 persona.md;超时 180s。
四层深扫模型:以 scene_index + 场景内容为输入,覆盖长期画像 / 稳定模式 / 高层认知
6
后处理(安全注入)
剥离 LLM 可能多加的导航块;escapeXmlTags 转义 XML 标签——画像最终会被注入 system prompt,必须防注入。
7
追加导航 + 推进 checkpoint
重新生成最新场景导航追加到正文后;markPersonaGenerated 推进 checkpoint,供下次变化检测使用。

persona.md 结构

# 用户画像 / 团队规约 (LLM 生成的长期画像正文: 工作风格、偏好、约束、 稳定模式、高层认知…) --- ## 🗂 场景导航 - [鉴权模块重构](scene.md) - [每日英语学习](english.md)
正文 + 场景导航;导航由系统生成,LLM 不参与。

触发与同步

  • 触发:L2 完成后定时 / L2 抽取时 LLM 发出 PERSONA_UPDATE_REQUEST
  • 存储:persona.md 全实例一份(文件权威)+ profiles 表同步副本
  • 注入:召回时无条件读取,放入 appendSystemContext(稳定、可缓存)
  • 自定义 Prompt:Agent > Team > Instance > 系统内置 优先级解析,只加关注点、不改输出协议
来源:MemoryCore/src/core/persona/persona-generator.ts + persona-trigger.ts + prompts/persona-generation.ts。画像为空或 LLM 未写文件时按失败处理,不会污染导航。