问题:为什么 AI Agent 总是记不住东西?
如果你使用过 OpenClaw、Claude Code 或其他 AI Agent,很可能遇到过这样的困扰:

每次开始新对话,都像面对一张空白画布。
- Agent 完全忘记你上周教过它的工作流程
- 它缺乏稳定的“性格”,回答风格时好时坏
- 会话结束后,上下文被彻底清空,下一次又得从零开始
这就像一位患有短期记忆障碍的助手——能力很强,却永远无法从过去的互动中积累经验。
那么,问题根源在哪里?说到底,现在的 AI Agent 缺少一套成熟的“记忆体系”。它们能理解上下文,但无法把对话转化为可复用的、持久的“经验”。这可不是小问题,而是阻碍 Agent 从“玩具”进化为“生产力工具”的核心瓶颈。
解决方案:open-upsp 开源人格系统
面对这个难题,有人选择等待,有人选择行动。这套方案的核心思想,融合了两个领域的成熟理念:
- Zettelkasten(卢曼卡片盒笔记法) — 源自知识管理领域的方法论,强调原子化笔记和双向链接。
- RPG 渐进解锁机制 — 游戏设计中常见的角色成长体系,用于控制 Agent 能力的“释放节奏”。
基于这两大灵感,我们构建了一套开源的人格系统。它不只是一个简单的“记忆插件”,而是一个完整的、可进化的 Agent 人格框架。
整体架构概览
┌─────────────────────────────────────────────┐│ OpenClaw Agent 会话层│├─────────────────────────────────────────────┤│┌──────────────┐┌──────────────────┐│││ 核心技能││ 可进化技能││││ (不可变规则)││ (渐进解锁)││││││││││ • 身份注入││ • 进化参数 ││││ • 行为规则││ • 自定义扩展 ││││ • 故障保护││ • 深度规则 │││└──────────────┘└──────────────────┘││ ││││ └──────────┬───────────┘││▼││ ┌──────────────────┐││ │ZK 知识图谱│││ ││││ • 原子笔记│││ • 双向链接│││ • 夜间蒸馏│││ └──────────────────┘│└─────────────────────────────────────────────┘
核心能力详解
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 游戏里的角色,从 Level 1 新手村一步步成长为满级大佬。
unlockCondition:round: 10# 对话满 10 轮workhoodIndex: 0.3 # 信任度达到 30%
解锁前(基础人格):安全保守,不主动提建议,只回答明确提出的问题,情感表达克制。
解锁后(进化人格):主动发现知识关联,会说出“这个和你之前问的 XX 有关”;情感表达更丰富,甚至带点幽默感;可以执行更复杂的 session-end 工作流。
这种设计背后的逻辑很清晰:在不够了解用户之前,宁可保守一些;随着互信的加深,再逐步释放更高阶的能力。既保证了安全底线,又提供了成长的乐趣。
4. 会话结束自动工作流
对话结束时,工作并未停止。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 的行为变化非常显著:
优化前(未使用 open-upsp):每次对话都像第一次见面的陌生人。
优化后(启用 open-upsp,第 15 轮对话,已解锁):Agent 就像一个合作多年的老搭档,记得你的偏好、你的项目、你曾经问过的疑问。
开源与贡献指南
项目已在 GitHub 开源:github.com/cx2002302-l…
License: MIT
对于“AI Agent 长期记忆”这个命题,还有很多方向和可能性值得深入探索。无论是通过 Issue 提出疑问,还是提交 Pull Request 贡献代码,我们都非常欢迎。
```