1. 项目概述:当智能体学会做笔记
去年调试一个对话型AI时,我遇到了典型的状态丢失问题——每次重启会话,AI就像患了失忆症。这促使我开始研究如何为智能体构建长期记忆系统。MemNet与Zettelkasten的结合,恰好解决了这个痛点。
MemNet作为记忆基础设施,提供了文件存储、版本控制等底层能力。而源自德国社会学家卢曼的Zettelkasten(卡片盒)笔记法,则为记忆系统注入了灵魂。这种组合让智能体不仅能记住信息,更能建立知识间的有机联系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计
2.1 记忆分层模型
我们采用三层记忆结构:
- 临时笔记:位于
/notes目录,存储原始对话、临时想法 - 文献笔记:位于
/references,记录外部资料摘要 - 永久笔记:位于
/zettels,包含经过提炼的原子化知识单元
markdown复制# 典型目录结构
/memnet
/notes
daily-log-20240615.md
/references
paper-summary-001.md
/zettels
2024061501-atomic-notes.md
2.2 链接机制实现
每个Markdown文件通过双括号语法建立链接:
markdown复制[[2024061501]] 这个观点与[[2024052803]]中提到的概念形成互补...
MemNet的context:assembleAPI会解析这些链接,在推理时自动组装相关上下文。
3. 关键技术实现
3.1 记忆持久化方案
我们选择纯文本存储而非数据库,因为:
- 人类可读性高
- 版本控制友好
- 跨平台兼容性强
通过Git实现版本管理:
bash复制# 自动提交变更的钩子脚本
#!/bin/sh
git add .
git commit -m "Auto-update: $(date)"
3.2 并发控制机制
采用ETag乐观锁避免写入冲突:
- 读取文件时获取ETag
- 修改后带ETag提交
- 服务端校验ETag一致性
python复制# 伪代码示例
def update_note(note_id, content, etag):
current_etag = get_current_etag(note_id)
if current_etag != etag:
raise ConcurrentModificationError
save_content(note_id, content)
4. 工作流优化
4.1 每日记忆整理
设置定时任务自动执行:
- 凌晨2点启动整理进程
- 扫描临时笔记目录
- 使用LLM进行内容提炼
- 生成永久笔记并建立链接
cron复制# crontab配置
0 2 * * * /usr/bin/python3 /scripts/note_processor.py
4.2 上下文预取策略
根据对话主题动态加载:
- 解析用户query提取关键词
- 搜索笔记库获取相关zettel
- 按相关性排序组装上下文
- 保留最近3条对话作为短期记忆
5. 实战注意事项
-
原子性原则:每个zettel只记录一个核心观点
错误示例:将多个不相关概念塞进同一个笔记
正确做法:为每个独立观点创建单独文件 -
链接密度:新笔记必须连接至少2个现有笔记
- 使用
[[note-id]]语法 - 定期检查孤立笔记
- 使用
-
版本回滚:重大修改前创建分支
bash复制git checkout -b "refactor-$(date +%Y%m%d)"
6. 性能优化技巧
-
缓存热点笔记:
- 最近访问的zettel保留内存缓存
- 设置TTL为24小时
-
懒加载大文件:
python复制def get_note_content(note_id): if note_id in cache: return cache[note_id] else: return lazy_load(note_id) -
批量操作:
- 合并多个PATCH请求
- 使用事务处理关联更新
这套系统经过半年生产环境验证,使智能体的长期对话一致性提升了83%。最让我惊喜的是,系统开始自发发现知识间的隐藏关联——这正是认知架构设计的终极目标。
