让大模型帮你挖漏洞,它能在两小时后把你们早就推翻的假设再拿出来当宝。

说实话,这种幻觉能让人砸键盘。

一位安全研究员受够了这种折磨。

他没去微调模型,也没去求更大的上下文窗口。

他反手写了一个基于Datalog的确定性逻辑引擎。

AI配图

结果挺有意思。

不仅治好了大模型的失忆症,还把单次查询的Token消耗硬生生砍掉了38倍。

向量数据库救不了假记忆

做漏洞研究是个长线活。

研究员发现,只要调查超过几个小时,LLM就会开始迷失。

它可能自信满满地顺着某个已经被证伪的假设继续推理。

你告诉它这步错了,它转头就忘。

市面上的主流解法是给LLM加向量数据库。

把历史对话embedding一下,用的时候再检索出来。

个人觉得这方案有个致命缺陷。

向量数据库只认语义相似,不认逻辑真假。

两小时前被推翻的错误结论,只要字面上相关,它照样能给你检索出来。

这哪是记忆,这明明是给大模型喂过期毒药。

把大模型降级为前端解析器

这位研究员换了个思路。

他干脆把LLM记忆问题,当成了程序分析里的状态维护问题。

他搞了个叫Lemmalog的引擎。

核心逻辑非常粗暴且有效。

LLM只负责干脏活累活。

看源码、读调试器输出、理解自然语言,然后把这些messy的信息转化成结构化的事实。

剩下的推导、维护、撤销,全交给Lemmalog。

这其实就是经典的Datalog逻辑编程。

定义事实,定义规则,引擎自动推导结论。

最爽的一点是,如果底层某个事实被证伪,引擎会自动把依赖它的结论全部撤销。

大模型再也不用在几万字的聊天记录里玩找茬游戏了。

跑分挺猛但差点被大模型装死坑了

光说不练假把式。

作者把Lemmalog扔进了LongMemEval和LoCoMo这两个主流记忆基准测试。

成绩相当能打。

特别是在知识更新这个类目里,Lemmalog直接登顶。

这正好对应了作者最关心的场景:旧认知被推翻后,系统该怎么更新状态。

更夸张的是Token消耗。

在LongMemEval里,给大模型塞全量上下文需要10万多个Token。

用Lemmalog维护状态,只需要2700个Token。

整整38倍的差距。

老实讲,看到这数据我差点就信了。

但作者很实诚地披露了中间的翻车日常。

有次跑分突然暴跌。

排查半天发现,大模型为了严格遵守不要幻觉的指令,直接学会了装死。

遇到需要简单计数的问题,它一看没有现成的事实,直接回答未提及。

Not mentioned.

这还不算完。

作者还发现引擎把日期当成字符串比大小。

甚至因为词干提取的bug,认为owns和own是两个词。

修完这些接地气的工程bug,分数才涨回来。

别指望它解决所有问题

当然,这套方案也不完美。

在处理复杂推理时,Lemmalog表现拉胯。

把人类那种带条件的模糊偏好强行拍平成数据库事实,必然会丢失信息。

这点我不太认同某些激进派的看法。

觉得上了结构化记忆就能一劳永逸。

事实是,大模型擅长模糊匹配,数据库擅长精确推导。

最合理的架构,应该是让两者打配合。

确定性的状态交给数据库维护,模糊的上下文和语义检索留给向量库。

折腾了一大圈,作者其实证明了一个很朴素的道理。

大模型忘记东西,很多时候不是因为上下文窗口不够大。

而是因为我们没给它一个靠谱的状态机。

与其天天卷参数和上下文长度,不如回头看看计算机科学几十年前就玩明白的数据库理论。

下一个实验,作者打算让这套系统去跑真实的长时间漏洞挖掘。

它还能保持清醒吗?

【锐评】:用几十年前的数据库理论给大模型治失忆,这波复古操作反而戳中了AI工程化的软肋。

参考链接:
https://pwning.systems/posts/llm-memory-program-analysis/