(来源:科技行者)

设想一个场景。
一家中等规模企业里,财务部和市场部各自养了一个AI助手,两个助手共用同一个数据仓库。财务部的AI为了找出高价值客户,把客户隐私表(里面有收入信息)和交易记录表拼在一起查了一遍,算出一个结果:12400个客户ID,外加一个汇总数字。这个结果本身没有任何敏感信息,没有身份证号,没有收入数字,看起来干干净净。
于是系统很自然地把这个结果存进了共享记忆库。下一次市场部的AI问起"谁是高价值客户",系统直接把这个缓存结果递了过去。
问题是,市场部的AI从来没有被授权查看收入数据。
这个结果虽然"看起来"安全,但它的计算过程里确确实实用到了收入这个字段。换句话说,访问权限的红线,在数据被计算出来的那一刻,就已经被悄悄跨过去了,而且没有任何现有系统能发现这件事。
这不是危言耸听。这篇由独立研究者Venkata Sangaraju和SAGE7 AI的Sudhir Vissa共同完成的论文指出,这正是当前所有主流AI智能体记忆系统共有的盲区,MemGPT、Zep、A-MEM这些业界知名的框架,无一例外。
问题出在哪:大家都在看"结果",没人看"过程"
要理解这个漏洞有多普遍,得先搞清楚现在的系统是怎么做权限管理的。
几乎所有现有的智能体记忆系统,无论是MemGPT的分层存储、Zep的时序知识图谱,还是A-MEM的笔记式关联记忆,它们控制访问权限的方式都差不多:给每条记忆贴标签,标签上写着谁拥有这条记忆、它的敏感等级是什么、哪些角色可以看。请求方只要持有匹配的标签,就能拿到数据。
这套逻辑在大多数场景下管用,但它有一个致命假设:只要结果本身不含敏感内容,就是安全的。
这个假设是错的。一个数字、一个统计值,它本身当然不包含"收入"两个字,但它的计算路径里用到了收入字段,这个事实完全不会体现在最终数值上。现有系统检查的是"你能不能看这个值",却从来不检查"这个值是怎么算出来的,而算这个值所用的那些原材料,你本来能不能碰"。
打个比方。你去银行办业务,银行柜员告诉你"根据风控评估,您的额度是5万元"。这句话本身没有泄露你的工资、负债、征信记录里的任何一条具体数据。但这个"5万元"的结论,确确实实是柜员拿着你那些隐私数据算出来的。如果银行把这句"您的额度是5万元"当作一条完全无害的公开信息,随便塞进内部共享系统给没有权限查你征信的其他部门用,你会觉得这安全吗?显然不会。可现在几乎所有AI智能体记忆系统,干的正是这件事。
论文里还提到一个更隐蔽的次生问题:不同部门可能用同一个名字算出截然不同的东西。比如"流失率"这个指标,财务部按90天没有交易算流失,市场部按60天算,两边的口径根本不是一回事,可名字相同。如果没有机制去检测这种冲突,共享记忆系统会把其中一个部门的定义悄悄传染给另一个部门,这在商业智能领域有个专门的名字,叫语义漂移。
语义漂移*:不同团队对同一个业务指标采用不同计算口径,却共用同一个名称,导致数据在跨团队流转时实际含义发生偏移。
这个问题严重到什么程度?2025年,Snowflake、Salesforce、dbt Labs、贝莱德和RelationalAI五家公司联手搞了个叫"开放语义互通"的行业倡议,专门想解决这件事。但那个倡议针对的是人类分析师用的商业智能工具,不是会自己写查询语句的AI智能体。AI智能体的场景,目前还是真空地带。
AMU:给每条记忆挂一张"出生证明"
研究者们给出的解法,核心思路其实不复杂:既然问题出在"只看结果不看过程",那就把过程也记下来,并且让权限检查发生在过程这一层。
他们设计了一种新的记忆单元,叫做分析记忆单元(Analytical Memory Unit,简称AMU)。
分析记忆单元(AMU)*:一种记忆数据结构,除了存储计算结果本身,还完整记录这个结果是从哪些数据表、哪些字段、经过什么筛选条件算出来的,相当于给每条缓存结果附上一张详细的"出生证明"。
具体来说,每个AMU包含五部分信息:指标名称、计算出来的数值、是哪个部门算的、一个用于过期清理的时间戳,以及最关键的"血缘图",也就是完整记录了这个数值的来龙去脉:用了哪几张表、碰了哪些字段、用了什么过滤条件。
血缘图*(Lineage Graph):记录一个数据计算过程完整依赖链条的结构,类似于数据的"族谱",标明它的每一个"祖先"字段来自哪里。
有了这张"出生证明",检索时系统就可以做一件之前谁都没做过的事:不再只问"你有没有权限看这个值",而是问"你有没有权限看算出这个值所用到的每一个字段"。只要血缘图里出现了任何一个你没有权限碰的敏感字段,这条记忆就会被挡在门外,哪怕最终数值本身看起来人畜无害。
这就好比海关检查行李,不是只看箱子外表贴的标签写着"普通日用品"就放行,而是真的要打开箱子,查里面装的每一件东西有没有违禁品。标签可以造假或者遗漏,但打开箱子逐件检查,只要检查是彻底的,就很难蒙混过关。如果海关只信标签不开箱,会发生什么?走私者只需要在外面贴一张干净的标签就能蒙混过关,这正是现有记忆系统的处境。
这套机制真的能防住泄露吗:一个"条件性"的数学证明
研究者没有止步于"设计了一个看起来合理的机制",他们给出了一个形式化证明,论文里称为定理一。
这个证明的逻辑其实很直白。检索算法只有两条出口路径:一条是从历史缓存里找到一个安全的候选结果直接返回,另一条是缓存里没有安全选项,就让请求方在自己权限范围内现算一个新结果。证明逐一分析了这两条路径:第一条路径上,能被返回的候选必须通过"血缘图里的敏感字段都在请求方权限范围内"这道检查,否则根本走不到返回那一步;第二条路径上,新算出来的结果本来就是请求方自己权限范围内跑出来的,自然不会越界。两条路径都安全,意味着整个系统是安全的。
但研究者非常坦诚地强调了一点:这是一个条件性的设计正确性结论,不是一个经验发现。
什么意思?这个证明的前提是"血缘记录必须完整",论文里管这个前提叫"完整血缘假设"。如果血缘记录有遗漏,比如系统没发现某次查询其实碰过敏感字段却漏记了,那么这道检查就形同虚设,证明不成立。
这就像一份完整准确的病历才能让医生做出正确诊断。如果病历里漏记了病人对某种药物过敏,医生再专业再谨慎,也可能因为信息不全而开出危险的处方。证明的严谨性再高,也架不住底层数据输入的残缺。研究者自己做了实验来验证这一点,后面会讲到,结果相当发人深省。
代价有多大:13.8微秒和13个百分点
任何安全机制都有代价,问题是代价是否划算。
研究团队搭建了一个纯Python的离散事件模拟器,刻意剥离了大语言模型推理、网络延迟这些会引入噪声的因素,只专注测量核心机制本身的表现。他们对比了三种系统:完全不用共享记忆(零泄露但也零复用)、朴素的内容门控共享记忆(代表现有系统)、以及他们提出的血缘感知方案。
在一个包含三个部门、五张表的合成场景里,朴素共享记忆的跨部门泄露率是18.8%。换成更贴近真实业务场景的TPC-H标准测试集(八张表,更密集的连接关系),这个数字涨到了25.5%。而血缘感知方案在两种场景下都是0%泄露,这个0%,正是上面那个数学证明在起作用,而不是什么意外的好运气。
防护不是没有代价的。血缘感知方案的记忆复用率从95.8%掉到了81.5%到82.6%之间,相当于每100次请求里,有大约13次原本可以直接复用缓存结果,现在必须重新计算一遍。
这笔账划算吗?研究者给出了一个参照:IBM 2025年的数据泄露成本报告显示,一次数据泄露平均成本高达444万美元,美国本土更是达到1022万美元。用13个百分点的计算成本,换取彻底堵住一个18.8%到25.5%的结构性泄露渠道,这笔交易看起来相当值。
更关键的是,这道权限检查本身的开销小到可以忽略。研究团队在一台配置并不算顶级的虚拟机上实测,单次检查只需要0.09微秒,这是百万分之一秒的量级。就算是最坏情况,记忆库里堆了50条候选记录全部要挨个检查,总耗时也只有13.82微秒。相比之下,一次真实的数据库分析查询,耗时通常是几毫秒到几秒,差了两到三个数量级。换句话说,这道安全闸门几乎不会被用户感知到,它慢的地方不是闸门本身,而是闸门拦下来之后需要重新跑一遍查询。
血缘记录不完整会发生什么:从"滴水不漏"到"形同虚设"
前面提到证明成立的前提是血缘记录完整,研究者专门设计了一个实验来测试,如果这个前提被打破,情况会恶化到什么程度。
他们定义了一个"完整度"指标,表示每一步计算中有多少比例的字段被正确记录下来,取值从0到1。然后故意让系统"健忘",只记录一部分血缘信息,同时用一个影子存储悄悄记下真实的完整血缘作为对照,以此测量真实的泄露情况。
结果相当直观。当完整度只有50%时,防护基本形同虚设,合成场景下泄露率是16.3%,TPC-H场景下是10.3%,几乎跟完全不设防的系统差不多。完整度提升到75%到90%区间后,泄露率才骤降到0%,达到理论证明里承诺的效果。
更值得玩味的是,两种场景需要的完整度门槛不一样:合成场景75%就够了,TPC-H需要到90%。研究者的解释是,TPC-H里敏感字段分散在更多的连接步骤中,连接越深,血缘记录出错或遗漏的机会窗口就越大。
这就好比你让两个人分别传话。一条消息只经过一个人转达,哪怕这个人偶尔漏记一两个字,大概率意思还在。但如果消息要经过五个人接力传递,每个人都有一点点遗漏概率,传到最后,关键信息完全走样的概率会大幅上升。连接步骤越多,相当于传话链条越长,对每一环记录准确性的要求就必须越高。
基于这个发现,研究者给出了一个明确的实践建议:血缘记录完整度至少要做到90%,而且最好不要依赖AI智能体自己老老实实汇报它用了哪些字段,而是用自动化手段在数据库驱动层把查询语句拦截下来,自动解析提取。原因很朴素,自我汇报这件事很难审计,一旦智能体生成的查询变得复杂,自我汇报的遗漏率会在毫无预警的情况下飙升,而且往往恰恰是在最需要精确记录的复杂多表连接场景下出问题。
指标冲突检测:三种探测器,各有各的盲区
除了防泄露,论文还要解决前面提到的"语义漂移"问题:两个部门用同一个名字算出不同的东西,怎么自动发现?
研究者设计了一个"定义指纹"机制,给每个指标的计算逻辑生成一个哈希值,只要用到的表、字段、过滤条件有任何不同,指纹就会不一样。写入新记录时,系统会自动比对同名指标在不同部门之间的指纹是否一致,不一致就标记为潜在冲突,提交给人工复核,但不会阻断写入。
他们最初用10对手工标注的案例测试了三种探测器,其中一种叫"列关系图"的探测器表现堪称完美,F1分数拿到满分1.00。F1分数*:综合衡量一个检测方法"查得准不准"和"查得全不全"的指标,取值0到1,越接近1越好。
但当研究者把测试集扩充到43对,涵盖真实冲突、阈值变更、逻辑运算符改变(比如把"且"换成"或")、字段子集变化四类场景后,这个原本满分的探测器直接翻车,F1掉到0.833,而且在8个"逻辑运算符改变"的案例里全部漏判,一个没抓到。
原因也好理解,这种探测器只盯着用了哪些字段,完全不管过滤逻辑本身的变化。把"收入大于2万且最近90天有交易"改成"收入大于2万或最近90天有交易",字段集合一模一样,但这两句话表达的业务含义天差地别。
这个发现本身也是一个提醒:小样本测试集很容易营造出"效果完美"的假象,真正的边界情况往往要到样本量变大之后才会暴露。研究者对此毫不讳言,这也是整篇论文里比较难得的坦诚之处,拿着自己最初还算满意的结果,主动扩大测试规模,然后承认发现了此前没人报告过的盲区。
真实世界里跑一遍:九轮对话,零泄露
前面所有实验都建立在一个假设之上:血缘记录是完整的。那么现实中怎么保证这件事?
研究者搭了一个小规模的真实场景验证:用开源的LangChain框架加本地部署的Ollama模型,驱动四个部门的AI智能体(财务、销售、运营、人力资源)在经典的Northwind示例数据库上跑真实查询,同时用一个叫sqlglot的纯Python SQL解析工具,在每条查询语句执行前自动把它的语法树拆解出来,自动提取用到的每一张表和每一个字段。
这个设计的巧妙之处在于,智能体完全不需要"自觉"汇报自己用了什么字段,因为它压根不需要主动声明任何东西,血缘信息是从它实际执行的SQL语句里被动抽出来的。这就杜绝了因为智能体"偷懒"或者"记错"而导致的遗漏。
九轮跨部门交互跑下来,零泄露。五次全新计算,四次成功从缓存复用,两次因为检测到指标定义冲突而被挡下,而且这两次阻断精确对应着系统自动识别出的两起真实语义冲突,没有一次是误报。
这当然只是一个九轮对话规模的概念验证,远算不上大规模生产级验证,研究者自己也反复强调这一点。但它至少证明了一件事:自动化血缘提取这条路是走得通的,不需要依赖智能体自身的配合。
这套机制管不住什么:八大威胁里的明显短板
研究者没有把这个机制包装成万能药,他们专门列出了一张八项威胁清单,老老实实标注哪些问题这套机制能解决、哪些只能缓解、哪些完全管不了。
机制能直接解决的,是开篇提到的两个核心痛点:缓存结果里暗藏敏感字段的泄露,以及同名指标口径不一致的问题。能部分缓解的,包括策略更新后旧缓存数据过期失效的问题、血缘记录被恶意伪造或遗漏的问题。这些问题之所以只能部分解决,共同原因是它们都依赖"血缘记录的完整性和真实性"这个前提,自动化提取能让情况好转,但不能彻底根除风险。
完全管不了的,研究者特别点出了一个他们认为是生产环境里最棘手的缺口:推断攻击。也就是说,如果某个衍生特征在计算时偷偷用了敏感字段,但没有在任何地方明确声明这种依赖关系,这个机制就毫无察觉。举个例子,用收入数据算出一个风险评分,如果这个计算过程没有被系统追踪到,风险评分这个数值本身看起来跟收入毫无关系,但它实际上携带了收入信息的影子。
这就好比你把一张写满隐私信息的纸烧成灰,然后告诉别人"这堆灰烬不是隐私信息"。从物理形态上看,灰烬确实不再是那张纸,但如果有人有办法从灰烬的化学成分反推出原始内容,那这堆"看起来无害"的灰烬依然是危险的。技术上能不能做到灰烬反推内容是另一回事,但这个类比说明的是:形态的转变不代表信息的消失,而现有机制恰恰只能追踪"显式声明"的转变路径,对隐式的、没有被记录下来的信息泄漏束手无策。
另外两类完全无法覆盖的威胁是跨多次查询的组合推断(单独看每次请求都合规,但把多次安全的结果拼在一起就能反推出不该知道的信息),以及内部人员直接攻击存储系统本身。这些问题需要差分隐私这类更上游的技术手段,或者可信基础设施和审计日志这类组织层面的管控,不是一个记忆层的访问控制机制能单独扛下来的。
写在后面
读完这篇论文,我最大的感触不是某个具体的算法设计,而是研究者反复强调的那句话:这是一个条件性的设计正确性结论,不是一个经验发现。
这句话背后藏着一种少见的克制。很多论文拿到一个漂亮的数学证明后,恨不得把它包装成"颠扑不破的安全保证",但这篇论文一直在提醒读者:证明的威力完全取决于那个前提假设"血缘记录完整"能不能在真实世界里站得住脚,而实验三那个从0%到16.3%泄露率的断崖式变化,恰恰是在用数据狠狠地提醒读者,这个前提远没有听起来那么容易满足。
另一个让我意外的细节,是论文里那张写满"?"和"?"的系统对比表。MemGPT、Zep、A-MEM这些业内知名度很高的框架,在"列级血缘追踪"这一栏全部是叉号。这不是说这些系统设计得不好,它们在各自要解决的问题上确实做得很出色,而是说"追踪数据是怎么算出来的"这件事,在整个领域里几乎是一片无人涉足的空地。一个已经被广泛部署、被大量企业采用的技术方向,底层居然存在这样一个结构性的盲区,这件事本身比论文提出的解决方案更值得玩味。
还有一点值得单独拎出来说,研究者在论文里专门加了一段,交代了所有对比系统各自所处的同行评审阶段。有的发表在顶会上,有的只是厂商博客文章,有的连公开技术报告都没有。研究者坦承自己无法独立验证这些系统的性能数据,只能比较"这些系统自己声称的设计特性"。这种近乎较真的严谨姿态,在一篇安全相关的论文里显得格外珍贵,毕竟过度承诺安全保证的边界,本身就是一种治理风险,这句话是论文原话,也是我读完最想转述给所有做安全系统设计的人听的一句话。
如果血缘记录永远不可能做到百分之百完整,这道防线到底该建在哪一层,才能既不拖垮系统性能,又不给隐式推断攻击留下可乘之机?
Q&A
Q1:分析记忆单元(AMU)到底解决了什么问题?
A:它解决的是AI智能体共享记忆时的隐形泄露问题。传统系统只检查缓存结果本身有没有敏感内容,AMU则会追溯这个结果是用哪些数据字段算出来的,只要计算过程碰过请求方没有权限看的字段,哪怕最终数值看起来无害,也会被拦截,不予返回。
Q2:这套血缘感知机制会不会让系统变得很慢?
A:几乎不会。实测中单次权限检查只需要0.09微秒,哪怕是最坏情况下检查50条候选记录,总耗时也只有13.82微秒,比一次真实数据库查询的毫秒到秒级耗时快了两到三个数量级,用户基本感知不到延迟。
Q3:这套机制能百分之百防住数据泄露吗?
A:不能。它的安全保证建立在"血缘记录完整"这个前提上,研究者实验证明,如果记录完整度低于75%到90%,防护效果会大打折扣。而且它对"衍生特征隐式携带敏感信息但未被记录"这类推断攻击完全无能为力,需要配合其他手段使用。











