《生化危机》中的 Alice 拥有完美的记忆传承能力——每一次重生都保留前世的经验和知识。这种能力正是当前 AI 助手所欠缺的:如何让 AI 真正"记住"用户,跨越会话边界持续学习?
本文介绍一套开源的长期记忆系统方案,让 AI 助手拥有类似 Alice 的记忆能力。
核心问题
当前 AI 助手(如 ChatGPT、Claude)的局限:
- 上下文有限 - 只能记住当前对话的几轮内容
- 会话隔离 - 每次对话都是"陌生人"
- 无法累积 - 无法从长期互动中学习用户偏好
- 事实遗忘 - 上周告诉它的信息,这周就忘了
Alice 记忆系统架构
借鉴人类记忆的分层结构,设计四层记忆体系:
┌─────────────────────────────────────────┐
│ 工作记忆 (Working) │ ← 当前对话上下文
│ 大小: 100K-200K tokens │
├─────────────────────────────────────────┤
│ 短期记忆 (Short-term) │ ← 近期事实、临时偏好
│ 保留: 几天到几周 │
├─────────────────────────────────────────┤
│ 长期记忆 (Long-term) │ ← 核心事实、关系、历史
│ 保留: 永久 │
├─────────────────────────────────────────┤
│ 程序记忆 (Procedural) │ ← 行为模式、技能、规则
│ 更新: 版本迭代 │
└─────────────────────────────────────────┘
记忆分层详解
1. 工作记忆
作用:承载当前对话的上下文
特点:
- 直接使用 LLM 的上下文窗口
- 包含系统提示 + 对话历史 + 检索到的记忆
- 会话结束即清空
优化策略:
- 对话摘要压缩:将早期对话总结为关键点
- 选择性保留:只保留高重要性消息
- 记忆注入:从长期记忆中检索相关信息
2. 短期记忆
作用:记住近期的事实和临时偏好
存储内容:
- 最近讨论的话题
- 临时任务状态
- 短期偏好(如"今天用正式语气")
技术实现:
- 向量数据库(Pinecone / Chroma)
- 时间衰减:7-30天后自动降级到长期记忆或删除
3. 长期记忆
作用:永久存储核心事实和用户画像
存储内容:
| 类型 | 示例 |
|---|---|
| 用户画像 | 职业、兴趣、沟通风格 |
| 重要事实 | 生日、过敏史、项目 deadline |
| 关系网络 | 同事、朋友、家人的信息 |
| 历史事件 | 过去的对话摘要、决策记录 |
| 偏好学习 | 喜欢的餐厅、常用工具 |
技术实现:
- 结构化存储:图数据库(Neo4j)存储关系
- 向量化:语义检索支持
- 版本控制:事实更新保留历史
4. 程序记忆
作用:定义 AI 的行为模式和技能
内容:
- 系统提示词(System Prompt)
- 工具定义(Tools/Functions)
- 工作流模式(如"先思考再回答")
更新方式:
- 人工编辑配置文件
- A/B 测试不同策略
- 版本化管理
记忆生命周期
对话输入
↓
重要性评估 ──→ 低 ──→ 丢弃
↓ 高
提取关键信息
↓
┌─────────────┐
│ 工作记忆 │ ← 立即使用
└─────────────┘
↓
向量化 + 结构化
↓
┌─────────────┐
│ 短期记忆 │ ← 7-30天
└─────────────┘
↓ (定期整理)
┌─────────────┐
│ 长期记忆 │ ← 永久保存
└─────────────┘
记忆检索机制
混合检索策略
# 检索评分公式
score = semantic_similarity * 0.4 + \
time_decay * 0.3 + \
importance * 0.2 + \
access_frequency * 0.1
| 因子 | 说明 |
|---|---|
| 语义相似度 | 向量余弦相似度 |
| 时间衰减 | 越新的记忆权重越高 |
| 重要性 | 用户标记或模型评估 |
| 访问频率 | 经常被调用的记忆优先 |
检索流程
用户提问: "帮我订那家餐厅"
↓
提取关键词: ["订餐厅", "那家"]
↓
向量化查询
↓
┌─────────────────┐
│ 向量相似度搜索 │
│ 召回 Top-K │
└─────────────────┘
↓
┌─────────────────┐
│ 重排序 (Rerank) │
│ 结合时间、重要性 │
└─────────────────┘
↓
┌─────────────────┐
│ 注入上下文 │
│ 生成回答 │
└─────────────────┘
技术实现栈
开源方案
| 组件 | 推荐技术 | 替代方案 |
|---|---|---|
| 向量数据库 | Chroma | Pinecone, Weaviate, Milvus |
| 图数据库 | Neo4j | Dgraph, JanusGraph |
| 记忆管理 | MemGPT | LangChain Memory |
| 检索框架 | LlamaIndex | LangChain RAG |
| 部署 | Docker + FastAPI | Serverless |
最小可行架构
# 核心类设计
class MemorySystem:
def __init__(self):
self.vector_db = ChromaDB()
self.graph_db = Neo4j()
self.embedder = OpenAIEmbedding()
def store(self, content: str, metadata: dict):
"""存储记忆"""
embedding = self.embedder.encode(content)
self.vector_db.add(embedding, content, metadata)
# 提取实体关系存入图数据库
entities = self.extract_entities(content)
self.graph_db.add_relations(entities)
def retrieve(self, query: str, top_k: int = 5):
"""检索记忆"""
query_embedding = self.embedder.encode(query)
candidates = self.vector_db.search(query_embedding, top_k * 2)
# 重排序
ranked = self.rerank(candidates, query)
return ranked[:top_k]
关键设计原则
1. 隐私优先
- 本地存储:敏感数据不上云
- 加密传输:API 调用使用 TLS
- 用户可控:查看、编辑、删除记忆的权限
2. 可解释性
- 来源追溯:每个回答标注引用的记忆
- 置信度显示:记忆的可信程度
- 更新日志:记忆变更历史
3. 效率优化
- 分层缓存:热数据内存缓存
- 异步写入:不阻塞主流程
- 批量处理:定期整理和压缩记忆
4. 遗忘机制
def should_forget(memory: Memory) -> bool:
"""判断是否应该遗忘"""
if memory.importance > 0.8:
return False # 重要记忆永不遗忘
if memory.last_access > 90_days:
return True # 90天未访问
if memory.confidence < 0.3:
return True # 低置信度
return False
应用场景
| 场景 | 记忆应用 |
|---|---|
| 个人助手 | 记住生活习惯、偏好、日程 |
| 客服机器人 | 客户历史、投诉记录、解决方案 |
| 教育辅导 | 学习进度、薄弱点、教学偏好 |
| 健康管理 | 病史、用药、体检指标趋势 |
| 项目管理 | 项目背景、决策历史、干系人关系 |
参考仓库
| 项目 | 地址 | 说明 |
|---|---|---|
| MemGPT | https://github.com/memgpt/memgpt | 分层记忆管理框架 |
| LangChain Memory | https://github.com/langchain-ai/langchain | 对话记忆模块 |
| LlamaIndex | https://github.com/run-llama/llama_index | 检索增强生成 |
| Chroma | https://github.com/chroma-core/chroma | 开源向量数据库 |
总结
Alice 记忆系统的核心价值:
- 分层存储 - 不同记忆有不同的生命周期和存储方式
- 智能检索 - 多因子排序,召回最相关的记忆
- 持续学习 - 从每次互动中提取和更新知识
- 隐私可控 - 用户拥有数据的完全控制权
这套方案让 AI 助手从" Stateless "变成" Stateful ",真正实现个性化的长期陪伴。
参考链接: