把 LLM 从"语言模型"升级为"具有时间结构的经验系统"。
Memory Engineering 的本质不是做 memory retrieval,而是在做 system cognition architecture(系统认知架构)。
612 行纯 Python。零外部依赖。已部署于 CiteFlow 生产环境,管理 3 个 AI Agent 的跨会话认知。
不是"记忆问题",是三个更底层的结构性问题:
每次调用都像第一次见面。无法积累经验、无法形成用户长期理解、无法做真正的 Agent。
→ 引入跨 session 状态系统。
传统 Agent 是"点",不是"线"。任务无法延续、计划无法递进、策略无法优化。
→ Event Layer + Trigger,让系统具备时间轴。
大多数系统只做 embedding + vector DB + retrieval。但"什么时候用记忆"比"存什么记忆"更重要。
→ Trigger Layer,把 memory 变成行为系统的一部分。
Memory Engineering 不是做"一个 memory",而是构建一个完整的认知结构:
| 层 | 职责 | 回答的问题 |
|---|---|---|
| Identity Layer 身份层 | 稳定认知:是谁、目标、约束、长期上下文 | "我是谁,我在做什么" |
| Event Layer 事件层 | 结构化经验:可回放、可归纳、可用于策略更新 | "发生过什么" |
| Knowledge Layer 知识层 | 抽象后可复用的信息:决策、教训、规则 | "学到了什么" |
| Trigger Layer 触发器层 | 何时调用哪段记忆:条件触发、状态触发、任务触发 | "什么时候该想起来" |
从"被动记忆"升级为"可触发记忆"。 传统 RAG / memory 系统有记忆但不会主动用。Trigger 机制让 memory 从"数据库"变成"行为系统的一部分"——Agent 不再每轮重新开始,而是延续任务状态。
以前每次调用都是新系统。现在系统有持续状态——Identity 锁定目标,Event 追踪过程,Knowledge 沉淀经验。
以前能力来自 prompt engineering。现在能力来自 memory + state evolution。Prompt 退化为接口层。
以前用户问什么答什么。现在 Agent 会根据记忆主动调整行为——提前纠偏目标、自动补充上下文、触发下一步行动。
智能形态从静态变为累积式,记忆从可选变为核心,任务从单步变为全生命周期。
当前 V1 覆盖了部分层:
| 层 | V1 状态 | 实现 |
|---|---|---|
| Identity | ✅ 已实现 | session_start.py 自动恢复身份 + 项目状态 + 活跃决策 |
| Knowledge | ✅ 已实现 | decision / lesson / sop_rule 三种类型,五类型分类器 |
| Trigger | 仅 Session Start(每次新会话)和 Task Start(手动调用)两个触发点 | |
| Event | ❌ 未实现 | 尚无结构化事件流、回放、归纳能力 |
| 类型 | 用途 | 示例 |
|---|---|---|
identity |
用户偏好、学习风格、设计约束 | "偏好自下而上学习" |
project_state |
当前阶段、阻塞项、下一步 | "V1 完成,Stripe 待集成" |
decision |
选了什么、备选方案、理由 | "SQLite vs PostgreSQL,选前者因为零运维" |
lesson |
跨项目通用教训 | "Agent 不会自动加载 skill——需硬编码到 system prompt" |
sop_rule |
行为规则:必须/禁止 | "改字段名后 grep 全项目搜所有消费者" |
| Hook | 脚本 | 触发时机 | 核心算法 |
|---|---|---|---|
| Session Start | session_start.py (53行) |
每次新会话 | 扫描 memory 目录 → 加载 active 状态文件 |
| Task Start | task_start.py (180行) |
用户提具体任务 | BM25 排序检索(k1=1.5, b=0.75, 中文 bigram, 零外部依赖) |
| Write Hook | write_hook.py (379行) |
对话产生新信息 | Trigger → Classify → Lifecycle → Storage 四步管线 |
Trigger (DROP/PASS)
→ 问候语/疑问句丢弃,决策/教训/规则通过
Classify (5-type scoring + negation detection)
→ 每种类型独立打分,阈值经过测试校准
→ 否定词检测:window=3,"不喜欢 X" ≠ "喜欢 X"
Lifecycle (CREATE / UPDATE / MERGE / DROP)
→ 词重叠率匹配已有记忆,避免重复
Storage (JSON serialization)
→ 零外部依赖,纯文件系统
- BM25 自实现:不依赖 jieba/NLP 库,中文用字符 bigram 切分,英文用单词切分,104 个停用词过滤
- 五类型分类器:每种类型独立打分规则 + 独立阈值,否定词检测覆盖 ~80% 否定场景
- 生命周期决策:词重叠率匹配(>0.6 UPDATE, >0.3 MERGE, 否则 CREATE),自动合并重复信息
AI Agent 平台有两种信息注入通道:
| 通道 | 机制 | Agent 可忽略? | 可靠性 |
|---|---|---|---|
| System Prompt(原生器官) | 注入模型上下文,生成前强制执行 | ❌ 无法绕过 | ✅ 高 |
| Tool Return Value(义肢) | Agent 调用工具,读取返回值 | ✅ 可选择忽略 | ❌ 低 |
V1 限制:Task Start 走义肢通道——检索正确但 Agent 可能只看 stats、不看 lesson。
V2 方向:把 Task Start 改为平台 pre-turn 自动注入(原生器官通道),消除 Agent 的选择性忽略。或迁移到支持 pre-turn hook 的平台。
很多人会做 RAG、long-term memory、vector DB memory。
我们不是在做 memory retrieval,而是在做 system cognition architecture(系统认知架构)。
区别在于:
- Memory retrieval 回答"存了什么、怎么找"
- System cognition 回答"什么时候该想起来、想起来之后怎么用、用了之后怎么沉淀"
# 1. 复制脚本
cp session_start.py task_start.py write_hook.py ~/your-agent/
# 2. 创建记忆目录
mkdir -p ~/your-agent/memory/{shared/{lesson,sop_rule},agent/{identity,project_state,decision,lesson,rule}}
# 3. 在 Agent 的 system prompt 最高优先级注入
# 【Session Start — 强制执行】
# terminal("python3 ~/your-agent/session_start.py")
# 4. 写入新记忆
echo '{"type":"decision","content":"...","source":"...","alternatives":[...]}' | python3 ~/your-agent/write_hook.py详见 test_protocol.md。
- 消费链路断裂(V1):Task Start 走义肢通道,Agent 可能忽略检索结果内容
- Event 层未实现:尚无结构化事件流、回放、归纳能力
- Trigger 层不完整:仅两个触发点,缺少条件触发、状态触发、时间触发
- 中文 bigram 分词:无 jieba 依赖的代价是切分精度有限
- 否定窗口=3:覆盖 ~80% 否定场景,完全解决需依存句法分析
已部署于 CiteFlow(AI 搜索可见度诊断 SaaS),管理 3 个 AI Agent(药老/海老/玄老)的跨会话认知。
- 每次新会话:Session Start 自动恢复 Agent 身份 + 项目状态 + 活跃决策
- 结果:Agent 行为一致性从随机变为稳定——不再出现"上次定了 Kami 风格、下次用 Linear 暗色"
MIT © 2026 You Jingfeng