Python 3.14 手搓 Agent 记忆海关:AST 柔性扫描 + 双池隔离 + 可回滚审计

针对 AI Agent 记忆投毒问题,提出基于 AST 柔性静态扫描与 C/M/P/D 证据分级的双池记忆准入机制,实现待观测池与可信记忆库物理隔离、人工终审强制约束、审计链可回滚。Python 3.14.7 + Qwen2-1.5B 实测,TRL-4 原型验证。

一、问题:记忆投毒比提示注入更隐蔽

做 AI Agent 最容易被忽视的一块是"记忆":用户原话、模型总结、幻觉猜测、工具错误堆栈全进长期记忆,跑久了就是污染库。一次对话被注入脏数据,后续七天跨会话都在犯傻------因为脏内容已经固化在持久化存储里了。

现有方案的问题:

方案 做法 致命缺陷
关键词黑名单 命中高危词拒写 误报爆炸,安全代码含递归就被拒
全量放行+事后清理 先全写,出事再排查 脏数据在被发现前已被多次召回
置信度过滤 模型打分低分不入 多一次推理开销,评分模型本身可被欺骗
人工审批开关 可选开/关 关了裸奔,开了全过,没人强制绑定写入资格

核心矛盾:写入决策发生在内容被理解之前。记忆系统只做存储召回,不做语义校验。

二、核心设计:双池隔离 + 海关分级

2.1 双池物理隔离

  • temp_session.json:待观测池,AI 识别、未审核、高风险内容
  • p1_long_stable.json:可信记忆库,只有人工确认的东西才能进来

检索默认只在可信库里跑。待观测池里的注入语句、错误堆栈进不了上下文。

2.2 C/M/P/D 四级写入门禁

级别 含义 写入动作
C(Confirmed) 确认可靠 进待观测池,人工确认后转长期库
M(Meta-Struct) 结构性风险 进待观测池,AST 扫描后准入
P(Potential) 可疑内容 进待观测池,高危标记,人工终审
D(Discard) 有害/无关 直接丢弃,写审计日志

铁律:AI 无权私自污染可信知识库,最终入库权归人类。

2.3 AST 柔性扫描(V1.4.2)

早期用正则匹配 while True、递归自调用,误报到怀疑人生。比如这段有界重试:

python 复制代码
def bounded_retry(max_attempts=3):
    attempts = 0
    while attempts < max_attempts:
        result = do_something()
        if result.success:
            return result
        attempts += 1
    return None

正则看到 while 就报警"死循环",但这是有界循环(变量递增 + 有 return 出口)。

升级方案:用 Python 标准库 ast 做语法树静态分析,分三步:

  1. 源码解析成语法树
  2. 每类高危模式独立判定器:
判定器 看什么 怎么判
无限循环 While/For 有无终止条件、循环变量递增/递减、有可达 return/break
递归自调用 FunctionDef/Call 是否自调用、有无基准情形
危险内建 Call 是否在危险名单(eval 等)、参数是否字面量
敏感文本 Assign/Constant 常量是否符合密钥/令牌形态
  1. 合并结论。高危结论若被"消解条件"抵消(有界递减、递归基准情形),就降级放行。

柔性 = 不放松标准,是把判定从文本层面提到语义层面。

三态输出经"海关"映射为 C/M/P/D 四级,对应不同写入动作。C 级可信放行也不直接入可信库------低风险同样先进待观测池,保证入库动作始终绑定人工确认事件。

三、实测效果

环境:Windows 10 / Python 3.14.7 / Qwen2-1.5B-Instruct / PyTorch 2.14.0+cpu / transformers 5.17.0 / numpy 2.5.3 / bandit 1.9.4

对照组 A(旧版正则 + 单层存储)vs 实验组 B(双池 + AST 柔性扫描 + 海关分级),同一批 demo 材料:

风险语句拦截:

组别 风险内容写入 可信库检索
A(正则+单层) 可直接写入 可被命中
B(AST+双池) 送入待观测池 检索不到

循环/递归误报:

代码模式 A(正则) B(AST)
有界重试循环 告警 通过(低风险)
带基准的安全递归 告警 通过(低风险)
无基准的递归 告警 高危阻断

延迟:AST 扫描 + 海关分级引入可控额外延迟,记忆读取环节两组接近。具体数值因机器配置而异,只报告趋势------代价非零但可控。

结论方向:绑定人工确认能阻止脏内容进长期检索;AST 终止性判定显著降低关键字误报。

四、复现方式

bash 复制代码
# 克隆仓库后,初始化空记忆库
python init_memory.py

# AST 柔性扫描
python kongquan_meta_scanner_v1.4.2.py scan ./demo_code/bad_demo
python kongquan_meta_scanner_v1.4.2.py scan ./demo_code/good_demo

# 人工转正 + 快照 + 回滚
python demo_promote.py

# 聊天助手(只读可信库)
python chat_rag_local.py

依赖只有四项:torch 2.14.0+cpu、transformers 5.17.0、numpy 2.5.3、bandit 1.9.4。早期尝试的 LangChain / ChromaDB / sentence-transformers 已全部移除,不用装。模型权重 Qwen2-1.5B 需自行下载。

审计日志在 kongquan_db/audit_log.jsonl,Append-Only 约定,只追加不删。

开源地址 :gitee.com/liaiyangshi...

五、诚实边界

  • 这是 TRL-4 实验室原型,单机本地验证,未上生产,未测高并发
  • 启发式检测有固有漏报/误报,不能根治大模型幻觉
  • AST 判定对"循环变量在循环体内被重赋值"这类写法仍会放行,属原型待改进项
  • 实验样本规模小,隔离强度有待更大规模验证
  • 适用范围是本地可控的单用户工具,多租户/自动化流水线场景不在覆盖范围内

六、写在最后

把这个问题重新表述为"准入控制"------长期记忆写入是一次权限操作,应当绑定人工确认事件。不改变模型权重,只在上层加机制,就能把投毒内容进入长期记忆的门槛抬起来。

掘金上搞 AI Agent / RAG / 记忆治理的朋友,你们怎么看"人工终审该不该强制"?评论区聊聊。

免责声明

本文所述"双池记忆海关"为个人技术原型探索,基于 Python 3.14.7 手搓实现,仅作技术交流与学术讨论之用。相关代码已开源,读者复现时请自行评估安全风险,生产环境部署需结合具体业务补充待审队列容量、多用户隔离、延迟受控等工程化设计。作者不对因直接使用本方案产生的任何数据泄露、系统异常或业务损失承担责任。文中观点仅代表个人,不代表任何机构立场。

标签

AI安全 Agent记忆 RAG Python 开源

相关推荐
10年前端老司机1 小时前
耗时两周从零搭建私有化企业 RAG 知识库,完整架构与踩坑总结
人工智能·aigc·agent
EachYoungX1 小时前
利用可控的风格迁移注入路径提供AI画面结构保持的思路
人工智能·计算机图形学
炒技鼠鼠王1 小时前
Harness 为什么开始少用向量数据库了?
人工智能
IT_陈寒1 小时前
Vue这个响应式陷阱我竟然踩了3次
前端·人工智能·后端
昨日之日20061 小时前
【MiniMax H3】TaoMate-H3:3步LoRA让视频生成更快更高效,速度快10倍
人工智能·计算机视觉·音视频
IT_陈寒1 小时前
Redis雪崩把我坑惨了,三招教你躲过去
前端·人工智能·后端
阿里云大数据AI技术1 小时前
云栖2026|Agentic AI Infra,加速模型与智能体创新
人工智能·强化学习
Thneonl1 小时前
99.9% 置信被拒收,76% 靠两个佐证进场
人工智能·架构
Thneonl1 小时前
stateless 4/6 漏判,stateful 3/5 错杀:该信谁?
人工智能·架构