# TMCRA 长记忆运行时

TMCRA logo

[English version](README.md) TMCRA 是给 Agent 系统提供长期记忆能力的运行时层。它帮助大语言模型在长对话历史中检索、连接和推理相关记忆,而不需要在每一轮都暴露完整上下文。 本仓库包含一个冻结的 TMCRA 基线包,包括模型权重、运行时代码快照、训练元数据和 LongMemEval S500 测评结果。 许可证:MIT。 ## TMCRA 的作用 TMCRA 在 Agent 应用和回答模型之间增加一层专门的记忆运行时。 在写入阶段,TMCRA 会把对话转成记忆节点、事件单元、profile 信号和图路径。这让系统不仅能保存孤立事实,也能保存不同轮次、不同会话之间的事实关系。 在召回阶段,TMCRA 会对图节点和路径进行打分,选择紧凑的证据,并只把最相关的记忆上下文注入给回答模型。回答模型仍然负责自然语言推理和最终表达,TMCRA 负责长记忆组织、召回和证据呈现。 当前运行时重点覆盖: - 用户事实记忆 - 助手回答细节记忆 - profile 与偏好记忆 - 时间记忆 - 跨会话图隧穿 - 学习式节点/路径打分 - 面向下游 LLM 的紧凑证据选择 ## 算法结构图 ```mermaid flowchart LR A["对话轮次"] --> B["写入层"] B --> C["记忆节点"] B --> D["事件单元"] B --> E["Profile 信号"] B --> F["时间信号"] C --> G["图记忆库"] D --> G E --> G F --> G G --> H["学习式节点 Scorer"] G --> I["学习式路径 Scorer"] H --> J["证据选择"] I --> J J --> K["紧凑记忆上下文"] K --> L["回答模型"] L --> M["Agent 回复"] N["用户问题"] --> H N --> I N --> J N --> L ``` 写入层从对话中生成记忆单元。图记忆库保存事实、事件、profile 信号、时间信号和跨会话连接。学习式节点/路径 scorer 会根据当前问题选择相关证据,回答模型使用这些紧凑证据生成最终回复。 ## 为什么需要 TMCRA 长期运行的 Agent 不能只依赖简单向量召回。它需要保存用户事实、偏好、时间线变化、跨会话事件,以及多步证据链。 TMCRA 将记忆组织成图节点和学习得到的召回路径,再把压缩后的证据提供给回答模型。目标是让外部 Agent 可以通过运行时/API 层使用长期记忆,同时保持记忆算法和模型权重可以独立部署。 ## 如何使用 推理或运行时使用时,加载下面目录中的图 scorer 权重: ```text models/action_frame_tunnel_graph548_tunnel_fusion_train_20260524_042557/ ``` 主要运行时文件是: ```text node_scorer.pt path_scorer.pt export_manifest.json ``` 典型运行配置如下: ```bash export TMCRA_NODE_MODEL_PATH="models/action_frame_tunnel_graph548_tunnel_fusion_train_20260524_042557/node_scorer.pt" export TMCRA_PATH_MODEL_PATH="models/action_frame_tunnel_graph548_tunnel_fusion_train_20260524_042557/path_scorer.pt" export TMCRA_RETRIEVAL_MODE="hybrid_node_scored" export TMCRA_REQUIRE_LEARNED_SCORER="1" ``` 测评入口代码快照: ```text code/run_lme_s10_native_tmcra.py ``` 核心适配器代码快照: ```text code/memory_adapters.py ``` 部署时,将两个 scorer 文件加载到 TMCRA adapter 中,并让 Agent 的记忆中间件调用 TMCRA 召回 API。回答模型可以是任意 OpenAI 兼容接口或本地 LLM;TMCRA 提供选中的记忆证据,回答模型生成最终回复。 ## 依赖环境 当前代码快照基于 Python。建议运行环境包括: - Python 3.10 或更高版本 - PyTorch,推荐使用 CUDA 做模型推理 - NumPy 及常见 Python 数据处理库 - 用于回答层和写入层的 OpenAI 兼容接口或本地 LLM endpoint - 从 GitHub 拉取完整模型包时建议支持 Git LFS benchmark 脚本使用 LongMemEval 格式输入数据,并输出 JSONL 格式的预测和 judge 结果。实际运行时部署可以直接使用同一套模型文件,不需要运行 benchmark harness。 ## 可开启模块 TMCRA 当前也保留了用于召回和规划实验的可选接入口。部署或评估时,如果目标场景需要,可以按需开启这些模块。 - **Embedder 接入口**:可选的语义 embedding 通道,可以和图记忆 scorer 并行工作。它用于在图证据选择前或选择过程中提供额外的稠密语义召回,但不替代学习式图节点/路径 scorer。 - **LLM planner 接入口**:可选的规划 hook,可以调用外部 LLM 来整理证据、扩展 query intent,或在最终回答前生成 answer plan。它适合实验和更高成本的部署场景;默认基线仍保持核心图 scorer 链路可以独立测量。 这些接口是可集成的扩展点,不是冻结 S500 基线的必需依赖。下游部署可以根据成本和效果选择轻量的 scorer-only 路径,或开启 embedder/planner 辅助的增强路径。 ## 包含内容 - `code/`:该基线使用的运行时和测评代码快照。 - `models/action_frame_tunnel_graph548_tunnel_fusion_train_20260524_042557/`:完整训练后的图模型输出目录。 - `results/`:预测结果、judge 输出、汇总指标和压缩后的运行结果。 - `docs/`:基线记录和结果说明。 补充文档: - `docs/BASELINE_S500_20260525.md`:benchmark 记录和子任务指标。 - `docs/TRAINING.md`:模型训练方向和随包发布的训练产物说明。 - `docs/OPTIONAL_MODULES_AND_PARALLEL.zh-CN.md`:embedder/planner 可选接入口和并行评估推进方案。 - `docs/OPTIONAL_MODULES_AND_PARALLEL.md`:上述文档的英文版本。 ## 模型包 随包发布的模型目录保留了图 scorer 栈的完整训练输出: - `node_scorer.pt` 和 `path_scorer.pt`:运行时图打分权重。 - `node_scorer_best.pt` 和 `path_scorer_best.pt`:验证表现最好的 checkpoint 别名。 - `node_scorer_last.pt` 和 `path_scorer_last.pt`:训练结束时的 checkpoint 别名。 - `checkpoints/`:按 epoch 和 step 保存的中间 checkpoint。 - `export_manifest.json`、`train_summary.json` 和 `train.log`:模型元数据和训练轨迹。 ## 当前优势 - 单会话直接用户事实召回较强。 - 助手细节召回较强。 - 对变化事实的 knowledge-update 任务有较稳定表现。 - 已具备可工作的时间记忆和偏好召回层,后续仍有专项优化空间。 ## 当前改进方向 - multi-session 聚合和 unit coverage。 - 更深的时间图推理。 - 偏好 profile 抽象和跨会话隧穿。 - query graph 与 memory graph 的复杂问题匹配。 ## 适用场景 本仓库是 TMCRA 长记忆运行时工作的对外展示包,适合用于: - benchmark 审阅 - 模型和结果检查 - 复现冻结基线 - 展示 TMCRA 如何作为外部 Agent 的记忆运行时进行封装 ## Benchmark 结果 本包包含一次完整 LongMemEval S500 测试。 - Benchmark:LongMemEval S set,500 条样本 - Evaluation:official-compatible LongMemEval judge prompt - Judge 模型:`gpt-4o`,解析为 `gpt-4o-2024-08-06` - 本轮使用的写入层:DeepSeek v4 Flash - 本轮使用的回答层:GPT5.4-compatible API - 总准确率:`310 / 500 = 62.00%` ## 各任务类型结果 | 任务类型 | 准确率 | 数量 | | --- | ---: | ---: | | single-session-user | 81.43% | 70 | | single-session-assistant | 78.57% | 56 | | knowledge-update | 70.51% | 78 | | temporal-reasoning | 63.16% | 133 | | single-session-preference | 56.67% | 30 | | multi-session | 39.85% | 133 | benchmark 输出文件位于: ```text results/predictions.jsonl results/judge_gpt4o_alias_vectorengine.jsonl results/judge_gpt4o_alias_vectorengine.jsonl.summary.json results/lme_s500_frozen_baseline38_full10_20260525_results.tar.gz ```