面试到了最后一关,老周把同一份经营分析报告放到我面前。
普通员工能看行业数据,主管还能看成本分析,管理层才有权限看利润预测。员工今天调岗,明天权限又会变化。
“你的 RAG 怎么保证从检索到生成,全程不越权?”
老周追问:“同部门不同职级呢?同一篇文档不同章节呢?员工调岗要不要把全库重新向量化?他把多份低权限材料拼起来,推导出一条高权限结论呢?”
部门标签只能做最粗的一道门,企业权限必须贯穿整条 RAG 链路。
权限不能散落在 Prompt 和几张文档标签里。我会对接统一权限中心,实时拿到用户的租户、组织、角色、密级、地域、项目和临时授权,再计算本次请求允许访问的资源集合。
授权粒度要跟内容最小安全边界一致。同一文档不同章节权限不同,就在切片级绑定资源 ID 与 ACL,而不是整篇文档共用一个部门字段。切片时保留 parent_id,但扩展父块和相邻块时必须再次检查权限,不能因为命中了一小段,就把整个章节带回来。
复杂场景可以采用 RBAC 角色权限配合 ABAC 属性规则:角色解决常见岗位,部门、密级、地域、时间和临时项目授权解决动态条件。
第一道门放在召回前。查询索引时就带上授权条件,让无权限切片根本进不了候选池。这既降低泄露风险,也避免越权内容影响排序。
第二道门放在召回后。对 Top K、父子块扩展结果和缓存内容按当前权限再次复核,防止索引延迟、缓存过期或关联扩展绕过前置过滤。
第三道门在生成输出前。只允许模型引用本次授权证据,逐项校验引用和关键结论;发现内容无法回到允许的证据,直接删除、脱敏或拒答。不能只在 Prompt 里写一句“不要泄露”,因为大模型不是权限系统。
权限信息不应该焊死在 Embedding 里。内容向量负责表达语义,资源 ID 与 ACL 负责授权。员工调岗时更新权限中心和过滤索引,主动失效权限缓存,就能让变化秒级生效,不必重切文档、重算全库向量。
用户诱导模型复述隐藏内容,或者通过多轮对话拼接敏感结论,也要单独防守:识别高风险意图,隔离文档里的指令与数据,限制跨权限域综合,对异常查询和连续拒答做审计告警。
最关键的是 Fail Closed。权限中心超时、身份不明或规则无法计算时,只能返回公开内容或直接拒答,不能为了可用性临时放开内部文档。企业安全里,宁可少答一次,也不能多泄露一句。
上线后还要监控越权拦截量、权限同步延迟、缓存失效率和输出校验命中率,并保存“谁在什么时间基于哪些证据得到什么答案”的审计链路。
“企业 RAG 权限不能只靠部门标签。我会对接统一权限中心,用 RBAC 加 ABAC 计算用户当前授权,并把 ACL 绑定到切片级资源。召回前按权限过滤,召回后对候选、父子块和缓存再次复核,生成前只允许引用授权证据并做输出校验。权限与内容向量解耦,调岗只更新权限索引和缓存即可实时生效;同时防多轮诱导与跨域推导。权限中心故障时 Fail Closed,只返回公开内容或拒答,并保留完整审计日志。”
第一篇讲完整链路,第二篇把文档切成完整证据,第三篇用混合检索把证据找回来,第四篇处理版本冲突、引用与拒答,第五篇用权限门禁守住企业数据。模型只是最后一个环节,前面每一关都决定了答案能不能被信任。
我说,RAG 真正难的从来不是“接一个向量库”,而是让资料可治理、检索可解释、证据可追溯、答案可拒绝、权限可审计。能把这五件事做成闭环,才算从 Demo 走到生产。
✍️ 我是阿锦
我会持续分享 AI 工具和 AI coding 的实操——不讲空话,用实践带你看更真实的东西。
觉得有用,点个赞、转给也在折腾 AI 的朋友,就是最大的支持。想看啥?评论区告诉我——下一篇,就是为你而探索。
想常来一起聊 AI,点下左下角 关注,回复 交流 就行。