Autenticare
Engenharia Agêntica · · 7 min

生产环境中的 Memory Bank:避免客户会话间 PII 泄露的 3 种模式

Gemini Enterprise Agent Platform 的持久内存是强大的加速器,但如果没有租户隔离配置,也是无声的数据泄露向量。三种生产模式,防止一个客户的数据污染另一个客户的会话。

Fabiano Brito

Fabiano Brito

CTO, Autenticare

生产环境中的 Memory Bank:避免客户会话间 PII 泄露的 3 种模式
TL;DR Gemini Enterprise Agent Platform 的 Memory Bank 强大而危险,如影随形。若没有 tenant ID 隔离,客服智能体可能在客户 B 的会话中返回客户 A 的数据。本文记录了我们在生产环境中用于防止此类场景的 3 种模式。

Gemini Enterprise Agent PlatformMemory Bank 作为一级特性引入:智能体在会话间持久化上下文,学习用户偏好,无缝恢复中断的对话。对于保险、银行、医疗等客户服务场景,这具有切实价值。

问题在于:没有租户隔离的持久内存,就是预设的数据泄露

在多客户部署中,共享智能体存储和检索记忆。如果分区键缺失或不正确,Memory Bank 的向量搜索会返回来自其他客户先前会话的片段。模型在不发出任何警告的情况下使用这些片段完成响应。用户看到了不属于自己的数据。工程师收不到任何告警。

这不是假设性场景——这是不做额外配置时的平台默认行为。


为什么 Memory Bank 默认暴露 PII

Memory Bank 基于向量索引构建。每个条目是带有可选元数据的记忆片段。当智能体为新会话检索上下文时,它使用当前对话的语义嵌入查询索引——除非显式配置,否则不会使用身份过滤器。

语义搜索找到的是相关内容,而不是属于你的内容。在没有分区的情况下,“我的账户余额是多少?“可能返回另一个客户早前会话中问过同样问题的记忆片段。

配置良好的持久内存,是区分"会学习的智能体"与"会泄露的智能体"的关键所在。差异就在一个元数据字段。

模式 1 — 按租户划分的内存 Profile

最直接的模式:每个客户(租户)拥有自己的 Memory Profile——Memory Bank 内的隔离命名空间。智能体只在当前活跃租户的 Profile 内读写。

在 Gemini Enterprise Agent Platform 中,这意味着在所有内存操作中将 tenant_id 作为强制过滤条件传入:

# 错误 — 无租户范围
memory_bank.search(query=user_message, top_k=5)

# 正确 — 带租户过滤
memory_bank.search(
    query=user_message,
    top_k=5,
    filter={"tenant_id": session.tenant_id}
)

元数据过滤器会从搜索中排除所有不属于当前租户的片段。这不是可选功能——这是区分真实隔离与表面隔离的那条线。

适用场景: 任何多客户部署。始终如此,无一例外。


模式 2 — 按数据敏感度差异化 TTL

不是所有记忆都有相同的有效期——也不是相同的风险等级。偏好数据(沟通风格、偏好的报告格式)风险低,受益于较长的生命周期。事务性数据(查询的余额、已授权的操作)相关性窗口短,风险高。

按数据类别配置差异化的 TTL(生存时间):

MEMORY_TTL = {
    "preference":    60 * 60 * 24 * 90,   # 90 天  — 低风险
    "interaction":   60 * 60 * 24 * 30,   # 30 天  — 中等风险
    "transactional": 60 * 60 * 24 * 1,    # 1 天   — 高风险
    "pii_explicit":  60 * 60 * 4,          # 4 小时 — 关键
}

memory_bank.write(
    content=fragment,
    metadata={
        "tenant_id": session.tenant_id,
        "category": "transactional",
    },
    ttl=MEMORY_TTL["transactional"]
)

对敏感数据设置短 TTL,不仅仅是满足 GDPR 合规要求——它最小化了在隔离因 bug 被绕过时的暴露窗口。

适用场景: 任何处理金融、医疗或个人标识数据的系统。短 TTL 是深度防御的一层。


模式 3 — 带溯源的内存审计日志

模式 1 和 2 在正常条件下防止泄露。模式 3 用于检测出现问题的情况。

写入 Memory Bank 的每个片段都应携带最小审计跟踪信息:谁写入的、在哪个会话中、关联哪个租户、何时写入。在生产环境中:

memory_bank.write(
    content=fragment,
    metadata={
        "tenant_id":  session.tenant_id,
        "session_id": session.id,
        "agent_id":   agent.id,
        "written_at": datetime.utcnow().isoformat(),
        "category":   classify_pii(fragment),   # 枚举: none / low / high
    },
    ttl=MEMORY_TTL[classify_pii(fragment)]
)

有了这个日志,任何内存读取都可以被审计。当客户报告看到了他人的数据,你拥有完整的溯源能力用于调查——并证明合规性。

适用场景: 任何受监管的系统(医疗、金融、教育),其中可审计性是法律要求。


三种模式的组合

模式 1

租户隔离

在所有 Memory Bank 操作中强制设置 tenant_id 过滤器,防止客户间的跨访问。

防止泄露
模式 2

按敏感度差异化 TTL

事务性数据数小时内过期,偏好数据数周内过期。在隔离失效时最小化暴露窗口。

限制损害
模式 3

审计日志

每个片段完整的来源可追溯性。检测跨会话异常并证明合规性。

检测漏网之鱼

正在构建处理敏感数据的智能体?

Autenticare 从第一个 Sprint 起就为智能体架构设计租户隔离、可审计性和 LGPD 合规性。在上生产之前与我们的团队交流。


相关文章


主要来源:Google Cloud Blog — 介绍 Gemini Enterprise Agent Platform