Agent 记忆

L3 长期画像:Persona 的生成与维护

本期拆解金字塔尖:L3 如何从场景档案里提炼出"这个用户/团队是谁"的稳定画像,以及它为什么是四层里唯一"无条件注入"的一层。

L3 长期画像:Persona 的生成与维护 全屏查看 ↗

官方仓库:https://github.com/TencentCloud/TencentDB-Agent-Memory 代码版本:2.0.0-beta.1

一、L3 的定位

官方定义:

L3 Core / Persona:长期画像、稳定模式与高层认知 —— 用于让 Agent 迅速进入用户和团队语境

L3 是记忆金字塔的塔尖:它不落在某一次对话上,描述的是稳定特征——用户的工作风格、偏好、约束、团队规范、高层认知。它是四层里唯一每次新会话无条件注入的一层。

也正因为如此,它必须足够短、足够稳定——它占的是每一轮对话的固定成本。

核心实现文件是 persona-generator.ts,官方架构文档的描述是:

L3:core/persona/persona-generator.ts —— 四层深扫模型(four-layer deep scan):以 scene_index + 场景内容为输入,CleanContextRunner 生成/更新画像。

二、生成流程(7 步)

① 读取现有画像(persona.md,剥离导航)
② 检测变化场景(updated > checkpoint.last_persona_time)
③ 读取变化场景全文(预加载进 Prompt)
④ 模式判定:existingPersona ? incremental : first
⑤ 备份 persona.md + LLM 沙箱生成(workspaceDir=dataDir,超时 180s)
⑥ 后处理:剥离 LLM 多加的导航 + escapeXmlTags(XML 转义,防注入)
⑦ 追加最新场景导航 + 推进 checkpoint(markPersonaGenerated)

变化检测(增量优先)

L3 不会每次全量重算,而是只处理自上次生成以来变化过的场景

  • checkpoint.last_persona_time 记录上次生成时间;
  • scene_indexupdated 晚于该时间戳的场景视为"变化场景",全文预加载进 Prompt;
  • 没有变化场景且画像已存在 → 直接跳过本次生成(省一次 LLM 调用);
  • 保守策略:日期解析失败视为变化。

首次 vs 增量

  • first(首次):没有现有画像,从全部场景生成完整画像;
  • incremental(增量):已有画像,重点分析自上次以来的新增 / 修改内容,刷新画像。

一个有趣的细节:promptMode = "code" 时,L3 的产物不是 “persona”(用户画像)而是 “team operating doctrine”(团队运营规约)——面向代码 Agent 团队时,它沉淀的是团队的工作方式与规范,而不只是个人偏好。

安全注入(后处理)

画像最终会被注入 system prompt,所以注入前必须消毒

  1. 剥离 LLM 可能自行添加的场景导航块(导航由系统统一生成);
  2. escapeXmlTags 转义 XML 标签,防止画像内容里的 <...> 破坏提示词结构;
  3. 空画像按失败处理(不写入,不污染导航)。

checkpoint 推进

成功生成后 markPersonaGenerated 推进 checkpoint,供下一轮变化检测使用——checkpoint 是 L3 增量的"水位线"

三、persona.md 的形态

# 用户画像 / 团队规约

(LLM 生成的长期画像正文:
 工作风格、偏好、约束、
 稳定模式、高层认知…)

---

## 🗂 场景导航
- [鉴权模块重构](scene.md)
- [每日英语学习](english.md)
  • 正文:LLM 生成;
  • 导航:系统生成generateSceneNavigation),LLM 不参与——L2 抽取后也会更新这段导航(见第 4 期)。

四、触发方式与同步

触发

  1. 定时 / 事件:L2 完成后由服务层调度(如 L3 timer 到期);
  2. 信号驱动:L2 抽取时 LLM 发出 [PERSONA_UPDATE_REQUEST] 信号(原因写入 checkpoint),触发 L3 生成——这是"场景维护 Agent"主动报告"有值得沉淀到画像的内容"。

存储

  • 权威存储persona.md,全实例一份;
  • 同步副本:profiles 表,供 TCVDB 等远端后端拉取(ProfileRecord 同步,见 profile-sync.ts)。

召回注入

召回时 L3 被无条件读取并放入 appendSystemContext(system prompt 尾部)——它是稳定内容,配合 Anthropic / OpenAI 的提示词缓存,几乎零增量成本。

五、自定义 Prompt 与生成溯源(官方 v2.0 能力)

官方 MemoryCore README 介绍了两个配套能力:

自定义 Memory Prompt:支持 L1/L2/L3 Prompt CRUD 和 Agent、Team、Instance 绑定,按 Agent > Team > Instance > 系统内置 解析生效策略;自定义内容只能调整记忆关注点和归纳策略,不能修改固定输出协议。

生成溯源:记录 L1/L2/L3 实际使用的 Prompt ID、版本、来源、内容哈希以及输入输出引用……不保存 Prompt 正文快照。

对 L3 的意义:

  • 不同 Agent / 团队可以用不同关注点生成画像(例如"重点提取架构决策、兼容性约束");
  • 每条画像生成记录都可溯源:用哪个 Prompt、哪个版本、基于哪些场景、哪个模型。

六、本期小结

  • L3 是四层唯一无条件注入的层,内容必须稳定、精炼。
  • 生成机制:四层深扫模型 + 增量优先(只处理变化场景)+ 首次 / 增量双模式。
  • 安全:XML 转义防注入、导航系统生成、空画像拒绝写入。
  • checkpoint 是增量水位线;profiles 表是同步副本、persona.md 是权威。
  • 自定义 Prompt 可按 Agent / Team / Instance 生效,但固定输出协议不可改。

下一期看最关键的一环——这些记忆在每一轮对话里是如何被取回来、注入到 Agent 上下文的:召回与注入。


图示索引

源码索引

内容文件
L3 生成主流程MemoryCore/src/core/persona/persona-generator.ts
L3 触发MemoryCore/src/core/persona/persona-trigger.ts
生成 PromptMemoryCore/src/core/prompts/persona-generation.ts
画像同步MemoryCore/src/core/profile/profile-sync.ts
自定义 Prompt / 溯源MemoryCore/src/core/memory-prompt/memory-generation-log/

L3长期画像Persona

← 返回AI 笔记