安全研究员Jordy Zomer在做漏洞挖掘时发现一个熟悉的毛病:让LLM agent连续分析几个小时之后,它会开始"选择性失忆"。两小时前刚被推翻的假设,模型还在用来推理;明明已经证伪的指针关系,结论却还挂在那儿没撤下。他的解法有点意外——不是换个更好的记忆库,而是把程序静态分析里的Datalog引擎搬进来,让LLM只管翻译模糊信息,剩下的确定性推理交给数据库。这个项目叫Lemmalog,已经开源。

记忆的问题,其实是维护的问题

主流的LLM记忆方案是向量检索:把对话存起来,做embedding,需要时召回最相关的片段,再让模型自己判断哪些还成立。Zomer觉得这套逻辑有个致命漏洞——检索解决的是"什么信息相关",不是"现在什么是真的"。一个事实被推翻之后,向量数据库不会知道,还会把它当成"相关内容"继续召回,模型得自己在一堆互相矛盾的记忆里猜。

他把这个场景对照到了程序分析的经典问题:一堆事实,加一套推导规则,算出一个不断更新的定点结果。call graph可达性分析、指针分析用的都是这个套路,而且早就有成熟的增量算法——某个输入事实变了,只需要局部重算受影响的部分,不用从头来一遍。Zomer的判断是,漏洞研究里的"信念维护"在结构上就是同一个问题,直接借Datalog的语义来处理,比在向量检索层面打补丁更靠谱。

Lemmalog架构:谁负责模糊,谁负责确定 调试器输出 代码 / 自然语言 LLM负责的模糊部分 结构化事实 + 推导规则 Datalog引擎 维护的当前状态 + 来源可追溯 事实失效自动级联 一条事实被证伪时,依赖它的结论自动撤下,不用重跑整段对话

基准测试戳破的真相

Lemmalog的功能清单很长:分层Datalog、双时序事实、置信度标注、证明树、按需查询、混合检索、MCP服务器接入Claude Code和Kimi CLI。听起来是个完整的工程,但工程完不完整不重要,能不能打才重要。Zomer自己把它接进标准记忆评测MemEval,跑了LongMemEval和LoCoMo两个基准,结果没有他预期的那么风光。

在LongMemEval上,Lemmalog的F1是0.463,准确率0.575。作为对照,全上下文喂给GPT-4.1只能拿到0.197,Lemmalog确实赢了将近两倍多。但和已发表的两个同类记忆系统一比,故事就没那么漂亮了——PropMem是0.550,SimpleMem是0.480,两个都比Lemmalog高。在LoCoMo上也是类似排位,Lemmalog的0.533落后PropMem和OpenClaw。

LongMemEval F1对比:更复杂不等于更准 PropMem 0.550 SimpleMem 0.480 Lemmalog 0.463 OpenClaw 0.244 全上下文 0.222

真正站得住的优势是token消耗。全上下文方案每题要塞进约104000个token,Lemmalog只要2700,差了近三十八倍。这个数字确实亮眼,但要说清楚——它不是Lemmalog独有的贡献,几乎所有把长对话压缩成结构化记忆的方案都有这个红利,PropMem和SimpleMem大概率同样便宜。Zomer本人也没回避这个落差,他在文章里如实标出了自己排名靠后,没有把结果包装成"完全解决了记忆问题"。

Datalog管的是推理一致,管不住喂给它的前提对不对

真正的风险藏在提取那一步

Lemmalog的retraction机制确实精巧:一条事实被推翻,所有依赖它的结论自动失效,不用指望模型自己在几万字的对话历史里发现连锁反应。这一步是硬功夫,值得认。但它解决的只是"已知事实上怎么推理"这半个问题,没碰"事实本身是不是LLM看错了"这另一半。

如果LLM从debugger输出里把一个指针关系提取错了——比如误判某个对象被攻击者控制,Datalog引擎会在这个错误前提上给出完全自洽、逻辑无懈可击的漏洞利用链。逻辑越严密,这条错误结论看起来就越可信,反而比模糊的向量检索式记忆更危险,因为它不会像检索结果那样带着"可能不准"的暗示。Lemmalog的证明树功能(问一句"这个结论从哪来")能帮研究者审查这条链,但这只是让审计变容易了,不是让提取变准了。

  • 风险.错误的事实提取会被确定性推理放大成一条自洽却危险的漏洞利用结论,而不是被稀释掉。

Zomer自己说得很明确,这两个基准是通用记忆测试,不是漏洞研究场景,Lemmalog还没在真实的长程挖洞任务里跑出可验证的效果。对安全研究员来说,这个工具目前更像一个值得盯的原型,而不是可以直接换掉现有工作流的选项——下一步该看的不是它又添了什么Datalog特性,而是有没有人拿它真的挖出过一个CVE。