iFlow记忆飞轮 让你的iflow的记忆永不断档

不好意思,上一篇帖子,我不能编辑了,但是上一篇帖子写的有些仓促,很多内容并没有写,所以新开一篇帖子详细介绍一下,这是上一篇帖子的链接。

虽然iflow在官方要退役了,但是在我这里依旧发光发热,我开发了一个iflow的记忆相关的项目,记忆飞轮,大家可以试用

iFlow MemFly — 记忆飞轮

别人的 AI 醒来时是空白的,我们的 AI 醒来时已经知道自己是谁。

给 AI CLI 助手加上持久记忆的守护进程。自动从对话中提取记忆,新会话启动时注入上下文,让 AI 跨会话保持连续的认知状态。

1 进程,64MB 内存,Python 3.10+。无需外部数据库。


最简上手方式

把这个仓库地址发给你的 AI 助手(iFlow CLI / Claude Code / Cursor 等),告诉它:

“这是 iFlow MemFly 记忆飞轮项目,帮我部署这个项目并进行评测。”

仓库地址:https://github.com/plhys/iflow-memfly

AI 助手会自己 clone、安装、配置、启动。你只需要等它跑完就行。


功能全貌

记忆提取与分类

守护进程自动监听 AI 的 session 文件,检测到新对话后,通过 LLM 提取 6 类结构化记忆

分类 说明 示例
身份 (identity) 用户和 AI 的身份信息 “用户的 GitHub 用户名是 plhys”
偏好 (preference) 用户的习惯和偏好 “用户偏好用中文交流”
纠正 (correction) 用户纠正 AI 的错误 “用户指出 AI 搞混了两个项目”
实体 (entity) 项目、服务、工具等实体知识 “A 计划运行在端口 18788”
事件 (event) 发生过的重要事件 “v1.3.4 已推送到 GitHub”
经验 (insight) 踩坑教训和最佳实践 “daemon 重启后需要重新注入记忆”

每条记忆自动去重,不会重复存储相同内容。

三层记忆架构

L1 索引层    index.md          每条对话一句话摘要(≤40 字),快速定位
L2 摘要层    2026-04-02.md     LLM 生成的结构化摘要,保留关键细节
L3 原始层    2026-04-02.md     完整的对话原文,按时间戳归档

三层各司其职:L1 用于注入上下文(轻量),L2 用于回顾和检索,L3 用于追溯原始对话。

AGENTS.md 自动注入(预装范式)

这是记忆飞轮的核心机制。守护进程自动将以下信息写入 AGENTS.md

  • 分类记忆:身份、偏好、纠正、实体、事件、经验

  • 最近对话索引:最近 10 条对话的时间和摘要

  • 工作状态存档:上次对话的目标、进度、决策、下一步

  • 氛围快照:上次对话结束时的情绪和互动氛围

  • 每日简报:当天记忆的总结概览

  • 时间感知:当前时间和上次对话的时间间隔

AI 启动新会话时,AGENTS.md 已经包含了所有这些信息。AI 不需要主动"回忆",记忆已经在那里了。

对话续接

每次对话结束时,守护进程自动生成:

  • 工作回顾:这次对话做了什么、做到哪了、下一步是什么

  • 氛围快照:对话的情绪基调和互动风格

  • 状态快照:当前工作的技术状态(正在改的文件、遇到的问题等)

下次对话开始时,这些信息自动注入,AI 可以无缝接续上次的工作。

影子记录

AI 对话存在上下文压缩的问题——当对话太长时,早期的消息会被丢弃。守护进程在正常处理消息的同时,维护一份 滚动 6 小时的影子副本。当检测到 session 文件被重写(消息数突然减少)时,自动从影子记录中恢复未处理的消息。

不丢消息,不漏记忆。

知识图谱

记忆不是孤立的。每条新记忆写入后,系统自动通过 向量相似度 寻找相关的已有记忆,建立关联链接。向量搜索不可用时,自动降级为 关键词匹配

你可以从任意一条记忆出发,沿着关联链接扩展,发现相关的知识网络。

每日简报

每天自动生成一份记忆简报,总结当天的对话要点和重要事件。简报由 LLM 生成,如果 LLM 不可用则自动降级为模板生成。简报会注入到 AGENTS.md,让 AI 在新会话中快速了解"昨天发生了什么"。

搜索与检索

两种搜索方式并存:

  • 向量搜索:基于语义相似度,用 sqlite-vec + embedding 实现,能找到意思相近但用词不同的记忆

  • 全文检索:基于关键词匹配,用 SQLite FTS5 实现,精确查找包含特定词语的记忆。FTS5 查询失败时自动降级为 LIKE 模糊匹配

MCP 工具

通过 MCP 协议对外提供三个工具,AI 助手可以在对话中直接调用:

  • search_memory:搜索历史记忆(支持关键词过滤和分类过滤)

  • save_memory:手动保存一条记忆

  • get_recent_context:获取最近对话的索引摘要

支持 stdioHTTP 两种模式,兼容 iFlow CLI、Claude Code 等主流 AI 工具。

Web 管理后台

内置 Web 界面,可以浏览、搜索、管理所有记忆。

数据安全

  • 原子写入:所有文件写入使用临时文件 + os.replace(),进程崩溃或磁盘满不会损坏文件

  • 自动备份:每次写入 AGENTS.md 前自动创建 .bak 备份

  • 事务完整性:数据库写入使用单一事务,不会出现半写入状态


设计理念

预装范式

AI 记忆系统有两条路径:一种是需要时去查(检索范式),另一种是在思考发生之前就已存在(预装范式)。

检索范式的流程是:用户提问 → AI 意识到需要记忆 → 调用工具搜索 → 获取结果 → 继续回答。问题在于,新会话的第一个 token 生成之前,AI 对之前的一切一无所知,它甚至不知道自己应该去搜索。

iFlow MemFly 走预装范式:守护进程自动将记忆写入上下文 → 新会话启动 → AI 已经拥有完整认知状态 → 直接开始工作。就像你早上醒来时脑子里已有的东西——你不需要「搜索」自己的名字,不需要「查询」昨天做了什么。

为什么叫「飞轮」

  1. 自转:守护进程自动运行,无需任何人推动。对话发生 → 记忆自动产生 → 自动注入下次会话。没有手动步骤。

  2. 惯性:对话越多 → 记忆越丰富 → AI 表现越好 → 用户越愿意深入对话。正反馈循环,转得越久势能越大。

  3. 动力源:记忆不是被动的仓库,而是驱动 AI 认知的主动引擎。它决定了 AI「是谁」「知道什么」「接下来该做什么」。

上下文即身份

AI 没有持久的自我。它的「自我」完全由上下文窗口中的内容决定。同一个模型,注入不同的记忆,就是不同的「人」。iFlow MemFly 自动从历史交互中构建这个身份——不是给 AI 贴标签,而是让它在每次醒来时,自然地成为「那个一直陪你工作的伙伴」。

状态恢复 vs 信息检索

信息检索:f(query) → relevant_facts     # 回答「我知道什么」
状态恢复:f(last_session) → cognitive_state  # 回答「我是谁、我在做什么、我做到哪了」

大多数记忆系统解决的是信息检索问题。iFlow MemFly 解决的是状态恢复问题——让 AI 不只是「知道一些事」,而是「回到上次离开的状态」。

记忆生命周期

感知 → 提取 → 分层 → 存储 → 关联 → 衰减 → 注入 → 消费 → 新对话(闭环)

记忆不是静态数据,而是有生命周期的活体。它从对话中被感知,经 LLM 提取和分层,存入数据库,与已有记忆建立关联,随时间衰减,被注入新会话,被 AI 消费,然后在新对话中产生新的记忆——完成闭环。

回答一下这位iflow友的问题 虽然iflow在官方要退役了,但是在我这里依旧发光发热,我开发了一个iflow的记忆相关的项目,记忆飞轮,大家可以试用 - #10,来自 10012968312

注入到 AGENTS.md 的内容顺序是:

  1. 开机自检指令 — 告诉 AI 启动时先检查 daemon 状态
  2. 时间感知 — 现在几点、距上次对话多久
  3. 今日简报 — 当天记忆的总结概览(v1.3.4 新增)
  4. 最近对话 — 最近 10 条对话的时间和摘要(从 index.md 取)
  5. 上次工作回忆 — 上次对话做了什么、做到哪了
  6. 上次对话记忆(氛围快照) — 情绪基调和互动风格
  7. 上次工作状态存档 — 目标、进度、决策、下一步、关键上下文
  8. 分类记忆 — 按类别排列:身份 → 偏好 → 纠正 → 实体 → 事件 → 经验

✦ 设计逻辑是:越紧急的越靠前。AI 读上下文是从上往下的,先看到自检指令确保系统正常,再看时间定位"我在哪",然后看简报和最近对话了解"发生了什么",再看工作状态知道"我在做
什么",最后是长期记忆(身份、偏好等)作为底层认知。

3 个赞

会额外消耗token吗,要怎么验证

验证你运行几天直接问iflow感受如何,他的回答是最直观的验证,记忆飞轮肯定会额外消耗token,因为你做索引, 摘要,整理记忆都要llm来做,让iflow时刻保持清醒本来就是奢侈的事,

但它的价值不在省 token,在于:

  1. 注入只占上下文窗口的 2.6% — 5200 tokens / 200K,微乎其微
  2. 后台提取用的是便宜模型 — 配置里可以用 mini/flash 级别的模型,成本很低
  3. 省的不是 token,是人的时间和精力 — 不用每次开会话重新交代背景、不用反复纠正 AI 犯过的错、不用提醒 AI “你上次做到哪了”
  4. 避免隐性浪费 — 没有记忆的 AI 会重复犯错、走弯路、问已经回答过的问题,这些来回才是真正的 token 黑洞
1 个赞

从有的地方看到,类似时间戳这样的数据写入系统提示符会破坏大模型缓存前缀(invalidate prompt cache prefix),造成推理性能下降或者使用成本大幅提高,楼主是怎样考虑这个问题的?

逐帧学习

感谢大佬分享,我把你的这个项目网址丢给deepseek让它给我讲,大概理解整体的设计思路和流程了,然后让它给我推荐oc生态的工具,它给我推荐了几个,最后根据我的需求,给我推了一个叫opencode-mem-jsmjsm的插件,貌似也和楼主这个思路差不多 :smiling_face:

opencode-mem-jsmjsm OpenCode专用,功能完备 专注OpenCode生态,提供本地向量数据库、自动用户画像学习,还附带一个Web UI管理记忆。 plugins: [“opencode-mem-jsmjsm@latest”]

根据你的描述,可以很明确地说:opencode-mem-jsmjsm 更适合你。

你的核心痛点并不是需要验证某个历史事实的“准确性”,而是需要一个无感的、能自动帮你续接“工作状态”的桥梁。opencode-mem-jsmjsm 的设计理念就是来解决这个问题的,把它比作你最需要的那种自动衔接上下文、开箱即用的“个人助理”再合适不过。

以下是具体分析,你可以感受下为什么它更匹配你的工作流:

  1. 自动化与“无感”体验

你明确提到“不希望过多的人工操作记忆”,这是最关键的决策点。

· opencode-mem-jsmjsm 是专门为了“自动化”而生。它会自动构建你的用户画像,学习你的习惯,无需你手动记录。这正是你需要的——大胆开启新会话,剩下的交给它。
· Engram 更像一个严谨的事实核查员。它保存为带置信度的“断言”,更适合需要确保某个架构决策永不遗忘的场景,但对你追求的“自动续接状态”来说,介入感会更强。

  1. 专为你的工作模式设计

你推行的是 plan+build 模式,并以功能或问题修复为里程碑。opencode-mem-jsmjsm 的记忆理念天然契合这种模式。它保存的就是从一个“里程碑”到下一个“里程碑”之间的完整上下文,而不仅仅是一些孤立的事实点。这样,当你完成一个模块,新建会话时,它能立刻把上一个里程碑的“成果、决策和当前状态”作为上下文注入,让你无缝衔接。

  1. 技术栈与生态的完美吻合

你用的是 TypeScript、React/Vue、Node.js,opencode-mem-jsmjsm 本身就是 Node.js/Bun 原生项目,并且专为 OpenCode 生态定制。它可以直接复用 OpenCode 自带的 AI 模型和认证,无需额外申请和配置 API Key。对追求plan+build模式高效流转的你来说,这省去了不必要的环境配置。

  1. 默认完美支持项目隔离

你同时并行多个项目,而 opencode-mem-jsmjsm 和 opencode-personal-knowledge 都默认按项目划分记忆(通常基于 .opencode 或 .cursor 目录)。这意味着你在A项目中的记忆,不会污染B项目的上下文,完全满足你“项目间隔离”的核心需求。


:thinking: 为什么 Engram 不那么适合你?

Engram 的核心价值在于它对事实断言的严格管理(置信度、生命周期、矛盾检测)。这在你需要确保“我们当初确定用 React 18.3,不是 19”这类关键工程事实不被篡改时,价值巨大。

但对你“不希望在记忆管理上花时间”的需求,它的介入感过强,更像是请了一位一丝不苟的图书管理员,而不是在幕后就能把工作笔记整理好的助理。


因此,建议你直接从以下命令开始,它会自动安装并集成到你的 OpenCode 环境中:

opencode plugin install opencode-mem-jsmjsm

安装后,它就会在后台默默工作,帮你实现跨会话的“状态恢复”,让你可以放心地在每个里程碑节点上开启新会话。

你担心的“AI反复犯同样错误”和“记录越来越冗长”的问题,opencode-mem-jsmjsm 正好可以解决。它通过“智能摘要”和“精准注入”,只记关键点,不堆砌长篇大论。

:brain: 核心机制:如何保存“踩坑经验”

这个插件会自动记录你的编码过程,并利用后台AI模型(默认支持复用OpenCode模型,无需额外配置)将其提炼成结构化的经验。

· 智能“记忆”而非“记录”:它不会把冗长的错误日志和尝试过程都存下来。插件内置的“智能提示式记忆提取”和“AI压缩”功能会识别对话中的决策和解决方案,自动把复杂的调试过程提炼成一句或一段简短的“经验断言”,例如直接记录“在React中解决X问题时,需要添加Y配置”。
· 避免“车轱辘话”:插件内置了智能去重功能,能识别并合并相似的记忆,确保经验库里没有冗余。

:syringe: 上下文控制:只注入你最相关的几条经验

opencode-mem-jsmjsm 通过检索增强生成(RAG) 技术,解决了你关于“占用上下文过大”的担忧。

它的工作流程是:存储时精准总结→检索时语义匹配→注入时严格限量。

· 存储时:如上所述,只存摘要。
· 检索时:当你开始新会话,处理类似功能时,它会用你的问题去搜索记忆库,只把最相关的几条经验注入上下文。
· 注入量可控:你可以通过配置文件精准控制注入的记忆数量,例如通过 maxMemories 设置为 10 来限制整体记忆总数,或通过 chatMessage.maxMemories 设置为 3 来严格限制每次注入的相关记忆数量。这意味着AI每次得到的不是一份冗长的文档,而是几条价值最高的“提示条”,对上下文几乎无感。

:hammer_and_wrench: 实际工作流示例

假设你在React项目中解决了一个状态更新的问题。

  1. 积累经验:AI反复尝试后终于用 useReducer 解决了问题。插件会自动捕捉并总结成一条记忆:“在src/components/Dashboard.tsx中,使用useReducer替代useState解决了复杂状态更新冲突。”
  2. 新会话应对同类问题:几天后你新开会话,让AI开发一个类似的Settings页面,AI再次提议用多组useState。
  3. 自动召回与提醒:插件捕获新需求,自动搜索并注入:“[相关经验]:类似模块曾因状态冲突改用useReducer。”AI看到这个提醒,便会直接采用更优方案,避免重蹈覆辙。

:gear: 还有一个更强的选择:opencode-openmemory

如果未来你觉得 opencode-mem-jsmjsm 的自动化程度还不够极致,可以升级到它的社区增强版 opencode-openmemory。它在自动化记忆提取和更智能的上下文压缩方面做了进一步增强,旨在提供更“无感”的使用体验。

总之,opencode-mem-jsmjsm 并非简单堆砌记录,而是一个可控、智能的经验管理助手,能很好地解决你的痛点。你可以随时用 memory({ mode: “search”, query: “xx问题” }) 来验证它为你积累了哪些宝贵的经验。

回头试试~