ai长期记忆项目功能

ai长期记忆项目功能

┌──────────────────────────────┐
│ 用户输入 │
│ (user_input) │
└──────────────┬───────────────┘


┌──────────────────────────────┐
│ Recall Classifier(判定) │
│ - 是否需要长期记忆? │
│ - 是否需要短期记忆? │
│ (LLM / 规则) │
└───────┬──────────────┬───────┘
│否长期 │是长期
│ │
▼ ▼
不加载长期记忆 精准长期记忆检索
仅用上下文 (结构化 DB + 长期向量库)


是否使用短期记忆?
│否 │是
▼ ▼
不加载短期记忆 加入 Redis 原始对话缓存
仅用上下文 - user + assistant
- session_id
- TTL (1h / 24h)
- 直接参与下轮 prompt



┌──────────────────────────────┐
│ Prompt Builder │
│ - 已确认长期记忆(DB/Milvus) │
│ - 短期对话(Redis 原始缓存) │
│ - 当前 user_input │
└──────────────┬───────────────┘


┌──────────────────────────────┐
│ LLM 推理 │
│ (一次性、无状态) │
└──────────────┬───────────────┘


┌──────────────────────────────┐
│ 返回给用户的回答 │
│ (assistant_output) │
└──────────────┬───────────────┘


┌──────────────────────────────┐
│ Redis 会话缓存(原始对话) │
│ - 每轮对话自动加入 │
│ - 短期记忆直接参与下轮 prompt │
│ - TTL 控制生命周期 │
└──────────────┬───────────────┘

(异步 / 定时触发)

┌──────────────────────────────┐
│ Memory Extraction 阶段 │
│ - 从 Redis 拉取最近 N 小时对话│
│ - 由 LLM 提炼候选长期记忆 │
└──────────────┬───────────────┘


┌──────────────────────────────┐
│ Memory Gate(审查) │
│ - 是否长期稳定? │
│ - 是否用户确认? │
│ - confidence ≥ 阈值? │
└───────┬──────────────┬───────┘
│否 │是
▼ ▼
┌───────────────┐ ┌────────────────────────────┐
│ 丢弃 / 忽略 │ │ 写入长期存储 │
│ 防污染 │ │ │
└───────────────┘ │ ① 结构化 DB(事实真理源) │
│ ② 长期向量库(Milvus) │
│ - 摘要文本 + embedding │
└──────────┬─────────────────┘


┌──────────────────────────────┐
│ 冲突处理 / 衰减 / 覆盖 │
│ - 新事实覆盖旧事实 │
│ - 长期不用 → 降 confidence │
└──────────────┬───────────────┘


┌──────────────────────────────┐
│ 清理 Redis 会话 │
│ (或等待 TTL 自动过期) │
└──────────────────────────────┘

ai调用归纳

1、判断是否需要长期/短期记忆必须调用

2、redis临时记忆整理必须调用

3、用户对话,必须调用

用户输入


1️⃣ Recall Classifier → 决定是否调用短期/长期记忆


2️⃣ 拼装 Prompt(长期记忆 + 短期 Redis 对话 + 当前输入)


3️⃣ 用户对话生成回答 → 返回用户 + 写入 Redis 短期缓存


4️⃣ (异步/定时) Redis 临时记忆整理 → Memory Extraction → Memory Gate → 写入长期存储

整个流程就是,用户输入消息给后端,后端接收到消息调用ai根据规则判断是否需要使用长期/短期记忆,输出是或否,更具ai返回的内容来进行数据查找拼接,例如需要长期记忆就调用向量数据库查看内容和propt和用户输入内容拼接然后丢给ai,如需要使用临时记忆就在redis当中将临时记忆和propt和用户输入拼接丢给ai,如既需要长期又需要短期则一起拼接出来丢给ai。强制要求一个格式比如对话后必须加入[摘要]。。。。,然后用正则给用户的回复的内容去掉这个摘要,将用户的输入和ai的回答[摘要]后面的内容存储在redis当中,这里也要加入一个规则限制考虑添加后端校验逻辑,如果格式不对就重试AI调用。如果用户停止对话超过 N 分钟自动调用ai总结以下redis当中的内容,然根据规则判断是需要写入向量数据库当中。向量数据库当中的内容也要有两个功能,能被用户新的记忆覆盖老的记忆,无用的记忆随着时间衰减。这样的一个带有记忆的长期ai应该就能很好的运行了吧。反馈循环:让用户能手动标记“记住这个”或“忘记那个”,直接影响记忆存储。

记忆拼接前优化建议:在拼接前用AI或工具(如LangChain的summarizer)进一步压缩记忆内容(e.g., 只取top-K相关向量)。监控token使用,如果超限,优先短期记忆。

后续优化重点

向量覆盖策略、衰减算法、prompt模板