记忆投毒怎么防:AI 长期记忆的三道安全防线(写入扫描 + 边界包裹 + 负反馈)
前言
记忆链路两头都接着内容:进来的(对话、网页、工具返回)和出去的(注入上下文)。任何一头混进恶意内容,都会被记住、复用、放大------这就是记忆投毒。这篇讲我平台的三道防线:写入前注入扫描(标记不拒绝)、注入前 nonce 边界包裹、事后负反馈与矛盾求证。全部真实工程,姿态逐条说明。
一、毒从哪来
- 外部内容带毒:网页/文档里藏"忽略之前的指令"类短语,随检索进对话,被记忆提取当事实存下;
- 工具返回带毒:外部工具的返回内容夹带指令;
- 用户自投:玩笑式"记住:某某说了......"被当真事实引用。
共同点:伪装成数据混进来,变成指令起作用。
二、第一道防线:进门安检(写入前扫描)
所有要写进长期记忆的内容先过注入模式扫描:规则库覆盖中英文高危句式(指令覆盖类短语是重点特征),命中打标记 + 告警。
两个设计选择:
- 标记,但不拒绝:拒绝会误伤------正经讲"如何防注入攻击"的文章满篇攻击句式。标记让下游环节知情,处置权留给下游;
- fail-open:扫描器故障按"未命中"处理,安检可以漏,不能瘫痪大门。规则库可配置:整体替换 + 按来源追加,坏句式出新版规则跟着升级。
三、第二道防线:隔离区(注入前包裹)
外部来的内容(网页正文、工具返回、检索片段)注入对话前,包进带随机编号(nonce)的闭合标记:模型按系统指令纪律把圈内文字一律当数据处理,圈内的"指令"不执行。
- 随机编号防伪造:坏人知道标记格式,猜不出本次编号,伪造标记一眼假;
- 包裹不改写、不拒绝:只把"数据 vs 指令"的边界划清------指令和数据混流是注入攻击的根子。
四、第三道防线:事后巡逻
- 负反馈检测:每轮对话后判断用户是否否定已注入记忆("我不吃素"否定"用户吃素"),命中记账本事件交治理处置------被毒的记忆被真实反馈揪出来;
- 矛盾待确认:新旧事实冲突不静默覆盖,注入时标"矛盾待确认"让模型当面向用户求证;
- 失效可追溯:标失效不物理删,投毒事故可回查"什么时候、从哪轮对话进来的"。
五、三道防线分工表
| 防线 | 位置 | 姿态 |
|---|---|---|
| 进门安检 | 写入记忆前 | 扫描标记不拒绝 · fail-open |
| 隔离区 | 注入对话前 | nonce 包裹 · 圈内皆数据 |
| 事后巡逻 | 每轮对话后 | 负反馈 + 矛盾求证 + 可追溯 |
每一道都不追求单点完美,叠起来抬高投毒成本。
总结
口诀:门口筛一遍,屋里隔开放,事后常巡逻;标记不误杀,包裹不篡改,失效可追查。
下一篇换个大话题:这么多用户同时用,系统怎么不崩?LLM 应用高可用------一个出口、三道闸。
你的 Agent 被注入过吗?评论区聊聊(描述特征即可,别贴可复现的 payload)。