AI 记忆与上下文

Replica 的核心使命:让 AI 拥有持久、可检索、会进化的记忆系统,而不仅仅是一个无状态的对话窗口。

为什么 AI 需要记忆? 核心问题

🧠

上下文窗口有限

LLM 的上下文窗口是有限的。当对话超过阈值,早期信息会被丢弃。记忆系统让重要信息持久化。

🔗

跨会话连续性

用户期望 AI 记住之前的对话。没有记忆,每次对话都是从零开始,无法建立长期关系。

🎯

个性化与精准

通过积累用户偏好、事实和行为模式,AI 可以提供越来越精准的个性化回复。

三层上下文架构 Context Build

每次对话时,系统从三个层次组装上下文注入 LLM,确保 AI 既了解用户的长期信息,又能检索相关历史知识,同时保持当前对话的连贯性。

1

Evergreen 常青记忆

EvergreenMemory — 始终注入

关于用户的长期事实:偏好、关系、目标等。不需要搜索,全量注入系统提示词。

fact preference relationship goal
注入 System Prompt
2

Knowledge 知识检索

KnowledgeEntry — 按相关性检索

从统一知识库中,通过混合搜索(向量 + 全文)检索与当前对话最相关的历史知识片段。

episode event foresight
注入 System Prompt
3

Session 会话上下文

Message — 近期未压缩消息

当前会话中尚未被压缩的消息历史,保持对话的即时连贯性。超过阈值时触发压缩。

user assistant compaction_summary
作为 Messages 历史
// 上下文组装伪代码
system_prompt = build_system_prompt(
  evergreen: 全量用户长期记忆,
  knowledge: hybrid_search(query=用户消息, top_k=5)
)
messages = [system_prompt] + session.uncompacted_messages
response = LLM.stream(messages)

四种记忆类型 KnowledgeEntry

情节记忆

Episode

对一段对话的叙事性总结,包含主题、参与者和关键情节。类似人类的"回忆"。

"用户讨论了周末去杭州旅行的计划,提到想去西湖和灵隐寺。"

事件日志

Event

从对话中提取的原子事实,每条都是独立可检索的知识点。

"用户的生日是 3 月 15 日"
"用户养了一只叫小橘的猫"

前瞻预测

Foresight

基于对话推断的未来可能事件,附带时间窗口和证据链。

"用户可能在下周需要请假(证据:提到下周有医院预约)"

常青记忆

Evergreen

手动或自动提取的长期稳定事实,始终注入上下文,不参与检索排序。

"用户偏好简洁的回复风格"
"用户是一名后端工程师"

混合检索流程 Hybrid Search

用户查询

query text

Embedding

query → vector

向量搜索

cosine similarity

全文搜索

ts_rank + tsvector

分数融合

0.7×vec + 0.3×text

时间衰减

exp(-λ × age)

MMR 重排序

多样性 + 相关性

Top-K 结果

default: 10

// 分数计算公式
score = 0.7 × normalize(vector_similarity) + 0.3 × normalize(text_rank)
score *= exp(-ln(2)/30 × age_in_days)   // 半衰期 30 天
MMR(d) = λ × score(d) - (1-λ) × max_sim(d, selected)   // λ=0.7

记忆生命周期 Lifecycle

01

产生

对话触发边界检测,
生成 MemCell

02

提取

三个提取器并发运行,
生成知识条目

03

存储

向量化后写入
PostgreSQL + pgvector

04

检索

混合搜索召回,
注入对话上下文

⏳ 时间衰减机制

记忆不会被删除,但会随时间自然衰减。半衰期 30 天意味着一个月前的记忆权重降至 50%,两个月前降至 25%。新鲜的记忆自然获得更高优先级。