让大模型帮你挖漏洞,它能在两小时后把你们早就推翻的假设再拿出来当宝。
说实话,这种幻觉能让人砸键盘。
一位安全研究员受够了这种折磨。
他没去微调模型,也没去求更大的上下文窗口。
他反手写了一个基于Datalog的确定性逻辑引擎。
结果挺有意思。
不仅治好了大模型的失忆症,还把单次查询的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/