2026年6月6日 1 分钟阅读

AI Agent 数据隐私新防线:用 Gate 自动脱敏 PII 信息,无需修改任何 Prompt

tinyash 0 条评论

当 AI Agent 开始查询数据库、调用内部 API 时,一个隐形问题悄然浮现——Agent 的输出中可能包含用户邮箱、手机号、身份证号等敏感信息。这些数据一旦进入 LLM 的上下文窗口,就无法追溯、无法审计、无法撤回。

本文介绍 Gate——一个轻量级、确定性的 PII 脱敏工具,通过在 Agent 工具调用链中插入一层拦截,自动识别并遮蔽敏感字段,且无需修改任何 Prompt 或工具代码。

问题:AI Agent 查询数据时,敏感信息怎么保护?

假设你的 Claude Code 连接了 PostgreSQL 数据库,让 Agent 执行 SELECT * FROM users LIMIT 5。结果是:

[
  { "id": 1, "name": "张三", "email": "zhangsan@gmail.com", "phone": "13800138000", "card_no": "6222021234567890" },
  { "id": 2, "name": "李四", "email": "lisi@company.com", "phone": "13912345678", "card_no": "6222039876543210" }
]

这些完整数据被写入 LLM 的 Token 上下文中——在模型推理、记忆写入、日志记录的过程中,每个环节都可能成为泄露点。传统方案要么依赖同义的提示词约束(”不要泄露 PII”),要么依赖数据库层面的列级脱敏(DDM),但两者都有明显缺口:Prompt 约束可以被绕过,DDM 无法覆盖 MCP 工具和外部数据库。

Gate 是什么?

Gate(62⭐, MIT, Rust)是一个确定性的隐私边界工具。它在 AI Agent 的工具调用链中插入一个拦截层——无论是通过 Bash 命令查询数据库,还是通过 MCP 协议调用工具,Gate 都能在数据到达 LLM 之前自动检测并遮蔽 PII 字段。

核心特性:

特性Gate基于 LLM 的脱敏
决策方式正则 + 列名启发式 + Luhn 校验模型推理
确定性✅ 相同输入始终相同输出❌ 每次运行可能不同
数据本地✅ 永不离开本机❌ 需发送到模型 API
延迟✅ <10ms 开销❌ 额外 API 往返
可审计✅ 每条决策可追溯至明确的规则❌ 模型推理不透明

快速上手

安装

brew tap GaaraZhu/gate && brew install gate

cargo binstall gate

初始化配置

gate config   # 打开编辑器创建 ~/.config/gate/config.yaml

扫描数据库 Schema 中的 PII 风险

连接数据库之前,先用 gate scan 评估 Schema 暴露了多少敏感列:

psql -U myuser -h localhost -d mydb \
  -c "SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'public'" \
  | gate scan

Gate 会按严重级别输出每张表的风险报告——Critical(政府 ID、金融信息)、Elevated(联系方式、姓名)、Standard(地址等),并返回 exit code 1 作为 CI 门禁信号。

注册 Hook

将 Gate 挂接到你的 Agent 工具流程中:

gate init

gate init --harness opencode

gate init --harness cursor

gate init --harness codex

gate init --harness copilot-cli

gate init --harness gemini

之后每次 Agent 发起数据库查询时,Gate 会自动拦截输出、检测 PII 字段、执行遮蔽。

同时保护 MCP 通道

如果 AGent 通过 MCP 协议的 tools/call 访问数据,可以额外注册 MCP 代理:

gate init --wrap-mcp --yes

gate init --harness opencode --wrap-mcp --yes

实战场景:脱敏用户表查询

配置完成后,当你的 Agent 执行以下查询时:

Agent: SELECT email, phone, card_no FROM users LIMIT 3

Gate 会自动拦截输出并执行两面检测——先通过列名启发式判断哪些列可能包含 PII,再对列中的具体值做正则 + Luhn 校验。Agent 最终看到的数据是:

[
  { "email": "z****@gmail.com", "phone": "138****8000", "card_no": "6222********7890" },
  { "email": "l***@company.com", "phone": "139****5678", "card_no": "6222********3210" }
]

所有决策都被写入审计日志,每条记录都指向触发遮蔽的规则:

{
  "column": "card_no",
  "rule": "luhn_check | bank_card_number",
  "action": "partial_mask",
  "confidence": 0.95
}

与现有方案的对比

Gate 不是要替代数据库层面的 DDM,而是填补 DDM 无法覆盖的盲区:

场景DDMGate
需要 DBA 权限✅ 是❌ 否
支持外部/供应商数据库❌ 不能✅ 可以(SQL、MCP 均可)
覆盖 MCP 工具调用❌ 不行✅ 通过 stdio 代理
生产数据实时性❌ 静态副本滞后✅ 实时处理
Agent 绕过防护❌ 聚合函数和 CASE 可绕过✅ Hook 层面强制拦截

局限性

Gate 的权衡在于:规则引擎无法识别非结构化文本中的 PII。如果一个评论字段包含”我的电话是 13800138000″,列名本身(comment)不是 PII 指示,但其中包含电话号码——Gate 2 版本通过值级扫描部分解决了此问题,但纯自由文本场景仍需要额外的检测手段。

总结

Gate 用不到 10ms 的延迟代价,为 AI Agent 的数据查询流程建立了一道确定性的隐私防线。它不做”可能正确”的模型推断,而是用可审计、可重现的规则确保每一次脱敏决策都有据可查。对于任何允许 AI Agent 访问数据库或内部 API 的团队来说,这是一个值得用上的安全网。

项目地址:github.com/GaaraZhu/gate(62⭐, MIT, Rust)

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。