CMDC.Plugin.Builtin.EpisodicMemory (cmdc v0.5.2)

Copy Markdown View Source

情景记忆 few-shot Plugin。

长期记忆的「情景记忆(episodic)」类型 — 记住"成功的过往交互"作为下次类似 query 的 few-shot 示例。

与现有 Memory 模块的关系

CMDC 现有记忆模块各司其职:

模块类型用途
Plugin.Builtin.MemoryLoader程序记忆加载 AGENTS.md 静态规则到 system prompt
Plugin.Builtin.MemoryFlush语义记忆压缩前提取关键事实 → AGENTS.md
cmdc_skill_engine可复用能力Skill 进化(成功/失败评分)
Plugin.Builtin.EpisodicMemory(本模块)情景记忆完整成功对话的 few-shot 复用

情景记忆与 Skill 的区别:

  • Skill:抽象的可复用能力("如何做 X")
  • Episodic:具体的成功对话片段("上次 X 是怎么做成的")

工作流程

  1. :session_end:检查 session 是否成功(自定义 judge_fn 或简单启发式)
  2. 成功 session → 抽取 {query, plan, tool_trajectory, final_answer} → 写入 CMDC.Memory 后端(默认 CMDC.Memory.ETS
  3. :session_start:用当前用户首条消息 → 语义检索 top-K episodes → inject 到 system prompt 作为 few-shot 示例

配置

{EpisodicMemory, [
  memory_store: :episodic_memory,                        # 必填,CMDC.Memory backend 表名
  memory_module: CMDC.Memory.ETS,                        # 默认 ETS(cmdc_memory_pg 可换 PG)
  judge_fn: &MyApp.judge_success/2,                      # 自定义成功判断函数
  top_k: 3,                                              # session_start 检索 top-K
  max_episodes_per_user: 100                             # 按 user_id 上限避免内存爆
]}

v0.4.0 实现说明

  • judge_fn 默认启发式:session.turn >= 2 且无 abort/error 视为成功
  • 语义检索:调用 CMDC.Memory behaviour 的 search/3 callback(关键词包含匹配;若 backend 支持向量检索会自动升级为语义检索)
  • ctx.user_data[:user_id] namespace 隔离(多租户支持)

Summary

Functions

默认 judge:session.turn >= 2 且无 abort/error 视为成功。

Functions

default_judge(ctx, state)

@spec default_judge(map(), map()) :: boolean()

默认 judge:session.turn >= 2 且无 abort/error 视为成功。

用户可通过 :judge_fn 选项覆盖(例如接入 LLM-as-judge 或自定义规则)。