AI Agent长期记忆:Zettelkasten+渐进解锁开源人格系统
问题:AI Agent 为何总是“前脚说完,后脚就忘”?
不少人在使用 OpenClaw、Claude Code 等 AI Agent 时栽过跟头:
每次开启新会话,Agent 都像一张被清空的白纸。
- Agent 对上周教过的流程毫无印象
- 没有稳定人格,回复风格时冷时热
- 会话结束即清空,每次交互都得从零开始
这就像一个只有短期记忆的助手——能力在线,但永远无法从历史交互中积累经验。
核心症结在哪里? 当前的 AI Agent 缺少一套可落地的“记忆系统”。它们能理解连续对话,但无法把上下文固化为可复用的“经验”进行持久化。这不仅是小缺陷,而是制约 Agent 从“实验品”跃升为“生产力核心”的根本瓶颈。
解决方案:open-upsp
与其等待行业标准,不如动手造轮子。核心思路借鉴了两个成熟领域的实践经验:
- Zettelkasten(卢曼卡片盒) — 知识管理中的原子化笔记与双向链接机制。
- RPG 渐进解锁 — 游戏设计中控制角色能力释放节奏的成长模型。
基于这两大理念,我们构建了一个开源人格系统。它并非简单的“记忆插件”,而是一套可迭代的 Agent 人格框架。
整体架构
┌─────────────────────────────────────────────┐│ OpenClaw Agent Session│├─────────────────────────────────────────────┤│┌──────────────┐┌──────────────────┐│││ Core Skill ││ Evolvable Skill││││ (不可变)││ (渐进解锁)││││││││││ • 固定身份配置││ • 成长参数 ││││ • 行为约束 ││ • 自定义扩展 ││││ • 异常兜底 ││ • 深度规则 │││└──────────────┘└──────────────────┘││ ││││ └──────────┬───────────┘││▼││ ┌──────────────────┐││ │ZK Knowledge│││ │ Graph│││ ││││ │ • 原子笔记│││ │ • 双向链接│││ │ • 夜间蒸馏│││ └──────────────────┘│└─────────────────────────────────────────────┘
核心能力
1. 人格上下文持续加载
告别从零开始的空白状态。每次对话启动时,Agent 自动加载完整的身份档案,明确自身定位、交互对象以及历史进度。
identity:name: "老徐"archetype: "冷静理性的技术导师"state:round: 15# 累计完成 15 轮对话workhoodIndex: 0.45# 信任度 45%valence: 12# 效价(当前情感倾向)memory:stm: [...] # 短期记忆(当前会话)ltm: [...] # 长期记忆(历史归档)
也就是说,Agent 开口的第一句话就已经识别出你是谁、你们聊到了哪里。这是整个“记忆”功能的起点,也是所有进阶能力的基础支撑。
2. Zettelkasten 知识图谱
知识管理并非简单的向量库检索,而是真正意义上的知识图谱:每则笔记都是一个独立的知识元,通过双向链接编织成网。当 Agent 遇到复杂问题时,它不再在海量碎片中“猜”,而是在结构化的网络中“寻”。
[笔记 A: "React useEffect 闭包陷阱"] ↓ --extends-->[笔记 B: "useRef 解决 stale closure"]↓ --related-->[笔记 C: "React 18 自动批处理"]
核心操作决定了这个知识管理引擎的能力边界:
zk_create_note— 创建原子笔记zk_search_notes— 语义检索zk_create_link— 建立双向链接zk_distill_memory— 夜间自动蒸馏归档
3. 渐进解锁
方案中最具巧思的设计——Agent 人格并非一成不变,而是随着交互逐步“成长”。这好比 RPG 游戏中的角色,从新手村逐步升级为满级大佬。
unlockCondition:round: 10# 对话满 10 轮workhoodIndex: 0.3 # 信任度达到 30%
解锁前(基础人格):安全保守,不主动提议,只回答明确问题,情感表达克制。
解锁后(进化人格):主动发现知识关联,会说出“这个和你之前问的 XX 有关”;情感表达更丰富,甚至带点幽默感;可以执行更复杂的 session-end 工作流。
设计逻辑很清晰:在不够了解用户之前,宁可靠保守兜底;随着互信加深,逐步释放高阶能力。既保证了安全底线,又提供了成长的趣味性。
4. Session-End 自动工作流
对话结束不代表工作结束。Agent 会自动执行“记忆固化”流程:
Distill(蒸馏) → Update(更新状态) → Sync(同步到 ZK)
无需手动保存,Agent 能自主判断哪些信息值得长期记忆,哪些只是临时上下文。这是系统保持“低成本、高效率”运转的关键。
技术实现
项目结构
open-upsp/├── skill/│ ├── SKILL.md# OpenClaw Skill 入口│ ├── core/ # ? 不可变核心│ │ ├── RULES.md# 8 条行为规则│ │ └── PROMPT.md # 动态系统提示词│ └── evolvable/# ? 渐进解锁模块│ ├── PARAMS.yaml # 运行时参数│ ├── EVOLUTION.md# 进化规则│ └── EXTENSIONS.md # 用户自定义扩展├── src/│ ├── context/builder.ts# 上下文组装器│ ├── skill/evolution-loader.ts# 进化参数加载│ └── cli/# 命令行工具└── tests/# 207 个测试
关键技术点
双 Skill 架构:核心不可变规则与渐进解锁规则分离,职责清晰。
// Core: 不可变安全规则export const coreRules = ["Session start: inject persona context","Auto-record valuable info (weight 1-5)","Session-end: distill → update → sync","Identity protection: reject one-shot overrides",];// Evolvable: 渐进解锁export function isUnlocked(persona: Persona): boolean {return persona.state.round >= 10 && persona.state.workhoodIndex >= 0.3;}
上下文组装:身份、状态、记忆、关系、知识、进化——所有维度被整合为一个结构化上下文,交付 Agent。
build(persona: Persona): string {const parts = [this.buildIdentity(persona), // 我是谁this.buildState(persona),// 当前状态this.buildMemory(persona), // 记忆this.buildRelations(persona),// 关系网络this.buildKnowledge(query),// 知识检索this.buildEvolution(persona),// 进化模块];return parts.join("nn---nn");}
测试覆盖
Test Files23 passed (23) Tests207 passed (207)Coverage94.39%
覆盖 6 个真实场景模拟测试,涵盖首次对话建立身份、技术讨论记录知识、情感聊天状态变化、进化解锁验证、身份攻击保护、多实体关系管理——几乎你日常会用到的所有场景。
- 首次对话建立身份
- 技术讨论记录知识
- 情感聊天状态变化
- 进化解锁验证
- 身份攻击保护
- 多实体关系管理
安装使用
前置要求
- Node.js >= 22
- OpenClaw >= 2026.4.24
安装
npm install -g open-upsp
npm postinstall 会自动处理:
- 复制 skill 到
~/.openclaw/skills/open-upsp/ - 注册到
openclaw.json - 安装 Zettelkasten 插件
创建位格
open-upsp init
查看状态
open-upsp status
手动注入上下文
open-upsp context --query "React 性能优化"
实际效果
部署后,OpenClaw Agent 的行为变化非常直观:
Before(无 open-upsp):每次会话均从零开始,陌生人模式。
After(有 open-upsp,Round 15,已解锁):Agent 像合作多年的老搭档,记得你的习惯、项目及过往疑问。
开源与贡献
项目已在 GitHub 开源:github.com/cx2002302-l…
License: MIT
关于“AI Agent 长期记忆”这一命题,还有很多方向和可能性值得探索。无论是通过 Issue 提出疑问,还是提交 Pull Request 贡献代码,都欢迎你的参与。
