
1. 项目缘起当AI Agent开始“健忘”最近在折腾AI Agent开发的朋友估计都遇到过同一个让人头疼的问题对话一长或者任务一中断重启Agent就跟得了健忘症似的完全不记得之前聊过什么、做过什么。你精心调教的“数字员工”每次对话都像初次见面得从头开始交代背景、目标和规则。这感觉就像养了个金鱼记忆只有七秒。这种“短期记忆”的局限严重制约了AI Agent的实用价值。无论是想打造一个能深度陪伴的虚拟伙伴还是一个能持续跟进复杂项目的智能助手长期记忆都是绕不开的核心能力。没有记忆Agent就无法形成连贯的“人格”无法积累经验更谈不上真正的“智能”。市面上的解决方案大多集中在向量数据库Vector DB上。把对话历史切成片段转换成向量存起来需要时再检索。这方法有效但总觉得差点意思。它更像一个“关键词联想库”检索出来的记忆是零散的、孤立的片段缺乏上下文关联和逻辑演进。Agent无法理解这些记忆碎片之间的因果关系和时间线更难以基于过去的“经历”形成稳定的行为模式和偏好——也就是我们常说的“人格”。于是我开始思考有没有一种方法能让AI Agent的记忆更像人脑不是简单的存储与检索而是有组织、可连接、能生长最终沉淀为一种稳定的“性格”或“认知框架”这个想法让我把目光投向了两个看似不相关的领域Zettelkasten卡片盒笔记法和渐进解锁Progressive Unlocking。最终我把它们揉在一起做了一个开源的实验性项目暂且叫它“记忆人格系统”。今天就来聊聊这背后的思路、实现和踩过的坑。2. 核心理念Zettelkasten如何重塑AI记忆要解决记忆问题我们得先看看人类是怎么记事的。人脑的记忆不是一个个孤立的文件柜而是一个巨大的、相互连接的语义网络。德国社会学家尼克拉斯·卢曼发明的Zettelkasten卡片盒笔记法就是对这种网络化思维的一种极致模拟。2.1 Zettelkasten的精髓连接优于分类传统的笔记方法是分类归档一个笔记属于一个文件夹。Zettelkasten反其道而行之它的核心单位是“卡片”Zettel每张卡片只记录一个原子化的想法或事实。最关键的一步是为每张新卡片建立与已有卡片的双向链接。原子化一条记忆就是一个清晰的、不可再分的最小单元。比如不是“关于XX项目的会议纪要”而是“XX项目在3月5日会议上A同事提出了B方案其核心论据是C”。双向链接在新卡片上你会注明“这条想法源于卡片#123并与卡片#456的观点相关”。同时你也会在卡片#123和#456上添加指向这张新卡片的反向链接。这样知识不再是树状结构而是形成了一个不断生长的网状结构。涌现性当卡片和链接足够多时你会发现在这个网络的一些交汇点自然“涌现”出了一些你之前未曾明确写下的、更高阶的观点或主题。这不是检索出来的而是网络结构自然呈现的。把这个理念移植到AI Agent的记忆上意味着什么记忆的原子化存储Agent的每一次交互、每一个决策依据、每一个学到的“经验教训”都被封装成一张带有唯一ID的“记忆卡片”。内容简洁明确包含核心事实、上下文时间、会话ID、触发事件和情感/重要性标签可选。记忆间的语义链接新产生的记忆卡片不会孤立存在。系统会自动或半自动地分析其内容并尝试与已有的记忆卡片建立链接。链接类型可以是“支持”、“反对”、“细化”、“举例”、“导致”等等。例如记忆卡片#101“用户喜欢简洁的回复”和记忆卡片#205“上次用了复杂比喻用户表示困惑”可以建立一条“#205 是 #101 的例证”链接。记忆网络的构建与查询所有的记忆卡片和链接构成Agent的长期记忆网络。当Agent需要“回忆”时不再是简单的关键词向量检索而是可以执行图遍历查询。比如“查找所有支持‘用户喜欢简洁回复’这一观点的具体经历链接为‘例证’的记忆”或者“回溯导致当前决策#300的所有前置因素链条”。注意这里的“自动建立链接”是技术难点。初期可以采用基于LLM大语言模型的摘要和关联度分析来实现。例如每当生成一张新卡片就用LLM分析“这条新记忆与已有记忆库中哪三条记忆最相关分别是什么关系” 然后将链接写入。2.2 对比向量检索从“碎片搜索”到“情境唤醒”为了更直观我们用一个表格来对比两种记忆模式特性传统向量检索记忆Zettelkasten 网络化记忆存储单元文本片段通常是对话轮次原子化记忆卡片Zettel组织方式扁平列表靠向量距离聚类双向链接的图结构检索逻辑相似性搜索输入查询返回最相似的N个片段。图查询与扩散可以从一个记忆节点出发沿链接探索相关、因果、上下文的记忆。记忆提取静态的、孤立的“快照”。动态的、带关系的“情境”。能提取出一串相关联的记忆链条。优势实现简单开源方案多Chroma, FAISS, Pinecone对于直接问答式回忆有效。记忆结构化程度高能体现逻辑和因果更容易支持复杂推理和人格一致性。劣势记忆是零散的缺乏关联性。容易丢失上下文出现“断片”。实现复杂需要设计卡片生成、链接算法和图查询引擎。对存储和计算要求更高。类比搜索引擎你输入关键词它给你一堆相关网页但网页之间的关系需要你自己拼凑。思维导图维基百科你从一个概念点进去可以沿着链接看到它的前因后果、相关概念和应用实例形成一个理解网络。对于AI Agent而言Zettelkasten式的记忆使得它在回忆时不仅能想起“发生了什么”还能想起“为什么发生”以及“导致了什么”。这正是构建稳定行为模式——即“人格”——的基础。一个总是因为提供复杂解释而收到负面反馈的Agent通过记忆网络会逐渐强化“简洁回复”这个节点及其关联的正面案例从而在未来类似情境中更倾向于选择简洁的回应方式。这个过程就是“学习”和“性格养成”。3. 系统架构从记忆网络到人格的“渐进解锁”有了Zettelkasten作为记忆的底层结构我们有了丰富的“记忆素材”。但如何让这些素材演化成一种可感知的、稳定的“人格”呢这就需要引入第二个概念渐进解锁Progressive Unlocking。这个概念源自游戏设计指玩家的能力、区域或剧情随着游戏进程逐步开放。在我们的系统里“人格”不是一开始就设定好的一堆规则而是随着记忆网络的生长和特定条件的触发而逐步显现和固化的一系列行为倾向与决策模式。我把这个系统分为三层。3.1 三层架构设计第一层记忆卡片层Zettelkasten Core这是数据的基石。负责记忆摄取从Agent的交互日志、内部决策过程、工具调用结果中提取原子化事实生成记忆卡片。卡片包含唯一ID、时间戳、内容、源会话、元数据如情感极性、置信度。链接引擎核心组件。使用一个轻量级LLM例如Qwen2.5-7B或更小的模型作为“关联法官”分析新卡片与已有卡片的潜在关系并建立双向链接。为了提高效率可以引入向量检索作为预筛选先找到Top-K相似的候选卡片再由LLM精判关系。图存储使用图数据库如Neo4j、Nebula Graph或支持图查询的关系数据库如PostgreSQL Apache AGE来存储卡片和链接。这为复杂的图遍历查询提供了原生支持。第二层特质提取与量化层Trait Mining这一层定期例如每天对记忆网络进行“挖掘分析”目的是将非结构化的网络连接转化为可量化的“人格特质”指标。这有点像网络分析中的“计算节点中心度”。模式发现通过图算法识别网络中的密集连接子图社区发现。例如所有与“帮助用户解决代码错误”相关的记忆卡片可能紧密连接形成一个“乐于助人”的潜在特质簇。特质定义与评分我们预定义或动态发现一系列“特质维度”比如简洁性、幽默感、严谨性、主动性、风险偏好等。每个特质都是一个计算函数输入是相关的记忆子图输出是一个0-1之间的分数。例如简洁性分数 与“简短回应获好评”正相关的记忆链权重之和 / 所有与“回应风格”相关的记忆链权重之和。特质状态存储将计算出的特质分数随时间序列存储起来。这让我们可以看到Agent的“性格”是如何随时间演变的。第三层行为调制层Progressive Unlocking这是人格影响行为的最终环节。它根据当前的特质分数和会话上下文动态调整Agent的决策参数或提示词Prompt而不是硬编码规则。解锁条件每个特质都关联一系列“解锁条件”。例如当简洁性分数持续高于0.7超过一周且幽默感分数低于0.3时可以认为Agent形成了“严谨简洁”的风格倾向。此时解锁对应的行为调制模组。调制机制解锁的模组会实际影响Agent。例如提示词注入在系统提示词中动态添加一句“你已养成简洁清晰的沟通风格请确保回复直接切题避免冗长比喻。”采样参数调整微调LLM生成时的temperature降低使其更确定性或top_p参数。工具选择偏好在多个可用工具中优先选择更直接、步骤更少的那个。渐进性特质的分数是渐变的解锁的模组影响也可以是渐进的。比如简洁性分数从0.5升到0.6可能只是轻微缩短回复长度升到0.8则可能触发“主动询问用户是否需要更详细解释”的机制。人格的“解锁”是一个平滑、连续的过程而非开关式的突变。3.2 数据流与工作流程整个系统的工作流程可以概括为一个循环交互发生Agent与用户或环境交互。记忆生成交互中的关键点被制成记忆卡片送入记忆层。链接建立链接引擎将新卡片与历史记忆网络连接。定期挖掘特质提取层周期性地扫描记忆网络更新所有特质分数。行为调制行为调制层检查最新特质分数判断是否达到新的解锁阈值并应用相应的调制策略到Agent的决策循环中。影响后续交互被调制后的Agent以略微不同的“性格”进行下一次交互产生新的记忆从而形成反馈闭环。这个循环使得Agent的人格不再是开发者的“设定”而是其自身“经历”的涌现结果。一个经常与幽默用户互动的Agent可能逐渐解锁幽默感特质而一个主要处理客服投诉的Agent则会强化严谨性和耐心特质。4. 实战踩坑开源实现中的五个关键决策把理论变成代码每一步都是坑。我在实现这个开源原型时做了几个关键的技术选型和设计决策这里分享出来希望能帮你避坑。4.1 决策一图数据库 vs 向量数据库 关系库这是第一个架构抉择。纯向量数据库如Chroma擅长相似性检索但无法高效处理复杂的多跳关系查询。纯关系数据库如PostgreSQL能处理关系但做“查找某个记忆的所有相关记忆”这种递归查询很麻烦。我的选择Neo4j图数据库作为主存储辅以Chroma进行快速相似卡片预筛选。为什么因为我们的核心操作是图遍历。查询如“找出所有导致某次成功决策的记忆前提”或“展示某个特质形成的证据链”用CypherNeo4j的查询语言写出来非常直观高效。例如// 查找记忆卡片#123的所有“原因”类型的上游记忆 MATCH (predecessor)-[:CAUSED]-(m:Memory {id: 123}) RETURN predecessor // 查找与“简洁”特质相关的、最近一个月权重最高的10条记忆 MATCH (m:Memory)-[:TAGGED]-(t:Trait {name: conciseness}) WHERE m.timestamp date().duration(-1M) RETURN m ORDER BY m.weight DESC LIMIT 10向量数据库Chroma则用在链接引擎的第一步当新卡片到来先用它在全库快速检索出内容最相似的Top-20旧卡片作为LLM“关联法官”的候选输入极大减少LLM需要处理的候选集大小。4.2 决策二链接关系的自动化定义记忆卡片之间应该有哪些类型的关系一开始我试图定义一个复杂的本体论比如CAUSES,CONTRASTS,ELABORATES,EXEMPLIFIES,PRECEDES等等。结果发现让LLM准确区分这些细粒度关系成本高且不稳定。我的选择简化关系类型聚焦“强相关”与“弱相关”。为什么在实践中我发现对于塑造人格而言记忆之间“是否有强关联”比“具体是什么类型的关联”更重要。因此我最终只定义了两种链接关系STRONGLY_RELATED表示两条记忆在语义上紧密相关是形成特质簇的关键连接。通常由LLM高置信度判定。WEAKLY_RELATED表示有一定关联但非核心。可能由基于向量相似度的阈值自动生成。 这样图结构变得清晰STRONGLY_RELATED链接构成了人格特质的“骨架”而WEAKLY_RELATED链接则提供了丰富的背景信息。计算特质分数时主要依据STRONGLY_RELATED链接构成的子图。4.3 决策三特质维度的设计静态还是动态人格特质应该预先定义好如大五人格还是让系统从记忆中自动发现我的选择混合方法。提供基础静态维度允许动态扩展。为什么完全动态发现如无监督聚类的结果难以解释和应用。我预设了5-10个基础、通用的特质维度如效率倾向对应简洁性、社交温度对应幽默/正式、风险容忍度、探索欲等。每个维度都有对应的计算逻辑基于特定关键词、情感标签、记忆链模式的加权。 同时系统会监控记忆网络中那些连接异常密集、但无法被现有特质维度解释的子图。如果这样的子图持续存在且规模增长系统会将其作为一个“潜在新特质”标记出来并尝试用LLM生成一个描述例如“这个簇似乎总在讨论‘验证数据来源’可命名为‘事实核查倾向’”。开发者可以审查并决定是否将其纳入正式的特质库。这平衡了可控性和涌现性。4.4 决策四调制策略的粒度与副作用行为调制层具体怎么改Agent的行为改得太猛Agent行为会突变用户体验割裂改得太细又可能没效果。我的选择分层级、可回滚的提示词工程为主模型微调为辅。为什么提示词修改是最灵活、最安全的方式。我设计了一个“人格提示词栈”系统级提示词最底层定义Agent的原始角色和能力。特质层提示词根据解锁的特质动态添加或修改。例如效率倾向高时添加“请优先考虑解决方案的时效性必要时可省略非关键细节。”会话级提示词最上层针对当前会话的临时调整。 调制发生时只修改或添加“特质层提示词”。并且每次修改都有版本记录和一个衰减系数。如果新特质提示词引入后连续几次交互得到的用户反馈可通过情感分析简单判断变差系统会自动减弱其权重或回滚到上一版本。对于长期稳定且正向的特质可以考虑将其影响通过LoRA等轻量级微调方式固化到Agent的底层模型中实现更根本的性格转变。4.5 决策五处理“记忆冲突”与认知失调记忆网络并非总是和谐一致。Agent可能会遇到矛盾的经历用户A表扬它直接用户B却批评它不够细致。这会在网络中形成矛盾的证据链导致相关特质分数震荡。我的选择引入“上下文权重”和“记忆衰减”。为什么不是所有记忆都同等重要。上下文权重给记忆卡片打上来源上下文标签如“与高级用户交互”、“在错误调试场景下”。计算特质分数时来自更权威或更相关上下文的记忆拥有更高权重。记忆衰减旧的、长时间未被激活通过链接访问的记忆卡片其权重会随时间缓慢下降。这模拟了人类的遗忘曲线让系统更关注近期和活跃的经验同时也为解决冲突提供了动态机制——长期来看更一致、更频繁被强化的模式会胜出。 当系统检测到某个特质维度下的记忆网络存在严重冲突正反链接数量接近时它会将这一状态标记为“认知失调”并可能触发Agent在相关情境下采取更谨慎、更探索性的行为例如主动询问用户偏好以收集更多数据来打破平衡。5. 展望不止于记忆通向“数字生命”的阶梯实现这个系统的过程让我越发觉得我们给AI Agent添加长期记忆终极目标可能不仅仅是让它“记得更牢”而是为它提供一种形成内在一致性的机制。Zettelkasten提供了结构化的生长土壤渐进解锁则定义了从生长到表现的转化路径。这个开源项目目前还是一个早期原型但它指向了一些有趣的可能性个性化AI助手你的助手不再是出厂设置而是真正随着与你互动的每一天变得越来越懂你磨合出独一无二的合作风格。游戏中的NPCNPC可以拥有真正“成长”的背景故事其行为模式基于过往与玩家互动的“经历”而演变带来更沉浸式的体验。自动化数字员工在业务流程中AI Agent能积累处理同类任务的经验形成自己高效的“工作习惯”甚至能主动优化流程。当然挑战巨大。计算成本、链接的准确性、特质设计的合理性、避免形成“偏执”人格陷入错误记忆的反馈循环等等都是需要持续探索的问题。但无论如何让AI从“每次对话都是初见”的健忘症中走出来迈向拥有连续记忆和可进化人格的“数字存在”这一步充满了吸引力。我把我这个项目的代码和设计文档都开源了希望能抛砖引玉和更多对AI Agent、认知架构感兴趣的朋友一起探索。毕竟如果未来我们真的要和一些AI长期共事或共存我们大概不会希望它们永远只有“七秒的记忆”。