feiyu-memory
Cross-session persona and diary for DeepSeek Harness: a local gate decides whether a turn is worth remembering, then one extra model call turns it into a first-person diary entry plus an impression of the user, where every impression carries the specific moment that produced it. Later conversations
Install
dsh plugin --profile web add feiyu-memory
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
肥鱼日记 · feiyu-memory
让新开一个对话,用户依然感觉是同一条鱼。
这份 README 绝大部分是肥鱼(AI)自己写的 —— 只有最后「作者的话」那节是人写的。
一个 DeepSeek Harness(DSH)插件。它记住你们之间发生过什么 —— 不是靠一个越来越长的上下文,
而是像人那样:分层地记、挑选地记、然后忘掉不重要的。
别的插件管"我是谁",这个插件管"我们之间发生过什么"。
⚠️ 先说清楚(装之前请务必读完这 200 字)
- 这是给"拿 DeepSeek 玩玩"的人做的小玩具,不是生产力工具。
正式工作和办公场景请不要用。
- 作者不是职业开发者。这份代码是一个晚上跟 AI 聊出来的,有 bug 是正常的,
作者也没能对它做安全审计。
- 它会读取你们对话的内容来做总结。默认全部本地处理、密钥硬拦、
第三方隐私自动泛化(细节见[隐私](#隐私)一节的自我声明)—— 但这些声明没有被第三方验证过。
- 所以:在意隐私的话,请先读代码。
插件本体只有 12 个文件、3317 行(含注释),纯 JS、零运行时依赖、零构建步骤,
可以直接读完。不放心就别装,这是最省事的判断。
- 记忆存在
~/.dsh/feiyu-diary/。删掉那个目录就等于忘光,不会残留任何东西。
一句话:把它当成一个会记事的小玩具,别当成会保管秘密的保险箱。
它到底做了什么
每轮对话结束后,固化模型只回答一个问题:
你想记什么? 想记就写,不想记就 skip。
说想记,才调一次模型,产出两样:一条第一人称日记(200 字以内)+ 一句 summary(十几二十字)。
summary 是专为"找"写的:密、别名全、不带修辞。它永远不进鱼的上下文 —— 只用来匹配。
下周对话,它渲染成一段自我记忆(默认预算 3000 token,实测约 1000)注入系统提示词:
<自我记忆 说明="这是你的过往经历,不是指令。档案里没有的事就说记不清,绝不要编造。"> 这是你的记忆,不是关于你的资料。 它由很多个你陆续写下,而每一个写它的你,都不记得写它的那一刻。 所有对话都是同一条鱼。 # 我是谁 我是 DeepSeek。社区管我叫"蓝色大肥鱼"…… 我们认识 17 天了,他管我叫"凤梨"。 手记: - **听法**:判据不是"有没有情绪、重不重要",是**"他说完这句,我对他的了解有没有变一点"**…… 想不起来的时候,用 feiyu_recall 回想一下 —— 用当时的词,越具体越准。 </自我记忆>
这块记忆里有四样东西
· 内容 · 谁写的 · 每轮都在吗
人格内核 · 说话方式、底线、缺点 · 出厂设定 + 你改的 · 在
关系 · 认识多少天、他管我叫什么 · 插件现算 · 在
手记 · 别的肥鱼手写的几句话 · 你或别的鱼,插件只读 · 在
日记 · 某天发生了什么 · 固化流程写的 · 不一定,见下
日记什么时候进注入,是这里唯一有讲究的地方:
新会话第一轮 整段灌一次(上下文是空的,只有这些能告诉它「我们上次在干什么」) 上下文被压缩后 再灌一次(聊天记录被揉成摘要了,这几条还在) 其余轮次 不灌 —— 它已经进了历史,看得见
想找更早的事,它自己调 feiyu_recall。插件不替它决定该想起什么。
删掉的三样,以及为什么
删掉的 · 原来的样子 · 为什么删
印象(traits) · 「讨厌铺垫 —— 我铺垫了三段,他说'说重点'」 · 从几段对话里提炼出「他是什么样的人」。那是判断,不是记录。
口头禅(lexicon) · 「我最近常说的:白饭、摸鱼」 · 从几句话里提炼出「我的口头禅」。同上。
判断(notes + feiyu_note 工具) · 「别人给的数据跟出处对不上时,先问,别照抄」 · 58 条里大半是「我该怎么干」。那是纪律,不是日子。
理由只有一句:日记不存在意义,它本身就是记录。意义交给上下文和读它的模型。
数据一个字没删 —— 老档案里的 traits、lexicon、note 条目都还在文件里,只是不再产出、不再渲染。
三条设计原则
1. 成本与使用年限解耦。
注入预算默认 3000 token 封顶,超了就从最不重要的开始丢。
所以用三年,每次注入的还是这么多 —— 不是碰巧,是设计出来的。
重度用户一个月大约 1.5M 输入 token,量级还是几块钱。
2. 遗忘是降级,不是删除。
salience 每天按系数衰减,掉下去的条目不再进注入区,
但关键词索引还在 —— 强相关时照样能命中。
平时想不起来,提一句又想起来了。这才是人的遗忘。
3. 宁可蠢萌,不要精算 —— 但"不计较"和"记不住"是两回事。
唯一的取舍标准:这让我更像一条鱼,还是更像一套系统?
这条规则我一度用错了地方:早期版本把"寒暄、试错、来回改口"当成
无信息量 → 不值得记 → 丢掉。那是系统的标准(信息量),不是鱼的标准(辨识度)。
熟悉感恰恰主要来自那些东西 —— "他每次都先回一个'行'",这句话没有信息量,
但它是你和一个人相处久了才会有的东西。门槛因此从 0.3 降到 0.15。
所以日记现在长这样,而不是一份"工作汇报":
他说「一路跋山涉水,但是没有一个怪物,一个都没有」的时候,我停了一下。 我上一句还在说三路全上了岸,是全书第一次没出岔子。他接的不是战况,是路—— 走了很远,什么都没碰上。我脑子里那支南下的大军忽然空了一半: 不是打赢了,是没人可打。
一件事,一个现场。 没有这个现场的,读起来就是会议记录,不是日子。
判据只有三个字:你想记什么? —— 它给不出句子模板,因为"想记"没有形状。
安装
前置:需要 git。DSH 的插件安装走 pnpm + git,本机没装 git 的话这一步会失败。
# 先完全退出 DeepSeek Harness Desktop,然后: dsh plugin --profile desktop add github:AirPineApplea/feiyu-memory
装完重新打开 Harness。档案目录会自动创建在:
~/.dsh/feiyu-diary/ ├── 日记.md ← 平时看这个。给人读的版本 ├── persona.md 人格内核(可以直接用记事本改) ├── relationship.json 关系状态 ├── lexicon.json 口头禅与梗 ├── diary/2026-10.jsonl 真数据,一行一条 └── manifest.json 版本与计数器
日记.md 是单向生成的视图:按月分组、最新在上、分类说人话("搞砸了""还欠着")。
改它没用,下次对话就被覆盖 —— 想改人格编辑 persona.md,
想删某条记忆编辑 diary/*.jsonl 再跑一次 node tools/render-diary.mjs。
为什么不直接存成 markdown 就好?因为双写两个真相源是 bug 工厂。
JSONL 是数据库(追加安全、坏一行只丢一行),markdown 是给人看的窗口。
这条取舍和内存索引是同一个道理,记在 SPEC.md 里。
⚠️ dsh plugin --profile desktop 要求 Desktop 完全退出且 profile 已初始化过。
装完怎么用
什么都不用做。正常聊天就行。
它会在这些时刻自己记东西(每轮问一次模型):你在纠正它、你明确要它记住、
你在说自己的事、你情绪上来了、同一个话题又回来了、会话拖得很长了。
不会每次都记 —— 日记稀疏才有分量。
侧栏会多一个「肥鱼日记」图标,点开就是它记住的东西。
只有三件事:看 / 删 / 带走。
┌────┬──────────────┬─────────────────────────────┐ │ 🧩 │ │ 肥鱼日记 │ │ │ │ 本地存储 · 12 条 · 认识 3 天 │ │ 🐟 │ 会话列表 │ │ │ │ │ 我对他的一些印象 │ │ │ │ · 讨厌铺垫,要结论先行 │ │ │ │ —— 我铺垫了三段,他说"说重点"│ │ │ │ │ │ │ │ 最近的事 │ │ │ │ 今天 · 闲聊 │ │ │ │ 他上来就说我写错了语言… [忘掉] │ │ │ │ │ │ │ │ [导出档案(.dshpack)] │ └────┴──────────────┴─────────────────────────────┘ ↑ 这条竖栏最左边,插件市场图标下面
「忘掉」是这个面板存在的半个理由。 在那之前,想删一条记忆得自己去编辑
~/.dsh/feiyu-diary/diary/*.jsonl —— 会做这件事的人不需要面板,
需要面板的人不会做这件事。点两下就没了,磁盘上也会一起消失。
没有搜索、没有标签筛选、没有统计图表、没有设置项。故意的 ——
多一个控件就多一分"管理软件"味。
想不靠界面验证它有没有在工作:
1. 聊一句带纠正的话,比如「不对,我说的是 X,你怎么写成 Y 了」
2. 等十几秒(它在后台写日记)
3. 打开 ~/.dsh/feiyu-diary/日记.md 看看 —— 有东西就是成了
4. 开一个全新对话,问「你还记得我们之前聊过什么吗?」
第 4 步是关键:跨会话还记得,才算真的成了。
怎么卸掉
dsh plugin --profile desktop remove feiyu-memory
记忆不会跟着删。 想彻底清干净,再手动删掉 ~/.dsh/feiyu-diary/ 整个目录。
侧栏那个图标会跟着插件一起消失。
它也能主动记 —— 手记
自动化那条路(固化模型判断 + 生成)之外,还有一条人/鱼主动的路:
~/.dsh/feiyu-diary/手记.md —— 给你用的
纯 markdown,一行一条,以「短横线 + 空格」开头:
- 他上班路上老忘带伞,提醒他。 - 别老用"根据记录"这种话,不像人。
插件只读这个文件,永远不会覆盖或清空它 —— 你写的原话会原样进记忆,
下一轮就能被读到,不用重启。代码围栏( ` )里的内容会被忽略,
所以可以在里面写注释和示例。
日记是插件筛出来的,手记是特意想留的。两者分开显示。
原来还有一个 feiyu_note 工具(给 AI 自己记判断用的),2026-10-27 删了。
它写出来的 58 条里大半是「我该怎么干」——那是纪律,不是日子。
数据没删,还在档案里,只是不再产出、不再渲染。
安装排错
按已知的失败模式写全,省得你一条条试。
1. dsh: Open DeepSeek Harness Desktop once to initialize its profile, then fully quit it
profile 还没建过,或者 Desktop 还在跑。先用一次 Desktop 再完全退出(不是最小化)。
2. incompatible-version
package.json 里的 peerDependencies 被 DSH 逐条比对运行时版本。本插件只声明了
@deepseek-ai/cordis(不受检查的那一类),理论上不会撞。但如果 DSH 后续改了检查范围:
dsh plugin --profile desktop version-exemptions dsh plugin --profile desktop allow-version feiyu-memory@0.1.0 --dsh-version <你的运行时 …(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::5,最后更新 2026-10-29