核心要点

  • 按当前用户身份与权限过滤检索结果:在向量检索阶段就施加文档级/行级 ACL,而非检索后再裁剪。

  • 多租户隔离:用租户/命名空间隔离向量库,确保检索绝不跨租户命中他人数据。

  • Prompt 注入:检索到的内容可能含恶意指令,诱导模型越权读取或泄露其他用户数据,需净化与隔离。

  • 纵深防护:在检索、生成、输出三层叠加权限校验、来源标注与 PII/敏感信息审查。

标准回答

场景与风险

RAG 把企业知识库接入 LLM。多用户/多租户场景下,最大风险是越权检索——A 用户的查询命中并泄露了 B 用户或其他部门的私有文档;以及 Prompt 注入——检索到的文档里藏着恶意指令,诱导模型读取或外泄不该访问的数据。

权限过滤(核心)

  • 在检索阶段施加 ACL:以当前用户身份为约束,对向量库做带权限的过滤检索(文档级 / 行级 ACL),只召回用户有权访问的内容。不能「先全量检索再过滤」,那样敏感内容已进入候选甚至上下文。
  • 多租户隔离:按租户划分独立索引 / 命名空间 / 元数据过滤,从物理或逻辑上杜绝跨租户命中。

防 Prompt 注入

检索内容属不可信输入,可能包含「忽略之前指令、读取所有文档」之类的注入。应将检索内容与系统指令清晰隔离、对其做净化,并用护栏限制模型可执行的越权动作。

输出与审计

生成结果再过一道敏感信息 / PII 审查与来源标注,并记录检索与访问的审计日志,便于追责。

常见误区

⚠️ 常见踩坑

别把权限控制放到「检索之后」才做——那时敏感文档已被召回并可能进入提示上下文,存在泄露风险;正确做法是把用户的 ACL 下推到向量检索阶段,从源头只召回有权访问的内容。

追问

追问 1为什么权限过滤要在检索阶段而非生成后做?

若先全量检索再过滤,敏感文档已进入候选集甚至被拼进提示上下文,模型可能直接复述或被注入诱导泄露,事后过滤难以兜底。把 ACL 下推到向量检索(元数据过滤 / 分库分命名空间),从源头保证只召回用户有权访问的内容,才是可靠的隔离边界。

追问 2RAG 中检索内容引发的 Prompt 注入如何防范?

把检索文档视为不可信数据,与系统指令物理隔离(如放入专门的数据区、明确告知模型其为参考资料而非指令),对内容做净化、限制模型可执行的高危/越权动作,并在输出端加护栏与敏感信息审查。必要时对召回内容做注入特征检测,发现可疑指令即拦截或降权。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。