三层记忆的 Prompt 总览
L0 不调 LLM,提示词从 L1 开始。整条提炼管线共 5 处 LLM 调用、4 份 System Prompt 文件,每份都带 chat / code 两个版本。
Prompt Engineering · MemoryCore/src/core/prompts/
L1
抽取 · 三段式任务书
任务一 情境切分 → 任务二 核心记忆提取 → 任务三 JSON 输出协议。三类记忆(persona / episodic / instruction)各配齐"定义 + 提取句式 + priority 打分区间 + 触发词";整段无记忆时也必须返回合法的情境段。
EXTRACT_MEMORIES_SYSTEM_PROMPT · 工具:关闭(纯文本 JSON)
L1
去重 · 统一候选池 + 四动作
跨 type 合并 + 多对多合并(target_ids 数组),一次调用可完成多目标替换。动作枚举 store / skip / update / merge;merge / update 要求时间戳取并集、priority 酌情提升。
CONFLICT_DETECTION_SYSTEM_PROMPT · 工具:关闭(纯文本 JSON)
L2
场景整合 · 沙箱 Agent 操作手册
阶段 0 容量三档预警(≥ 上限强制 MERGE、= 上限−1 禁 CREATE);「默认策略是 UPDATE」;删除统一定义为 write("[DELETED]");产物每文件 ≤ 1500 字符、场景总数 < maxScenes(默认 15)。
buildSceneSystemPrompt(maxScenes) · 工具:read / write / edit
L3
画像生成 · 四层深扫
Layer 1 基础锚点 / Layer 2 兴趣图谱 / Layer 3 交互协议 / Layer 4 认知内核,每层都标注"实用价值"。模板 = Archetype + 基本信息 + 长期偏好 + Chapter 1–4,且禁止使用非场景来源的信息。
PERSONA_SYSTEM_PROMPT · 工具白名单 read/write/edit,但 Prompt 声明无需 read(已有 persona 全文预注入)

chat ↔ code 双模

  • 开关:config.ts 的 MemoryPromptMode = "chat" | "code"
  • 解析:全局 promptMode → extraction / persona 层可覆盖
  • chat 类型:persona / episodic / instruction
  • code 类型:work_fact / work_task / work_method / work_artifact
  • 工具白名单、输出协议、沙箱、数量上限两套完全一致,只有关注点不同

四条共性设计原则

  • System / User 双层拆分:规则进 system,数据进 user
  • 输出协议硬内嵌:JSON 结构 / Markdown 模板直接写死在 Prompt 里
  • 输出语言跟随输入:自由文本跟随用户语言,协议字段锁死英文
  • 每份都带否定清单:明确列出"不应该提取 / 严格禁止"的内容

输出协议与长度上限

L1 JSON 数组(空结果亦返回情境段) L2 -----META-START----- 定界符 + 章节模板 ≤ 1500 字符 / 文件,总量 < maxScenes L3 Archetype + Chapter 1–4 ≤ 2000 字(code 版 ≤ 1200 字)
用定界符而非 YAML,是为了让解析器用 indexOf 定位、不依赖 YAML 容错。
来源:MemoryCore/src/core/prompts/ 下 4 份 Prompt 文件 + config.ts。chat / code 由同一套构建函数按 promptMode 分发,例如 getExtractMemoriesSystemPrompt(mode)getSceneSystemPrompt(maxScenes, mode);L3 则在 buildPersonaPrompt 内按 promptMode 选择两套 System Prompt。