deja-vu:让编码智能体从你已有的历史里找回答案
你的代理已经解决了这个问题。 deja 找到它,它会索引您的编码代理已写入磁盘的会话、安装它之前的几个月历史记录,并在所有 17 个会话开始时自动调用它们。 LongMemEval-S 上的命中率为 84.9%,无法学硕士,无嵌入。一个零深度二进制文件,完全本地化。
秒懂
- 它是什么?
- deja-vu 索引编码智能体已经写在磁盘上的会话记录,在会话开始时自动召回相关历史。它不用 LLM,不用向量嵌入,单个二进制文件,完全本地运行。
- 适合谁用?
- 如果你同时使用多个编码智能体,并且经常遇到“这个问题之前解决过”却找不到记录的情况,deja-vu 值得一试。它适合那些已经积累了大量本地会话文件、不想依赖云端记忆服务的开发者。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 1 天前。
- 用什么语言写的?
- 主要是 Go(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决什么问题:智能体没有跨会话记忆
编码智能体每次会话都是全新的。你三个月前修过的 bug,今天可能又遇到,但智能体不记得。市面上大多数记忆方案要求你从安装那一刻开始记录,之前的会话历史就丢了。deja-vu 反其道而行:它索引你机器上已经存在的会话文件。Claude Code、Codex、Cursor 等二十种智能体都会把对话写到本地磁盘,deja 把这些文件变成统一的记忆层。它面向的是那些已经积累了数 GB 会话历史的开发者,目标是让智能体在会话开始时就知道你以前解决过什么。
工作机制:无 LLM、无嵌入的检索
deja-vu 的核心是索引和检索,不依赖任何大模型。它扫描智能体写入的会话文件,提取关键信息:打开过的文件、运行过的命令及退出状态、编辑操作替换的精确文本范围。这些信息被组织成索引,查询时通过子毫秒级查找返回结果。README 声称在 LongMemEval-S 上 hit@1 达到 84.9%,在 LoCoMo 上达到 69.6%,两个基准测试都在仓库内,可以自行验证。自然语言查询会回退到一个相关性层级,时间只是提示,不是过滤器。它不生成摘要,而是直接引用原始会话中的片段。
安装与接入:一条命令,自动配置
安装分两步。先执行 `curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh`,然后运行 `deja install --auto`。第二条命令会自动检测已安装的智能体,把 MCP 召回工具接入它们,并在支持的地方开启会话开始召回。它还会构建首个索引,这样下一次会话就不用等待。如果你只想用二进制搜索功能,可以跳过 `deja install`,直接运行 `deja "连接池耗尽"` 这类查询。Windows 用户不能用 shell 脚本,需要改用 Scoop:`scoop install deja-vu`。安装脚本会写用户级指导文件到每个智能体的配置目录,比如 Claude Code、Codex、Cursor 等。
召回时机:不是等用户问
deja-vu 的召回不依赖用户主动提问。它通过 MCP 工具在多个时机自动注入历史:会话开始时、每次提示时、在文件被编辑或命令运行之前,以及命令失败之后。PreToolUse 钩子会在智能体准备编辑某个文件或执行某条命令时,先给出该文件之前的决策或该命令之前成功运行的例子。PostToolUse 钩子则在命令失败时,返回历史上同样错误之后发生了什么。这种设计针对的是智能体最常犯的错误:重复踩同一个坑。它索引的是“工作过程”,不只是对话内容,所以即使智能体总结丢失了细节,deja 也能找回原始记录。
局限性与适用边界
deja-vu 并非万能。它依赖智能体把会话完整写入磁盘,如果某个智能体默认不保存历史,索引就会不完整。它不做语义理解,纯靠字符串匹配和相关性层级,所以对于表述差异很大的问题,命中率可能下降。README 提到在 43 次压缩后,智能体的摘要保留了 77% 的决策和 0.2% 的命令,deja 则能找回那 99.8% 的命令,但这只说明它擅长找回“硬事实”,不擅长理解抽象意图。另外,它会在会话开始自动注入内容,这增加了上下文长度,可能影响智能体的专注度。对于隐私敏感的项目,虽然索引构建时会剥离密钥和令牌,但你需要确认 redaction 规则覆盖了所有敏感格式。
替代方案:从零开始的记忆工具
大多数记忆工具从安装时刻开始记录,比如给智能体增加一个“记忆文件”,每次会话后写入摘要。这类方案的问题在于历史空白期,你无法找回安装前的任何信息。deja-vu 的差异在于“先有历史,后有记忆”,它把已有的会话文件当作数据源,而不是重新开始积累。另一种方案是让智能体使用向量数据库存储对话嵌入,这需要额外的依赖和计算资源,而且通常需要云端服务。deja-vu 则完全本地,零依赖,单个二进制。两者本质区别:前者试图理解语义,后者追求精确检索。如果你需要的是“当时到底运行了哪条命令”,deja 更直接;如果你需要“这个问题的本质是什么”,向量方案可能更合适。
维护与升级成本
deja-vu 用 Go 编写,MIT 许可证。发布频率看起来很高,最近有 v0.19.0、v0.19.1 和 nightly 版本。升级方式取决于安装途径:brew、go install、npx 或直接下载二进制。日常维护主要是定期重建索引,因为新的会话会不断产生。二进制更新本身很简单,但需要注意每次升级可能改变索引格式,旧索引可能需要重建。许可证是 MIT,意味着你可以自由使用、修改和分发,但需要保留版权声明。它不依赖外部服务,所以没有服务端维护成本。唯一的维护负担是确保智能体配置更新后,deja 的接入仍然有效,可能需要重新运行 `deja install`。
编辑结论
如果你同时使用多个编码智能体,并且经常遇到“这个问题之前解决过”却找不到记录的情况,deja-vu 值得一试。它适合那些已经积累了大量本地会话文件、不想依赖云端记忆服务的开发者。不适合那些只用单一智能体且会话很短、或者对自动注入内容非常敏感的团队。安装前先确认你的智能体是否在本地写入完整会话记录,否则索引会缺少关键数据。其次,验证 redaction 功能是否覆盖你项目中的密钥格式,避免敏感信息进入模型上下文。最后,跑一遍仓库自带的 LongMemEval-S 基准,看 hit@1 是否符合你的场景。deja-vu 的核心理念是“先有历史,后有记忆”,这个顺序决定了它只能工作在你已经产生历史的地方。
社区笔记