
Agent 记忆不该提前压缩JAM 把记忆变成一次运行时研究一个长期运行的 Agent 会积累大量对话、工具结果和任务记录。常见做法是提前把每次经历压缩成摘要写入向量库新问题到来时再找出几条相似记忆放进上下文。问题在于制作摘要时还不知道未来会问什么。“用户上个月修改了学习目标几次”需要追踪时间变化“这次检索失败和三周前的故障有什么共同点”需要连接多次任务“当时为什么放弃第一个方案”可能依赖一段被摘要器认为不重要的细节。2026 年 9 月 28 日北京智源人工智能研究院、北京大学和香港理工大学的研究者发布《Just-In-Time Agent Memory with Runtime Agentic Research》提出 JAM不把记忆完全预编译成固定摘要而是在请求到来之后围绕当前问题主动研究历史记录。论文原文这项工作的核心变化可以概括成一句话记忆不只是存了什么也是每次任务怎样从历史中构造出有用上下文。1. AOT 记忆为什么可能丢失未来需要的信息论文把许多现有方案归入 Ahead-of-TimeAOT记忆在具体请求出现之前就提前压缩、组织或总结历史。历史记录 → 提前摘要/记忆条目 → 固定记忆库 ↓ 新问题 → 相似度检索 ───────────→ 上下文它的优势很直接离线阶段已经完成压缩在线查询通常只需一次检索速度和费用容易控制。但摘要是一种有损操作。生成摘要时系统会根据当时的目标判断哪些信息重要未来的问题一变被省略的细节可能正是答案。普通 RAG 也存在类似问题。单次相似度检索擅长找到语义接近的文本却不一定能处理证据分散在多个会话中需要先找到一个实体再根据实体寻找另一段记录问题要求比较状态变化而不是定位一句原文相关内容与问题措辞并不相似。JAM 没有取消离线处理。它改变的是离线阶段的目标尽量保留可回查的原始记录只生成用于导航的轻量信息真正面向任务的上下文等问题出现后再构造。2. JAM 的两个角色Memorizer 与 ResearcherJAM 将记忆过程分成离线和在线两部分离线阶段 原始历史 ──→ Memorizer ──→ 分层 workspace ├─ README 导航摘要 ├─ 会话 memo └─ 可追溯的原始文件 ↓ 在线阶段 ↓ 当前问题 ──→ Researcher ──→ open / search / browse ↑ ↓ └──── 判断证据是否充分 ↓ 带来源的任务上下文 ↓ 下游 Client AgentMemorizer保存原文摘要只负责导航Memorizer 为每个历史 session 生成简短 memo并按语义关系把原始内容组织进分层目录。目录中的 README 汇总子文件与子目录的 memo帮助后续 Agent 判断应该往哪里找。这里最重要的设计不是“用文件夹代替向量库”而是两层信息各司其职memo 和 README 用于快速导航原始 session 用于最终核对和提取证据。只要原始记录仍在摘要漏掉一个细节并不一定永久丢失。Researcher 仍有机会进入对应目录读取源文件。Researcher把回忆变成多轮研究新请求到来后Researcher 使用三个工具探索 workspace工具作用open(path)查看目录 README 和文件列表search(keyword)用 BM25 与向量检索寻找候选路径browse(path, query)阅读指定内容并提取与问题有关的信息它不是固定调用一次搜索而是循环执行“思考—探索—检查充分性”。证据不足就继续换关键词或查看其他路径证据充分或者达到行动预算后才整理最终上下文。这使记忆检索从一个静态函数变成了可以观察、训练和限制预算的 Agent 行为。JAM 方法部分3. JAM 和普通 RAG 的差别在哪里二者都可以使用 BM25、向量检索和重排因此区别不在“有没有向量库”。维度常见一次性 RAGJAM检索次数通常一次或固定流程根据证据充分性迭代查询生成主要来自用户问题可根据中间发现继续改写历史组织chunks 与元数据分层 workspace、导航摘要和原始文件输出候选片段为当前请求组装的上下文及来源计算成本较稳定随任务难度变化JAM 更像针对私有历史运行一次小型 Deep Research先理解问题需要什么再沿着线索查找、核对和汇总。这也意味着它并不适合无条件替换所有 RAG。问“用户的专业是什么”可能一次元数据查询就够了如果仍启动多轮 Researcher延迟和费用反而更高。4. Researcher 是怎样训练出来的只有“让 Agent 多搜几次”还不够。它需要学会选择工具、判断证据是否充分并在有限预算内停止。论文为此构建了 Memory-Gym。九种任务覆盖三类记忆行为Memory-Gym 把任务分为三组单跳定位属性提取、概念解释、条件定位多跳连接比较、来源追踪、交集选择多会话总结状态演化、集合枚举、聚合总结。数据来自网页、书籍、对话、新闻、论文和长文档六个领域。生成流程记录问题、参考答案和支持证据并通过唯一性、证据支持、答案泄漏、完整性等检查过滤。论文报告共生成 28,276 条候选数据其中 16,794 条通过自动验证占 59.4%研究者人工抽查 200 条保留数据95% 满足全部适用标准。这里的 95% 是论文团队对特定抽样的审计结果不代表整个合成数据集已经由人工逐条确认。Memory-Gym 数据构建先模仿可靠轨迹再用强化学习改进搜索训练分两步Verified-trajectory SFT强教师模型先执行完整研究流程只保留答案正确、工具使用较可靠的轨迹用来监督微调 ResearcherHint-guided GRPO训练阶段定期提供方向提示以支持证据的召回率作为主要奖励继续优化多轮探索。提示只在训练 rollout 中使用推理时移除。它不是直接泄露最终答案而是指出可能缺少的信息或尚未探索的方向。论文附录披露训练使用 8 张 H100 80GB GPU典型 SFT 约 5 小时GRPO 约 6 小时。轨迹由 Qwen3.5-122B-A10B 生成并使用 Gemini 3 Flash 过滤最终 Researcher 的主干模型是 Qwen3.5-4B。实验实现细节这说明完整复现并不是普通个人项目“安装一个包就能完成”的实验。开源代码降低了实现门槛但训练数据生成、教师调用和 GPU 资源仍然需要单独评估。5. 实验结果到底说明了什么论文在四类长上下文和记忆基准上比较 JAMLoCoMo、LongMemEval、NarrativeQA 和 HotpotQA。JAM 与 AOT 基线统一使用 Qwen3.5-4B部分训练型基线使用各自公开的 7B 至 14B 模型或原论文设置。主表中JAM 的结果为数据集指标JAM普通 RAG 基线LoCoMo OverallF152.0943.37LongMemEvalAccuracy65.2056.20NarrativeQAF145.7232.86HotpotQA 224KF158.6949.87这些是论文作者在其设置下报告的结果。它们支持“分层组织加运行时研究在这四组任务上优于一次性 RAG 基线”但不能直接代表真实聊天产品、中文教育场景或个人代码库。论文还在未进入 Memory-Gym 训练域的 LongCodeQA 上测试迁移。233 个问题的总体准确率从未训练 Researcher 的 54.08%提高到 SFT 后的 65.67%再提高到 SFTRL 后的 75.54%。这组结果说明训练到的探索策略在该代码理解基准上出现了跨域收益。论文实验表 3消融实验也给出一个有用信息去掉 Researcher 后四组指标均明显下降去掉 BM25 或向量检索也会损失效果。论文没有得出“向量检索已经无用”的结论反而显示关键词和语义检索具有互补作用。6. 更好的记忆换来了多少在线成本JAM 把一部分工作推迟到请求到来之后因此在线延迟是必须正视的代价。在 LoCoMo 的受控比较中论文报告设置一次性离线时间每问题在线时间在线 tokenF1Flat Raw Store0 秒17.11 秒8,174.2949.06JAM Workspace79.53 秒13.81 秒6,720.6152.09分层 workspace 需要一次离线构建但它帮助 Researcher 减少了在线搜索轮次所以相较平铺原始历史在线延迟和 token 反而更低。效率实验不过JAM 相对轻量的一次性记忆系统仍然需要更多在线计算。论文给 Researcher 设置最多 20 轮行动在默认配置下LoCoMo、LongMemEval 和 NarrativeQA 的中位轮数为 3HotpotQA 为 6少于 5% 的请求耗尽全部预算。这组数据更适合解释为“计算量可以随难度扩展”而不是“最多 20 轮所以每次都很慢”。部署时仍要设置调用次数、token、时间和费用四类上限不能只依赖 Agent 自己判断已经搜够。7. 这项工作还有哪些边界首先它目前是 arXiv v1 预印本。公开代码有助于检查实现但同行评审、独立复现和真实业务验证仍然不足。其次Memory-Gym 由自动流程合成并使用模型生成和过滤训练轨迹。人工审计覆盖的是抽样不等于全部训练数据没有歧义或捷径。第三主实验比较条件并不完全相同。AOT 方法统一使用 Qwen3.5-4B训练型方法则使用各自模型和已发布设置Memory-R1 因未公开只能引用原论文结果。跨方法排名需要结合这些差异阅读。第四保存完整原始历史扩大了存储与安全责任。被删除的信息怎样从原始文件、memo、README 和索引中同步移除恶意内容会不会通过长期记忆反复进入后续上下文论文重点评估检索效果没有完整解决权限、遗忘和记忆投毒问题。最后基准答案正确不等于上下文适合所有下游 Agent。Researcher 可能召回正确证据却用一种让特定模型难以理解的方式组织信息。部署时还要联合评估“构造出的上下文”和“最终任务结果”。8. 对应用开发最有价值的四点启发摘要不应该成为唯一存档可以用摘要降低常用查询成本但应保留可追溯的原始记录。每条摘要需要指回来源才能在新问题出现时重新检查细节。先导航再阅读正文目录摘要、会话主题、时间和实体索引可以帮助 Agent 缩小范围。真正回答前再读取少量原文。它与人在大型代码库中先看目录和 README、再定位函数的方式很相似。困难请求才启动研究循环简单事实走一次检索涉及跨会话、时间变化或多跳关系的问题再进入 Researcher。这正好可以与模型路由结合同时决定“使用哪个模型”和“允许多少轮记忆研究”。评测集必须包含跨记录问题如果测试题都能从单个 chunk 直接找到普通 RAG 已经足够无法验证 JIT 记忆的价值。评测需要包含状态变化、来源追踪、跨会话比较和集合汇总并记录每个答案依赖哪些原始 session。9. 如果改造一个教育 Agent我会怎么开始我不会先训练 JAM而会先验证这个设计是否解决真实问题每次学习会话 ├─ 保存原始提问、提示与结果 ├─ 生成短 memo └─ 记录知识点、时间和来源 ID 新请求到来 ├─ 简单个人信息 → 直接查询 ├─ 单知识点回顾 → 混合检索 └─ 学习变化/长期薄弱点 → 有预算的多轮研究 ↓ 输出结论 来源会话然后准备三组问题单次事实、跨会话关联、长期状态变化。比较一次性混合检索与多轮研究在证据召回、最终正确率、延迟和 token 上的差异。如果多轮研究只让所有问题变慢却没有改善跨会话任务就没有必要因为论文新颖而继续增加复杂度。只有明确找到普通检索的失败类型JIT 记忆才有工程价值。JAM 带来的关键问题不是“Agent 应不应该记住更多”而是面对当前任务它能否回到原始经历主动寻找刚好足够的证据并知道什么时候停止。