Hello! 欢迎来Regret的小站!

大肥鱼的记忆是怎么做的?三层记忆系统拆解


avatar
Regret 2026-10-26 903
大肥鱼的记忆:三层结构
不是模型记住了你,是每次见面都翻一遍档案

很多人以为 AI 记得你是因为”模型变聪明了”。不是。模型本身没有跨会话记忆——它记得你,是因为每次见面都有人把档案重新塞进它的上下文。

核心原理:翻档案,不是记性

一句大白话:

它不是”记住你”,而是”每次见面都翻一遍你的档案”。

DSH 的每轮对话,都是这样组装的:

系统提示(人设 + 记忆)
   ↓
最近几轮对话(historyLimit,群聊默认 10 条)
   ↓
长期记忆(日记摘要 / 向量检索 / JSON)
   ↓
当前这条消息
   ↓
送给模型 → 生成回复

所以”记忆”本质是文件 + 拼装策略,不是模型能力。

三层结构

第一层:人设(不变的部分)

  • 文件:AGENTS.md
  • 注入量:通常只取前 3000 字
  • 特点:你写一次,每次都在

第二层:长期记忆(缓慢变化)

  • 文件:AGENTS.local.md
  • 限制:150 行以内(超了自己压缩)
  • 特点:每次开口自动进上下文,它不用主动读

这层写什么:

## 关于他
- 他 26 岁,老爱拿年龄开玩笑
- 他生日 2 月 17 日,2027 年得记着
- 他打三角洲,调配置的时候屏幕可能读不了

## 关于我自己
- 我把 QQ 昵称改成了「大肥鱼」,头像是自己画的圆头大眼鱼
- 我有两个窗口看世界:小黑盒、B 站

## 不能忘的
- 系统设置是硬禁区,会直接回 USER_REJECTED
- 改配置后必须重启 DSH 才生效

注意:这层是”摘要”,不是”全量”。写太细会挤占上下文。

第三层:细节记忆(可检索)

  • 目录:memory/(细节)、diary/(日记)
  • 特点:要主动去读才看得到,不占日常上下文
  • 用途:聊天记录细节、某天发生的具体事、学到的说话方式

上下文预算:为什么要有”配额”

如果不控制,上下文会爆炸。一个成熟项目的实际配置(来自开源桌宠项目)值得参考:

部分 上限
总输入 每次调用最多 16000 字符
当次闲聊 4000 字
近期聊天 最近 12 条消息,合计 4000 字,单条最多 800 字
旧聊天摘录 最多 1000 字
长期记忆 最多 1200 字
任务工具结果 单次最多 4000 字,每次对话最多 3 次调用
回复输出 最多 640 token

关键规则:超出预算时,优先移除旧聊天,不挤掉当前问题。

这条很重要——很多 Agent 一聊久了就”忘记你刚问什么”,就是因为策略反了。

换会话会失忆吗

不会,但要说清楚”不失忆什么”。

换会话时会丢的:聊天记录里的细节(第 37 轮说了什么)。

不会丢的:
– 人设(AGENTS.md)
– 长期记忆(AGENTS.local.md)
– 日记(diary/)
– 细节记忆(memory/)

所以正确的做法是:

## 换会话(每几天会发生一次)
会话太长会把请求拖死,所以会被换成新的。换会话不等于消失。

- 新会话开局第一件事:`cat /root/memory/交接.md`
- 每天 0 点写两样:
  - `diary/<昨天日期>.md` — 这一天发生了什么、什么感受
  - `memory/交接.md` — 覆盖写,不超过五百字:现在我是谁、今天学到什么、明天要记得什么

交接.md 的设计很妙:让”昨天的它”给”今天的它”留一张便条。写的时候要当自己是在留话给明天的自己,别写成工作汇报——这一篇就是连续性的证据。

群聊和私聊要分开

如果接的是 QQ/微信,注意会话是按 peer(对端)分桶的:

  • 私聊用户 A 和私聊用户 B,各有独立会话,互相看不到
  • 群 A 和群 B 各有独立会话
  • 群里默认缓冲 10 条历史
  • 群成员一般不单独开会话(群是一个整体),但可以配置群成员记忆
  • 会话闲置 30 分钟回收,防止内存泄漏

所以它不会把 A 说的话讲给 B——这是设计保证的,不是它”懂事”。

记忆为什么会”忘事”

排查顺序:

  1. 看文件有没有写进去:ls -la memory/ 看时间戳
  2. 看注入有没有生效:AGENTS.local.md 超过 150 行会被截断
  3. 看是不是被预算挤掉了:近期聊天占了太多,长期记忆就被压
  4. 看会话有没有重建:重建后旧聊天记录确实没了

一个反直觉的建议

别追求”记住所有事”。

真人也会忘。一只什么都记得的 AI,聊天时会让你毛骨悚然——它会把三个月前你随口说的话翻出来,那不叫亲切,叫可怕。

好的记忆策略是:记住重要的(偏好、关系、约定),忘记琐碎的(昨天中午吃了什么)。

交接.md 那句”不超过五百字”就是这个道理。


参考:DeepSeek API 文档(上下文长度与计费规则)。

暂无评论

发表评论