替换嵌入模型压缩编程代理记忆开销
Turnbook 将多种编程代理的对话保存在本地 SQLite,检索后向模型提供限长证据包。作者在 500 道 LongMemEval_S 题目上报告,换用 CPU 运行的四位量化 EmbeddingGemma 后,达到 91.8% 准确率所需的中位输入从 26.3k 降至 3.1k token。
AI 深度解读
给编程 Agent 加记忆,成本不只在「存多少」,还在「每次翻出多少」。Turnbook 作者把搜索模型从 multilingual mpnet 换成 EmbeddingGemma 后,在自己的评测中,用约八分之一的上下文就达到了相同准确率。
这组结果值得看,因为它把优化方向从「给模型更多历史」转向了「把证据排得更靠前」。但 91.8% 的成绩存在训练与评测重叠,不能直接当成换模型就能复现的收益。
为什么换搜索模型,能省掉八成以上的输入
Turnbook 是编程 Agent 的本地记忆工具。它把 Claude Code、Codex、Cursor、Copilot CLI、Gemini CLI 和 OpenCode 的每轮对话逐字存进电脑上的一个 SQLite 文件;保存过程不调用模型,因此不消耗 token。需要回忆时,再搜索历史,交给 Agent 一份长度受限的证据包。
在 0.10 版本中,作者把 multilingual mpnet 换成了 EmbeddingGemma,采用 4-bit ONNX,在 CPU 上运行。
作者的解释是:旧模型可能已经找到了正确对话,但把它排在第 15 或第 40 位。为了让负责回答的模型读到它,只好扩大证据包。新模型把正确内容排到前面,小包就够用了。
检索结果排得准,才有机会让回答模型读得少。
在 LongMemEval_S 上,旧模型需要 26.3k tokens 的证据包才能达到 91.8%;EmbeddingGemma 用 3.1k 就达到了同一准确率,约缩小 8.5 倍。这里减少的是交给回答模型的证据量,不能直接理解成整个系统总费用降低同样倍数。
这些数字证明了什么,又没证明什么
LongMemEval_S 包含 500 个问题,每题对应约 115k tokens 的长聊天历史。系统先检索、组装证据包,再让回答模型仅根据包内内容作答;裁判采用基准官方的 gpt-4o 评判提示词。
全部 500 题都计入成绩。有一题的回答模型耗尽输出预算仍在思考,没有给出答案,也按错误处理。作者表示,各行比较只改变搜索模型和证据包大小。
同样大小的证据包下,只有 Gemma 答对的有 33 题,只有 mpnet 答对的有 7 题,精确 McNemar 检验 p = 0.00004。它用来检查这种成对胜负差异是否可能只是随机波动。需要跨多次会话找事实的问题,准确率从 73.6% 升到 88.4%。
另一个更贴近检索环节的指标是:在重排序器没见过的 LoCoMo 对话上,答案所在轮次进入前 10 条结果的比例,从 70.2% 升到 83.7%。
但作者也披露,上层的小型学习式重排序器同时用 LoCoMo 和 LongMemEval 训练过。因此,91.8% 并非完全独立的测试成绩;在从未用于调优的 380 题上,准确率是 91.1%。原文没有交代回答模型的具体型号,也没有给出上述成对比较使用的具体证据包大小,复现时需要补齐这些信息。
本地运行的收益,还有速度与许可这两笔账
其他变化也有参考价值:
- 仅用语义搜索处理韩语问题时,答案进入前 30 条的比例从 67.5% 升到 86.9%;韩语问题找到英语对话的比例为 87.8%。
- 记忆服务内存占用从约 772 MB 降到约 525 MB。
- GitHub runner 上的单次查询耗时从约 26 ms 增至约 40 ms,搜索速度有所下降。
韩语结果不能直接外推为中文效果,runner 上的耗时也不等于个人电脑上的体验。
部署方面,旧用户的记忆会在后台以低优先级迁移,完成前继续使用旧模型。EmbeddingGemma 首次使用时下载,不随安装包分发,适用 Google 的 Gemma Terms of Use;Turnbook 自身采用 Apache-2.0。
作者提供了 Windows、macOS、Linux 的无需 Python 安装方式,也给出了下面这条 pip 安装命令:
pip install turnbook && turnbook-install
注意后半句 turnbook-install:安装流程还包括注册集成,不能只停在安装 Python 包。原文称它会向检测到的 Agent 注册 MCP server,并在 Claude Code、Codex、Copilot CLI 中自动为每条消息加入相关记忆。
我的判断
我认同作者的优化方向:如果正确证据排在很后面,扩大上下文是在用更多输入补偿排序不足。与直接增大证据包相比,先改善检索更值得尝试。
不过,这组数据支持的是作者当前检索、重排序和回答流程中的收益。成对检验增强了结果的可信度,却不能消除训练重叠,也不能证明 EmbeddingGemma 对所有团队都更好。对于「多花十几毫秒是否划算」,作者没有给出完整交互耗时或成本对照,这仍是经验判断。
原文称每题的问题、证据包、答案和裁判结果都保存在仓库的 research/runs。这种可检查性有价值,评估时尤其应该看失败样本,而不是只看总准确率。
能拿来做什么
- 如果你在做编程 Agent 的历史检索,固定回答模型和证据包预算,对比不同 embedding 模型,先检查正确证据能否进入前 10 条。
- 如果前端或全栈项目需要跨会话找回技术决策,可以用真实历史问题评测,并把需要串联多次讨论的问题单独统计。
- 如果准备接入 Turnbook,先检查自动注入的记忆是否相关,并用中文问题验证跨语言检索效果,再决定是否长期启用。