TRACE 开源:为 LLM Agent 提供分层自组织长期记忆
开发者发布开源 Python 库 TRACE,用 B+Tree 与向量检索为长会话 Agent 提供分层记忆,解决滑动窗…
近日在 Hacker News 上亮相的 Show HN 项目 TRACE,是一个面向 LLM Agent 的开源 Python 长期记忆库。它把对话历史组织成一棵分层的 B+Tree 语义树,配合余弦相似度检索,让 Agent 在长会话、多轮任务中只取回与当前话题强相关的分支,而不是把整段历史塞进提示词,从而显著降低 token 开销,并减少陈旧上下文引发的「幻觉」。
项目结构
仓库分为两个完全独立的模块:
- trace_memory/:核心记忆引擎,零 UI、无冗余,可作为库直接集成到现有应用中。
- nexus_terminal/:基于该引擎构建的可选演示聊天终端,用于现场体验与实验,使用 TRACE 并不依赖它。
项目支持与 LM Studio、本地模型、OpenAI、NVIDIA NIM 以及任意 OpenAI 兼容接口集成,安装方式为标准 PyPI 包。
为什么标准 RAG 不适合做 Agent 记忆
作者在文档中明确区分了 RAG 的适用场景与失败模式。RAG 在文档搜索、知识库、代码检索、企业搜索等任务上表现优秀,但被当作持久化记忆使用时会出现三类典型问题:
- 时间盲视(Temporal Blindness):检索只看语义相似度,不区分新旧,旧决策与当前决策同时被召回,导致 Agent 自相矛盾、重提已解决的问题。
- 上下文腐烂(Context Rot):滑动窗口随对话增长不断丢弃早期消息,第 3 轮设定的约束到第 50 轮已经丢失。
- 有损摘要(Lossy Summarization):把整段历史压缩成一段文字,会丢失分支计划、多跳约束与边界细节。
固定大小滑动窗口同样无法胜任长时记忆:缺乏语义感知、窗口外内容永久丢失、结构扁平,无法告诉 LLM 哪些话题相关、某条约束属于哪个分支。
架构:分层 B+Tree + 向量检索
TRACE 基于开源的 ChatIndex 架构(作者 Mingtian Zhang / VectifyAI)改造而来,将对话建模为 B+Tree:
- 叶子节点(MessageNodes):原始的用户与助手对话。
- 内部节点(TopicNodes):由 LLM 生成的当前分支主题标签与摘要。
- 根节点:虚拟锚点。
每次新增一条对话(tree.add())时,TRACE 会强制创建一个包含单条消息的 TopicNode,由 LLM 判断它属于延续当前主题还是开启新分支。延续时新节点作为上一个节点的直接子节点,形成深度链式结构,天然支持细粒度摘要。
在 ChatIndex 单一路径遍历的基础上,TRACE 增加了向量检索:对每个 TopicNode 的摘要做 embedding,检索时按余弦相似度同时在多条分支上做「外科手术式」取回,避免多次遍历,也缓解 ChatIndex 在跨分支多跳约束上的短板。
后台整理与归档
除了在线检索,TRACE 还提供两项后台能力:
- Background Tree Organizer:Agent 不活跃时,后台进程按四条严格公理评估整棵树,把语义相关的分支合并到共同父节点之下,借鉴的是记忆巩固机制。
- Trivial Leaf Archiving:把意义不大的叶子节点归档,控制树规模与检索开销。
与 MemGPT、Zep 的差异
作者把 TRACE 定位为「轻量级即插即用组件」,而非完整运行时。MemGPT 更像操作系统,提供分层 RAM/Disk 记忆,需要 LLM 通过 function call 显式管理,开销大且依赖强能力模型;Zep 同属此类。TRACE 则只专注于把对话建模为分层树,天然呈现多跳约束,无需让 LLM 主动管理自己的记忆库。
适用与局限
TRACE 适合跨会话、多步骤任务的长期 Agent;不适合简单单轮问答或文档检索——这类场景下标准 RAG 或滑动窗口已经足够。文档中给出了与 LM Studio、OpenAI、NVIDIA NIM 等的集成示例,并提供了 Benchmark 与 Environment Variables 章节供使用者验证效果。
