关于 TOMC Memory
TOMC Memory 是面向 AI 助手的开源上下文准备与任务记忆工具,可在 CPU 上编译指定历史,并通过 MCP 服务或 Python API 显式保存和召回笔记。
主要功能
- 01基于 CPU 编译上下文
- 02按任务设置上下文预算
- 03显式保存和召回笔记
- 04提供 MCP 服务和 Python API
- 05多个助手共用本地笔记本
适用场景
- 01为任务准备长对话历史
- 02在新聊天中延续决策
- 03在不同助手间交接笔记
MCP 相关
其 MCP 服务提供准备上下文以及显式保存、召回任务笔记的工具。客户端可在本地运行,并共用笔记数据库。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
![]() |
累计克隆数 · 自 2026-10-02 起记录 · 于 2026-10-23 UTC 更新。统计方法与更新
觉得 TOMC 实用?点击右上角的 ⭐ Star 来支持这个项目。
TOMC Memory
为 Codex / Claude Code / Cursor / TRAE / WorkBuddy 提供上下文压缩和任务记忆
在 CPU 上压缩并整理长历史记录,回忆已保存的任务笔记。
与 API 搭配使用 · 安装 TOMC Memory · 切换助手 · 查看演示 · 论文解读 · 论文结果 · English | 简体中文
CPU 预处理 · 无需训练或额外模型服务 · 纯文本输出 · 研究预览版
GitHub 官方主页 · 插件下载 · 安装指南
这是 TOMC Memory 的官方仓库,包含源代码、插件下载和安装指南。
第 1 部分 · 使用 TOMC Memory
TOMC Memory 是一款基于任务导向记忆编译(Task-Oriented Memory Compilation,TOMC)的开源工具。它为 AI 助手压缩并编译上下文,并通过明确保存的笔记提供任务记忆。你可以通过 MCP 服务和 Python API 使用它。提供历史记录、下一项任务和记忆预算后,它会选择源文本并计算受支持的状态、关系或计数记录,让你的应用可以发送准备好的上下文,而非完整历史记录。准备过程在 CPU 上运行,无需训练或额外的模型服务。
制作视频、整理材料、处理文件或开发代码时,都可以使用任务记忆:通过 remember_memory 保存任务简介、决策、约束、已完成步骤和剩余工作,然后使用 recall_memory 为下一项任务准备这些笔记。这些示例展示了如何使用已保存的笔记。下方记录的测量结果涵盖合成项目历史记录和论文基准测试,各自采用不同的任务和协议;这些结果并不能证明在这些工作流的所有任务中都能达到相同性能。
将 Python API 添加到你自己的应用中,在 Codex 或 Claude Code 中安装插件,或通过本地 MCP 连接 Cursor、TRAE、Tencent WorkBuddy 和 Claude Desktop。节省量取决于历史记录和任务;较短的历史记录可以保持完整。默认设置会保留较长历史记录的约 80%。如果需要缩小请求规模,可在自己的任务上比较 40% 或 60% 的预算;参见单独的 Codex 和 Claude 结果。
在与同一助手或另一助手的新聊天中,重用已保存的任务笔记。如果两个客户端在同一台计算机上使用同一个 TOMC 数据库,就可以重用已保存的决策、约束和后续步骤。试试 Codex → Claude Code → Codex 交接。
这是预览版,版本为 0.1.0。从 采用 MIT 许可证的助手预览版下载插件。目前没有 PyPI 软件包或公开市场条目。
视频概览
完整视频(1:37,含声音) · 中文视频 · 媒体和测试范围
API 集成会在下一次请求前调用 TOMC,并发送准备好的上下文。Codex 和 Claude Code 使用工具保存或调取任务笔记。视频中的数字来自采用各自协议的特定测试,不代表任何提供商的背书。
测量结果列出了 Codex 和 Claude Code 的测试协议及其源记录。
首次运行指南 · Python API · 完整结果和限制。
TOMC 是研究预览版。欢迎提供反馈、报告问题、提交拉取请求以及开展研究合作。设备选择与助手选择相互独立;跨设备传输笔记本需手动使用 Git。
在助手中安装
选择适合你客户端的配置。TOMC 会在本地使用 CPU 准备上下文;由你的助手生成答案。该插件本身不需要额外的模型 API 密钥或 GPU。
宿主负责管理当前聊天。 当 Codex、Claude Code 或其他宿主负责压缩对话时,TOMC 不会主动重新压缩该聊天。对于未知的宿主状态,默认也由宿主负责。请将 TOMC 用于单独提供的外部历史记录或明确保存的笔记。这是一项工具使用策略,不是自动压缩检测器。上下文归属。插件包 0.1.1 包含此策略;编译器核心仍为 0.1.0。
首次运行
Claude Code:保存一条笔记,然后在新聊天中回忆它。 请先安装 UV。在 Claude Code 中运行:
/plugin marketplace add ZipengWu365/TOMC
/plugin install tomc-memory@tomc
开始新会话或重新加载 VS Code,并在 /mcp 中检查 plugin:tomc-memory:tomc。明确要求助手运行该工具:
Use TOMC's remember_memory to save a note named api-refactor:
keep public API routes unchanged; pagination tests have not been written.
Show the tool result.
在使用同一本地笔记本数据库的新聊天中,询问:
Use TOMC's recall_memory on api-refactor.
Report the saved constraints and unfinished work. Show the tool result.
保存和回忆都需要明确调用工具。该插件不会自动记录整个聊天。Claude Code 详细配置 · 共享笔记本检查。
Codex CLI:安装插件并验证工具是否可用。 下载 0.1.2 Codex ZIP,将其解压到你会保留的目录中,然后在该目录下使用 UV 和兼容的 Codex CLI 运行:
uv run --no-project --python 3.12 install.py --check
uv run --no-project --python 3.12 install.py
第一条命令会检查前置条件,不会更改 Codex 配置。安装后,请启动一个新的 Codex 会话,并明确要求它保存/回忆一条指定名称的笔记。Codex 完整说明 · 平台验证。
Python API:在调用模型前检查离线上下文示例。 需要 Python 3.10+:
git clone https://github.com/ZipengWu365/TOMC.git && printf '\n%s\n%s\n' \
'If TOMC helps with your work, consider a Star on GitHub (optional):' 'https://github.com/ZipengWu365/TOMC'
cd TOMC
python -m pip install -e .
python examples/api_context.py
上面的 Bash / Git Bash 命令会在成功克隆后显示可选的 Star 邀请。普通的 git clone 不会显示邀请;仅克隆不会安装 TOMC。
此示例会在本地准备并统计上下文;不会调用模型。要集成 TOMC,请将 prepared.messages 替换原始历史记录发送,同时保留应用程序的指令和协议。API 示例 · 参考文档。
其他客户端集成
| 客户端 | 从这里开始 | 前置条件 |
|---|---|---|
| Codex CLI | 下载插件 ZIP | 当前版本的 Codex CLI,支持插件命令;并且 uv(uv)位于 PATH 中,或通过 --uv 提供 |
| Codex IDE 扩展 | 配置本地 MCP 服务 | 已安装 .[mcp] 的本地 TOMC 环境 |
| Cursor | 生成安装链接,或添加 MCP 配置 | 本地 TOMC 运行环境;客户端工具调用尚未验证 |
| TRAE(国际版 / CN) | 将 TOMC 添加为本地 MCP 服务 | 本地 TOMC 运行环境;客户端工具调用尚未验证 |
| Tencent WorkBuddy | 通过本地 MCP 配置 TOMC | 本地 TOMC 运行环境;客户端工具调用尚未验证 |
| Claude Desktop | 下载 .mcpb 扩展 | 已更新且支持 UV 扩展的 Claude Desktop;首次安装时需要网络访问 |
| Claude Code | /plugin marketplace add ZipengWu365/TOMC,然后运行 /plugin install tomc-memory@tomc(详情) | uv;已在 Claude Code VS Code 扩展中测试 |
Codex 安装步骤
Codex CLI
下载上方的 ZIP,将其解压到你计划长期保留的目录中,然后在该目录下打开终端。运行:
uv run --no-project --python 3.12 install.py --check
uv run --no-project --python 3.12 install.py
第一条命令会检查前置条件,但不会注册插件或写入配置。第二条命令会为你的计算机准备路径、注册本地市场并安装 TOMC。启动新的 Codex 会话即可使用。必要时,UV 会下载 Python 和依赖项。如果可执行文件不在 PATH 中,请传入 --uv /absolute/path/to/uv 或 --codex /absolute/path/to/codex;如果 UV 本身不在 PATH 中,请使用 UV 可执行文件的路径启动该命令。请勿移动解压后的目录;如果移动了,请重新运行安装程序。请与他人分享原始 ZIP,而不是包含你本机路径的已配置副本。
对于 Codex IDE 扩展,请在已安装 .[mcp] 的环境中运行 python -m tomc setup --client codex,并将输出的 MCP 条目添加到设置中。设置指南中包含直接注册命令。在客户端中使用原生插件或独立的 TOMC MCP 注册,避免出现重复工具。
Cursor 安装步骤
Cursor
克隆仓库,并按照助手设置指南激活本地环境。在该环境中运行:
python -m pip install -e '.[mcp]'
python -m tomc setup --client cursor --link
打开输出的链接,然后确认 Add to Cursor。启动新聊天,并检查 TOMC 是否已启用。该链接会注册你已安装的环境;请勿移动该环境,如果移动了,请重新生成链接。在一台计算机上生成的链接不能用作另一台计算机的安装程序。
TRAE 安装步骤
#### TRAE使用 Cursor / TRAE 指南及其中可直接编辑的 JSON 模板。在设置 → MCP → 添加 → 手动创建中添加,并选择本地环境。或者,启用项目 MCP 并使用 .trae/mcp.json。在已安装 .[mcp] 的当前源码检出环境中,运行 python -m tomc setup --client trae 可打印适用于你环境的配置。TRAE 要求命令路径中不包含空格;指南还提供锁定的 UV 运行时。设置命令只会打印配置,不会更改客户端设置。
TRAE 和 Cursor 客户端的工具发现与模型调用尚未经过验证。这是手动 MCP 集成预览;报告连接错误时,请附上客户端版本和操作系统。
Tencent WorkBuddy 安装步骤
Tencent WorkBuddy
按照 WorkBuddy 指南编辑适用于本地运行时的 JSON 模板。打开插件 → MCP 服务 → 配置 MCP。将 tomc 条目合并到用户级 ~/.workbuddy/mcp.json 或项目级 .workbuddy/mcp.json 中,并保留现有服务。在已安装 .[mcp] 的当前源码环境中,也可以运行 python -m tomc setup --client workbuddy 生成配置。此命令只会打印配置。
这是手动本地 MCP 集成预览。WorkBuddy 客户端的工具发现和模型调用尚未验证;Tencent 的市场中未列出 TOMC。
Claude Desktop 安装步骤
Claude Desktop
- 下载上面的
.mcpb文件。 - 打开设置 → 扩展 → 高级设置 → 安装扩展…,然后选择该文件。
- 按照安装提示操作,然后开始新的聊天,并检查 TOMC 的五个工具是否可用。
受支持的宿主会通过 UV 运行时安装 Python 和锁定的依赖项;使用此软件包无需克隆仓库或手动设置 Python。
Claude Code 安装步骤
Claude Code
Claude Code 运行与本地 MCP 服务相同的锁定运行时。将上面的 .mcpb 文件(ZIP 存档)解压到你准备长期保留的目录,然后使用实际的解压路径运行以下命令:
uv sync --locked --directory "/absolute/path/to/extracted"
claude mcp add tomc-memory --scope user -- uv run --locked --directory "/absolute/path/to/extracted" src/server.py
启动新的 Claude Code 会话并运行 /mcp,检查五个工具。请在请求中指定工具名称,例如 “在这段历史记录上使用 tomc-memory prepare_context,任务为……,预算为 200”。如果 claude 不在 PATH 中,请使用 VS Code 扩展 resources/native-binary 文件夹中捆绑的 CLI(Windows 上为 claude.exe)。操作步骤、VS Code 说明和使用技巧
在 VS Code 扩展中使用 Claude Opus 5.5、预算为 8,192 的试用中,回忆一个笔记本内容时正确回答了五个问题;与将 20K 和 40K 令牌的历史记录粘贴到提示词中相比,成本分别低了 38% 和 65%;历史记录约为 10K 令牌时,成本则没有变化。预算为 1,024 时成本更低,但遗漏了一些最新值。请在聊天之外导入较长的历史记录。
**已在 Windows、macOS 和 Linux 上测试,并在 Claude Code 中通过测试。**三个系统上的安装和工具检查均已通过;真实模型调用已在 Codex 的 Windows preview.4 版本、macOS 以及使用 Claude Opus 5.5 的 Claude Code 中通过验证。Claude Desktop、Cursor 和 Codex 应用中的图形界面安装仍未经验证。平台检查和日期
使用技巧(英文) · 中文使用技巧 · Windows 安装反馈 · 完整安装指南 · 验证记录 · Claude 校验和 · Codex 校验和。
切换助手,保留项目笔记
在 Codex 中保存项目简介,在 Claude Code 中接着处理,然后把更新后的笔记带回来。在两个客户端中都安装 TOMC,并让两个服务打开同一个 SQLite 文件。每次保存和回忆都是显式的工具调用。共享路径设置。
用三个提示词试试交接
此示例保存的是计划笔记,并非声称测试已经运行。
| 位置 | 向助手提问 |
|---|---|
| Codex | 使用 TOMC 的 remember_memory 将以下内容保存为 api-refactor:保持公共 API 路由和响应字段不变。尚未编写或运行分页测试。 |
| 新的 Claude Code 聊天 | 使用 TOMC 的 recall_memory 回忆 api-refactor,任务:规划分页测试,预算:1024。然后使用 remember_memory 追加:测试计划——覆盖空结果、最后一页和无效页参数。测试仍未运行。显示两个工具结果。 |
| 新的 Codex 聊天 | 使用 TOMC 的 recall_memory 回忆 api-refactor,任务:总结 API 约束、最新测试计划和未完成的工作,预算:1024。在回答前显示返回的记忆。 |
笔记本会保留原始笔记和追加的更新;回忆会为下一项任务整理这段历史。这是共享已保存的笔记,而不是迁移原生聊天历史,也不提供跨设备云同步。MCP 互操作性和用户引导的检查。
自动 API 请求循环
在现有的同步 Chat Completions 调用前使用 AutomaticChatSession:默认采用便于缓存的稳定前缀(直到请求不再适配,编译后的记忆都保持不变)、缓存的模型限制、一次性的窗口边界回退,以及简短的原生压缩冷却时间。只有发出的旧历史视图会改变;原始历史、指令、近期消息和工具协议仍由调用方保留。默认的词汇打包路径现在可避免重复扫描前缀。34 个模型的容量快照。这不会让已安装的 MCP 插件拦截内置客户端请求,也不声称已通过原生客户端或模型验收。
在 API 调用前使用
使用 python -m pip install -e . 从此检出版本安装核心包。准备历史记录,检查 prepared.prompt,然后通过现有的聊天补全客户端发送 prepared.messages:
from tomc import prepare_context
prepared = prepare_context(history, task)
response = client.chat.completions.create(
model=model,
messages=prepared.messages,
)
此处的 history、task、client 和 model 是应用现有的输入和客户端。**对于此请求,请替换原始历史记录;将准备好的上下文追加到原始历史中会增加输入量。**保留应用所需的任何指令。对于其他文本 API,请将消息映射为提供商所需的格式。TOMC 会更改请求文本,但不会更改模型权重。API 指南和令牌计数。
经测量的节省
Windows Codex · gpt-6.1-sol
每种预算下均为 45/45 个答案正确。 在九段合成团队聊天记录(三个种子,历史记录约为 10K、20K 和 40K 个 token)中,Windows Codex 0.160.0 针对每段历史记录回答了五个关于最新项目状态的问题。保留了原始模型、ultra 努力度和已安装的插件。每次开始新的回答聊天前,TOMC 都通过已安装的 MCP 工具准备上下文。
精确数值(可复制文本)
| 发送的上下文 | 平均请求输入 token 数 | 平均配对输入降幅 | 正确答案 |
|---|---|---|---|
| 完整历史记录 | 42,191 | 参考值 | 45/45 |
| TOMC · 40% 历史记录预算 | 28,713 | 29.7% | 45/45 |
| TOMC · 60% 历史记录预算 | 33,344 | 19.5% | 45/45 |
| TOMC · 默认 80% 历史记录预算 | 38,035 | 9.2% | 45/45 |
输入量是 Codex 报告的总量,包括缓存输入、宿主指令和工具定义。降幅是九个配对历史记录级比率的平均值,而不是表中平均值之比。这些数据针对每段历史记录和每种条件下的一个回答轮次;如果要求模型在聊天中准备或回忆信息,则会增加轮次。所有准备好的上下文都使用 tomc_raw 源选择,未使用编译后的操作记录。这项测试评估的是合成最新状态检索,而非一般编码质量。英文报告 · 中文报告 · 记录数据 · 预算提示。完整历史记录请求使用了安装 TOMC 且启用所有现有插件的同一配置文件。表格涵盖测试框架中每种条件下的单个回答轮次;完整的 Agent 工作流可能涉及额外轮次。
Claude Code · Claude Opus 5.5
在约为 10K、20K 和 40K 个 token 的合成团队聊天记录中,这些记录包含数十到数百次状态更新以及相似的干扰信息,Claude Opus 5.5 回答了五个关于最新项目状态的问题。TOMC 保留 40% 的历史记录时,五个答案均与完整历史记录条件下的答案一致。回答请求的成本如下:
精确数值(可复制文本)
| 历史记录 | 完整历史记录 | TOMC 保留 40% | TOMC 保留 60% |
|---|---|---|---|
| ~10K 个 token | US$0.169 · 5/5 | US$0.075 · 5/5 (−56%) | US$0.103 · 5/5 (−39%) |
| ~20K 个 token | US$0.334 · 5/5 | US$0.141 · 5/5 (−58%) | US$0.195 · 5/5 (−42%) |
| ~40K 个 token | US$0.628 · 5/5 | US$0.255 · 5/5 (−59%) | US$0.369 · 5/5 (−41%) |
Claude Code 默认预算检查。 未设置 budget 时,TOMC 会保留历史记录估算 token 数的约 80%(至少 1,024,因此较短的历史记录会完整保留)。在每种长度的三段不同历史记录中,Claude Opus 5.5 正确回答了全部 45 个问题,输入量减少约 20%;保留 50%、60% 和 70% 时也都正确回答了全部 45 个问题,节省约 49%、39% 和 30%。预算较小时开始出现过时的值:保留 10–20% 时,五个问题中只有三到四个回答正确。只有在你自己的任务样本中对照完整历史记录检查后,才传入较小的 budget。这些是合成历史记录,使用了一个模型,且请求工作流与 Codex 测试不同。验证记录 · 预算提示
助手插件提供上下文准备工具。它不会拦截每个 API 请求,也不会清除活动聊天中已有的消息。若要使用较小的请求,你的应用必须发送准备好的上下文;也可以将其交给新聊天。笔记本存储是可选的。
准备上下文
安装后,请让你的助手调用 TOMC 的 prepare_context 工具。将下方文本作为 history 传入,将 task 设为 "What are the current framework and backup_framework values?",将 budget 设为 64,然后让助手根据返回的记忆作答。
framework = Flask
backup_framework copies framework
framework = FastAPI
Monday notes: the team reviewed the project backlog, discussed deployment windows and agreed to keep the public API routes and response fields unchanged during the refactor.
Tuesday notes: the migration plan still needs a review from the database owner, and the pagination tests have not yet been written or run.
Wednesday notes: the team checked the release checklist, added a rollback task, and postponed the documentation update until after the test results are available.
此示例使用显式赋值和快照副本。TOMC 准备 framework = FastAPI 和 backup_framework = Flask,并附上来源链接。工具的使用由宿主控制;现有模型会生成答案。
在相同指令和任务下,使用 cl100k_base 计算,此示例的消息文本从 147 个 token 减少到 108 个 token。此处统计消息内容,不包括提供方的聊天封装和工具;这只是单个示例,不代表实际计费使用量或固定的节省比例。运行 python examples/api_context.py 可进行离线词法估算,或参阅 API 指南 了解 BPE 计数。
prepare_context 不会保存此历史。已经符合预算的历史会保持原样;对于较长的文本,可以使用检索,而不是类型化记录。budget 限制的是词法计数器下的记忆;任务文本和工具封装还会带来额外开销。
可选:在不同聊天中保留历史
笔记本会以原始形式存储提供的文本。recall_memory 会为指定任务准备该历史;直接调用 prepare_context 无需笔记本,也不会向其中写入内容。
尝试在两个聊天或助手之间共享记忆
在第一个聊天中,例如在 Codex 里:
使用 TOMC 将以下内容记为 api-refactor:保持公共 API 路由和响应字段不变。分页测试仍需编写。
在新聊天中,例如在使用同一数据库的 Claude Code 里:
从 TOMC 中找回 api-refactor。在继续之前,提醒我有哪些限制条件和未完成的工作。
默认数据库为 ~/.tomc/memory.sqlite3。两个服务都必须指向同一个文件;自定义 --store 或 TOMC_MEMORY_PATH 可以让客户端使用独立文件。检查路径并尝试交接。TOMC 会读取传递给其工具的笔记;安装它并不会自动捕获每次聊天的内容。助手会根据其权限设置决定调用哪些工具。
试用演示
此演示展示 TOMC 如何为任务准备上下文。它不会在不同聊天之间创建笔记本。
本地运行
Gradio 界面需要 Python 3.10–3.13。克隆仓库:
git clone https://github.com/ZipengWu365/TOMC.git && printf '\n%s\n%s\n' \
'If TOMC helps with your work, consider a Star on GitHub (optional):' 'https://github.com/ZipengWu365/TOMC'
cd TOMC
在 macOS 上,先检查 python3 --version:系统自带的 Python 3.9 无法运行 TOMC。安装 UV 后,可以让它提供 Python 3.12 并直接启动演示:
uv run --python 3.12 --extra demo python -m demo.app
或者,使用已有的兼容 Python,并按照下面的步骤设置环境。macOS 指南。
在 Linux/macOS 上,使用 UV 管理 Python,避免系统缺少 venv/ensurepip 模块。以下命令已通过 Linux 检查:
uv venv --python 3.12 --seed .venv
source .venv/bin/activate
如果你更愿意使用系统 Python,可运行 python3 -m venv .venv 并按上文所述激活环境。Debian/Ubuntu 系统需要安装对应的 python3-venv 软件包。如果失败的命令已创建不完整的环境,可运行 uv venv --python 3.12 --allow-existing --seed .venv 恢复。
或者,在已安装 Python 3.12 的 Windows PowerShell 中运行:
py -3.12 -m venv .venv
.venv\Scripts\Activate.ps1
然后安装并启动演示:
python -m pip install -e '.[demo]'
python -m demo.app
- 打开 http://127.0.0.1:7860 并选择 立即使用。
- 点击 试用演示以准备示例,或粘贴你的历史记录、输入下一个任务并点击 准备。
- 使用复制图标复制准备好的提示词,并将其粘贴到你常用的模型中。
支持文本、Markdown、消息 JSON 和 JSONL。安装后,本地准备过程可离线运行。使用准备好的提示词时,由你的模型生成答案;默认演示不会调用读取器 API。托管预览会在 Space 服务端处理输入。
使用 30 秒导览查看引导示例,使用 工作台比较策略,或使用 研究证据浏览已存档的论文结果。桌面视图 · 移动视图。
在 Ubuntu 24.04.5 和 Python 3.12.13 上,全新下载通过了 Linux 安装和浏览器检查。报告包含截图、插件检查和安装反馈。
实用技巧
- 从 试用演示及其 小型请求示例开始。对于普通文本,可尝试 均衡或 更多细节,并在降低预算前检查保留的来源。
- 在下一次 API 请求中发送准备好的消息,而不是原始历史记录。手动使用时,将提示词粘贴到新聊天中;若将其添加到已有的长聊天中,该聊天此前的输入仍会保留。
- 让任务问题具体明确。检查状态记录和来源文本,尤其是在更改历史记录或记忆大小后。Token 显示的是消息内容估算值,并非服务提供商的计费信息。
- 使用插件时,请保持安装目录和 Python 环境不变。每个客户端只注册一个 TOMC;共享原始软件包,而不要共享包含本地路径的配置。Linux 报告介绍了验证和恢复方法。
第 2 部分 · 论文解读
论文题为 Task-Oriented Memory Compilation: Executable State Representations for Long-Context Language Models。arXiv 链接即将添加。本节介绍其方法和已存档的结果。
在论文中,GPT-5.1、Rednote preview 和 DeepSeek V4.1 Flash 是 API 读取器模型。每组配对的基线与 TOMC 对比都使用同一个读取器。Codex 和 Claude Code 是插件试验中的助手宿主,分别使用 gpt-6.1-sol 和 Claude Opus 5.5;这些试验与论文基准测试相互独立。读取器模型与助手宿主
TOMC 的计算内容
长对话中,变化的事实、较早的副本和证据散落在各条消息中。调用 LLM 前,TOMC 会针对当前问题准备记忆。它会计算状态、关系或计数记录,并在 token 预算内将这些记录与选定的源文本结合。
基于 CPU 构建 · 无需训练或辅助神经模型 · 纯文本输出 · 研究预览版
论文中的方法概述。演示使用小型参考解析器;方法文档说明了它与基准实现的区别。
假设一段历史包含以下更新:
drink = tea
backup_drink copies drink
drink = decaf tea
当前值为 drink = decaf tea,而 backup_drink = tea 保留了复制时的值。TOMC 按顺序执行这些操作,并将结果记录关联到对应的源行。
在 Python 中运行此示例
from tomc import compile_memory
result = compile_memory(
messages="drink = tea\nbackup_drink copies drink\ndrink = decaf tea",
query="What are the current drink and backup_drink values?",
token_budget=128,
strategy="tomc",
)
print(result.compiled_memory)
print(result.ledger) # records and their sources
运行 python examples/snapshot.py 可查看完整示例,其中还会追踪 seat。此示例演示复制语义。源标签会增加 token 数;此示例不衡量回答质量。
关系和计数也遵循同样的思路:在将记忆交给读取器之前,先计算问题所需的操作。对于询问原因、引述或状态记录无法表达的其他细节的问题,应保留源文本的措辞。
同一读取器:基线记忆与 TOMC 记忆
BEAM 研究使用 GPT-5.1、Rednote preview 和 DeepSeek 4.1 Flash,在 100K、500K、1M 和 10M token 的历史记录上回答问题。每个读取器使用 TOMC 记忆或六种基线记忆配置之一作答。
- **质量:**在 500K、1M 和 10M 下的全部 54 组读取器 × 基线 × 长度比较中,以及全部 18 组整体比较中,TOMC 的平均分均更高。
- **读取器输入:**在 100K–10M 范围内,整体输入量比 LIGHT 低 36.57%,比分层 LLMLingua-2 低 37.38%;计算平均值时,各读取器的变化权重相同。其他一些基线的输入量低于 TOMC。
- **基于 CPU 构建:**在六次重放中,测得的 TOMC 阶段平均耗时为 4.21 s/次调用,CUDA 分配量为 0 GiB,进程 RSS 峰值为 3.75 GiB。在记录的阶段中,每次调用的构建时间比 BRIEF-Pro 短 11.4 倍,比 LongLLMLingua 短 17.1 倍。这些是阶段耗时比,不包括读取器推理。
在每一组配对中,同一读取器会使用由指定基线或 TOMC 构建的记忆回答匹配的问题,并在配对内采用匹配的评分方式。
表格文本
| Baseline | GPT-5.1 | Δ (%) | Rednote preview | Δ (%) | DeepSeek 4.1 Flash | Δ (%) | Mean Δ (%) | |---|---:|:---|---:|:---|---:|:---|:---| | **Overall (all lengths)** | | | | | | | | | LLMLingua-2-D (2024) | 34.60 / **55.75** | ↑ 61.1 | 31.23 / **50.75** | ↑ 62.5 | 29.90 / **53.48** | ↑ 78.8 | ↑ 67.5 | | LongLLMLingua (2024) | 32.77 / **51.68** | ↑ 57.7 | 32.75 / **47.73** | ↑ 45.7 | 36.32 / **53.45** | ↑ 47.2 | ↑ 50.2 | | BRIEF-Pro (2026) | 34.85 / **51.41** | ↑ 47.5 | 33.87 / **48.04** | ↑ 41.9 | 37.51 / **53.29** | ↑ 42.1 | ↑ 43.8 | | LLMLingua-2-H (2024) | 40.98 / **56.25** | ↑ 37.3 | 36.50 / **51.76** | ↑ 41.8 | 33.36 / **53.08** | ↑ 59.1 | ↑ 46.1 | | BEAM-RAG (2026) | 47.94 / **54.90** | ↑ 14.5 | 48.10 / **51.90** | ↑ 7.9 | 47.48 / **53.26** | ↑ 12.2 | ↑ 11.5 | | LIGHT (2026) | 48.65 / **55.32** | ↑ 13.7 | 47.32 / **51.63** | ↑ 9.1 | 51.44 / **53.16** | ↑ 3.3 | ↑ 8.7 | | TOMC w/o compilation | 55.00 / **56.20** | ↑ 2.2 | **51.25** / 50.34 | ↓ 1.8 | 49.74 / **52.74** | ↑ 6.0 | ↑ 2.1 | | **100K tokens** | | | | | | | | | LLMLingua-2-D (2024) | 51.70 / **62.78** | ↑ 21.4 | 45.03 / **56.24** | ↑ 24.9 | 44.73 / **58.22** | ↑ 30.1 | ↑ 25.5 | | LongLLMLingua (2024) | 39.23 / **57.29** | ↑ 46.0 | 35.36 / **50.53** | ↑ 42.9 | 43.55 / **57.63** | ↑ 32.3 | ↑ 40.4 | | BRIEF-Pro (2026) | 36.67 / **55.90** | ↑ 52.5 | 34.54 / **52.18** | ↑ 51.1 | 44.43 / **57.63** | ↑ 29.7 | ↑ 44.4 | | LLMLingua-2-H (2024) | 53.37 / **63.58** | ↑ 19.1 | 45.19 / **58.53** | ↑ 29.5 | 45.05 / **56.65** | ↑ 25.7 | ↑ 24.8 | | BEAM-RAG (2026) | 53.58 / **62.26** | ↑ 16.2 | 53.48 / **58.25** | ↑ 8.9 | 51.57 / **58.21** | ↑ 12.9 | ↑ 12.7 | | LIGHT (2026) | 60.50 / **62.26** | ↑ 2.9 | 57.05 / **58.25** | ↑ 2.1 | **61.01** / 58.21 | ↓ 4.6 | ↑ 0.1 | | TOMC w/o compilation | 57.89 / **58.45** | ↑ 1.0 | **55.78** / 52.78 | ↓ 5.4 | 53.05 / **53.19** | ↑ 0.3 | ↓ 1.4 | | **500K tokens** | | | | | | | | | LLMLingua-2-D (2024) | 36.68 / **58.99** | ↑ 60.8 | 33.96 / **56.71** | ↑ 67.0 | 30.49 / **59.22** | ↑ 94.3 | ↑ 74.0 | | LongLLMLingua (2024) | 34.36 / **56.82** | ↑ 65.4 | 34.86 / **54.54** | ↑ 56.5 | 36.54 / **59.43** | ↑ 62.6 | ↑ 61.5 | | BRIEF-Pro (2026) | 37.42 / **55.18** | ↑ 47.5 | 35.71 / **54.00** | ↑ 51.2 | 39.49 / **59.43** | ↑ 50.5 | ↑ 49.7 | | LLMLingua-2-H (2024) | 37.31 / **59.00** | ↑ 58.1 | 37.13 / **57.94** | ↑ 56.0 | 33.53 / **59.58** | ↑ 77.7 | ↑ 63.9 | | BEAM-RAG (2026) | 53.09 / **59.10** | ↑ 11.3 | 52.88 / **56.04** | ↑ 6.0 | 53.08 / **59.46** | ↑ 12.0 | ↑ 9.8 | | LIGHT (2026) | 49.48 / **59.60** | ↑ 20.4 | 52.38 / **56.04** | ↑ 7.0 | 54.78 / **59.46** | ↑ 8.5 | ↑ 12.0 | | TOMC w/o compilation | 56.13 / **57.47** | ↑ 2.4 | **50.99** / 50.85 | ↓ 0.3 | 50.25 / **56.02** | ↑ 11.5 | ↑ 4.5 | | **1M tokens** | | | | | | | | | LLMLingua-2-D (2024) | 24.67 / **58.69** | ↑ 137.9 | 23.90 / **50.54** | ↑ 111.5 | 24.56 / **54.47** | ↑ 121.7 | ↑ 123.7 | | LongLLMLingua (2024) | 32.66 / **50.91** | ↑ 55.9 | 32.81 / **45.75** | ↑ 39.4 | 36.94 / **54.47** | ↑ 47.5 | ↑ 47.6 | | BRIEF-Pro (2026) | 35.10 / **53.03** | ↑ 51.1 | 35.66 / **46.88** | ↑ 31.5 | 36.58 / **54.47** | ↑ 48.9 | ↑ 43.8 | | LLMLingua-2-H (2024) | 43.34 / **58.78** | ↑ 35.6 | 36.01 / **51.97** | ↑ 44.3 | 32.74 / **55.10** | ↑ 68.3 | ↑ 49.4 | | BEAM-RAG (2026) | 50.75 / **56.38** | ↑ 11.1 | 48.51 / **53.40** | ↑ 10.1 | 50.05 / **53.06** | ↑ 6.0 | ↑ 9.1 | | LIGHT (2026) | 51.25 / **56.59** | ↑ 10.4 | 45.83 / **53.40** | ↑ 16.5 | 51.15 / **53.06** | ↑ 3.7 | ↑ 10.2 | | TOMC w/o compilation | 50.96 / **52.68** | ↑ 3.4 | 46.92 / **47.34** | ↑ 0.9 | 45.90 / **49.02** | ↑ 6.8 | ↑ 3.7 | | **10M tokens** | | | | | | | | | LLMLingua-2-D (2024) | 25.36 / **42.57** | ↑ 67.8 | 22.05 / **39.54** | ↑ 79.3 | 20.35 / **42.20** | ↑ 107.4 | ↑ 84.8 | | LongLLMLingua (2024) | 24.86 / **41.74** | ↑ 67.9 | 27.97 / **40.10** | ↑ 43.4 | 28.25 / **42.28** | ↑ 49.7 | ↑ 53.7 | | BRIEF-Pro (2026) | 30.25 / **41.59** | ↑ 37.5 | 29.60 / **39.13** | ↑ 32.2 | 29.52 / **41.63** | ↑ 41.0 | ↑ 36.9 | | LLMLingua-2-H (2024) | 29.88 / **43.65** | ↑ 46.1 | 27.66 / **38.66** | ↑ 39.8 | 22.56 / **41.58** | ↑ 84.3 | ↑ 56.7 | | BEAM-RAG (2026) | 34.39 / **41.89** | ↑ 21.8 | 37.46 / **39.83** | ↑ 6.3 | 35.20 / **42.29** | ↑ 20.1 | ↑ 16.1 | | LIGHT (2026) | 33.38 / **42.87** | ↑ 28.4 | 34.02 / **38.81** | ↑ 14.1 | 38.76 / **41.86** | ↑ 8.0 | ↑ 16.8 || 基线 | 总体输入变化 | 10M 输入变化 |
|---|---|---|
| LLMLingua-2-D(2024) | -10.95% | -43.81% |
| LongLLMLingua(2024) | -11.75% | -19.03% |
| BRIEF-Pro(2026) | +280.37% | +297.87% |
| LLMLingua-2-H(2024) | -37.38% | -45.65% |
| BEAM-RAG(2026) | +8.79% | -3.27% |
| LIGHT(2026) | -36.57% | -41.99% |
D/H 分别表示直接式/分层式 LLMLingua-2。总体结果汇总了每个阅读器在所有长度下的有效配对;各行的配对集合和评分协议各不相同,因此请在每个单元格内进行比较。平均分较高并不能证明差异显著。输入变化是相对于基线的 TOMC:负值表示 token 更少。直接式 LLMLingua-2 的 1M 运行产生了 200 条空记忆;这些分数予以保留,但输入量减少不视为成功压缩。
10M 数据于 2026-10-10 添加:来自 10 个会话的 200 个 BEAM 问题,3,600 对中有 3,596 对有效,使用匿名且位置平衡的成对评分标准进行评分。LLMLingua-2 的两个 10M 行均使用了修复后的批次,其中记忆非空。无编译行涵盖 100K–1M;10M 消融实验仍在运行。10M 数据和评分。
顶部的比较按阅读器汇总有效的 500K/1M 问题,然后计算各阅读器相对变化的平均值。能力图使用共同的有效问题,并对各长度进行等权平均。所有长度、配对数和协议。
编译后的记录带来了什么? 一项单独的 BEAM 消融实验移除了记录及其附带指令,同时保留源文本和上游路由。三种阅读器的时间推理分数在启用编译时均较高,但编译的总体影响因阅读器而异。这项比较针对启用和未启用编译的情况,与上表的基线比较相互独立。
基于 RULER 的诊断检查状态跟踪,以及 NIAH 和 QA2 所需的源文本。修复后的 NIAH 源移除配对得分为 87.28 / 82.26 平均 F1,移除后输入减少约 43%–44%。该结果来自单独的配对重跑;其分数不会与历史 Query 结果合并。任务结果和局限。
论文中的图 3。面板 a、b 以 Query 选择作为输入参照;面板 c、d 使用完整 TOMC/状态路由,并以 † 标记修复后的 NIAH 配对。VT 是状态路由诊断。更大的 2×2 审阅版式 · 数值结果。
论文的构建成本表 3保留了实测的阶段耗时以及 CPU/GPU/RAM 的统计范围;不包括阅读器推理。图表来源。
证据快照已与 2026-09-28 的手稿提交 7399657 同步。上述分数由基准适配器生成。演示版使用更精简的解析器和逐行 BM25;其中的 rag 与 BEAM-RAG 不同,其 hybrid 路由器也不同于历史 Hybrid-RAG 对照。
选择策略
| 策略 | 发送给读取器的记忆 | 适用场景 |
|---|---|---|
raw | 完整输入,即使超出预算 | 未压缩的参考内容 |
head / tail | 开头或结尾的文本 | 基于位置的控制 |
rag | 按 BM25 排序的源文本行 | 词法查找 |
tomc | 仅记录机制;找不到记录时执行检索 | 检查支持的状态、关系或计数操作 |
tomc_raw(编译器默认值) | 记录加上选定的源文本 | 需要计算记录和原始措辞的任务 |
hybrid | 根据固定任务规则选择的表示形式 | 混合任务和引文请求 |
字符串匹配和输入限制
参考解析器可识别 key = value、B copies A 和 x -[rel]-> y 等格式。证据选择和路由也使用固定的词法规则。改述、含糊的名称、隐式更新和不熟悉的格式,可能导致证据遗漏或路由不合适。
对于结构化状态,请使用文档所述语法并检查源链接。对于普通文本,请使用检索或保留源文本的路由。这些选项能保留有用证据,但不能保证预算内包含所有相关细节。支持的操作 · 已知限制。
Token 数量
默认情况下,演示会报告词法估算值。其记忆计数不包含任务、聊天框架、读取器输出和检查器。可选的 tiktoken:cl100k_base 会按该编码计数;服务商的计费结果可能不同。retention_ratio 表示输出/输入,compression_ratio 表示输入/输出。任何显示的价格均来自用户提供的费率。默认演示不会调用读取器 API。
在 Python 中使用
对于 Python 应用,请在现有读取器调用前调用 prepare_context(history, task)。
你的读取器模型保持不变。 TOMC 会返回文本,你可以将其用于任何基于文本的大模型 API,或复制到聊天界面中。内置连接器支持兼容 chat-completions 的 API;其他服务商则使用你自己的客户端和消息格式。构建记忆不需要模型权重或 API 密钥。答案生成仍照常使用你选择的模型。
History + current task → TOMC on CPU → prepared context → your existing LLM API
核心包要求 Python 3.10+,且没有运行时依赖。在已激活的环境中,从检出目录运行 python -m pip install -e .:
from tomc import prepare_context
context = prepare_context(
"The workshop now has 28 attendees. Room B is available but not booked.",
"What should we do next?",
)
print(context.prompt) # paste into a chat interface
# Or pass context.messages to your existing chat-completions client.
# For other APIs, use context.prompt or map the messages to their input format.
检查结果并扩展演示
python -m pip install -e '.[demo,dev,mcp]'
python -m pytest -q
python benchmarks/reproduce/current.py
python benchmarks/reproduce/results.py
python -m mkdocs build --strict
当前结果脚本会验证快照哈希和汇总算术。历史结果脚本会根据对话汇总重建较早的四读取器统计数据。可复现性介绍了各批次可用的内容。
若要运行你自己的读取器,请将 result.reader_messages(query) 传递给你的客户端,或使用可选的 API 连接器。LLMLingua 适配器需单独安装。CONTRIBUTING.md介绍了检查方法,以及如何报告编译器错误处理的输入。
引用与许可
TOMC 的源代码和原创合成示例可在 MIT License 下免费使用,包括商业使用、修改、再分发以及集成到其他项目中。软件副本或其重要部分必须保留版权和许可声明。欢迎反馈、贡献和合作。
如果 TOMC 对您的研究有所帮助,请引用这篇论文。我们鼓励引用,但引用并非额外的许可条件。该论文是 Zipeng Wu、Yanjun Zhao、Fabian Spill 和 James Andrews 撰写的预印本;arXiv 编号将在可用时补充。CITATION.cff 为 GitHub 的 Cite this repository 按钮提供相同的条目。如需反馈和合作,请联系 Zipeng Wu([email protected])。
@misc{wu2026tomc,
title = {Task-Oriented Memory Compilation: Executable State Representations for Long-Context Language Models},
author = {Wu, Zipeng and Zhao, Yanjun and Spill, Fabian and Andrews, James},
year = {2026},
note = {Preprint},
url = {https://github.com/ZipengWu365/TOMC}
}
示例均为合成数据。此仓库仅分发数值基准汇总数据,不包含问题文本、读者答案或私有 API 载荷。数据来源 · 数据与许可。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。

