跳到主要内容

企业 RAG 治理:检索管道背后的组织架构

· 阅读需 11 分钟
Tian Pan
Software Engineer

40% 到 60% 的企业 RAG 部署无法进入生产环境。罪魁祸首几乎从来不是检索算法——HNSW 索引运行正常,嵌入质量也不错,向量相似度搜索已是成熟技术。问题发生在上下游:没有文档所有权、查询时未执行访问控制、PII 裸露在向量索引中,以及检索语料库在上线数周内就与现实脱节。这些都是治理失败,而大多数工程团队将其视为别人的问题,直到合规团队、安全审计,或某个收到了其他租户数据的用户把这变成自己的问题为止。

本文是受控 RAG 知识库的组织与技术解剖——写给拥有管道的工程师,而不是批准预算的高管。

文档所有权的真空

任何企业 RAG 系统需要回答的第一个问题看似简单:这份文档归谁所有?

在实践中,同一份文档通常以三到五个版本分散在 SharePoint、邮件归档、本地磁盘和 Wiki 中。当 RAG 系统在未建立所有权的情况下批量摄取这些版本时,检索就变得不确定——不是基于时效性或权威性,而是取决于哪个版本在嵌入空间中碰巧得分最高。2022 年的安全手册和 2025 年的安全手册会以相近的置信分数同时被检索出来,而模型无法区分二者。

解决方案是一份每份被摄取的文档在进入索引前都必须满足的元数据契约:

  • owner:负责内容准确性的具名个人或团队
  • source_system:权威来源(例如 Confluence 页面 ID,而非副本)
  • last_validated_date:最后一次由人工确认内容有效的时间
  • sensitivity_label:公开 / 内部 / 机密 / 受限
  • version:明确版本号,能够取代先前版本

这些元数据必须在摄取时附加,而不是事后补填。不支持结构化元数据字段的向量数据库会让事后治理几乎无法实现——你无法过滤无法查询的字段。

所有权不是部署时的一次性任务,而是需要明确的交接流程:当员工离职或团队重组时,其名下的文档必须在下次新鲜度审计前完成重新分配或标记复查。未被治理的文档应自动从活跃检索索引中降级,而不是悄悄留着任其腐化。

访问控制必须在检索之前执行,而非之后

RAG 安全中最危险的误解是:访问控制属于 LLM 输出层——在将结果展示给用户之前过滤响应。这是本末倒置的,并且会产生一类看起来像模型质量问题、实则是安全边界被突破的故障。

如果某份文档在源系统中对某个用户不可见,那么该文档就不应进入检索步骤。不只是不展示在输出中——而是根本不被检索。无权访问 HR 薪酬数据的用户,不应产生会落在薪酬文档附近的嵌入。在 LLM 输出之后才从结果中删除是不够的;检索本身就是暴露。

有两种实用的强制执行模式:

按租户隔离存储:为每个租户(或组织单元)提供独立的向量索引,查询在 API 层被路由到对应的索引,交叉污染在结构上不可能发生。代价是运维开销:你要管理 N 个索引而非一个,任何 schema 变更或索引重建都会乘以 N 倍。适用于租户边界清晰且租户数量有限的 B2B SaaS 场景。

多租户存储加安全修剪:所有内容共存,但每次查询都强制执行过滤。每个检索请求携带用户身份和授权上下文,在向量搜索执行之前转换为元数据过滤器。PostgreSQL + pgvector + 行级安全,或 Pinecone、Milvus 带命名空间范围的元数据过滤器,均原生支持这一模式。关键约束:过滤器必须在服务端根据身份声明构建,绝不能来自客户端提供的参数。允许客户端传入 ?access_level=restricted 来绕过安全修剪的系统根本没有安全可言。

编排器与向量存储之间的 API 层是这一逻辑的落脚点:接收用户身份、将其转换为授权谓词、执行范围内的检索、记录每次访问。没有捷径:在构建授权层之前就搭建检索函数,最终会得到一个不经全面重构就无法合规的系统。

向量索引中的 PII 是一个不同性质的问题

传统数据治理将 PII 视为带有可识别字段的记录:数据库中包含姓名和出生日期的一行数据。向量数据库存储的是嵌入——文本的稠密数值表示。PII 问题在这里有两个不同之处。

其一,嵌入保留了原始文本的语义内容,这意味着即使原始文档已设置访问控制,敏感信息也可能传播到检索层。一张包含客户病情信息的支持工单被索引进共享语料库后,在处理涉及相似语义领域的无关查询时也可能被检索出来。

其二,典型的企业语料库并非专门构建的——它是从为人类读者写就的文档中批量摄取的。人事档案、会议记录、法律往来函件、客户通信,都是候选来源。从未应该被检索的 PII 就这样进入了嵌入空间。

分层防御措施如下:

  1. 摄取前扫描:在文档进入管道前运行 PII 检测(Presidio、Amazon Macie,或本地部署的 LLM 以避免向外部 API 发送数据)。对超过 PII 密度阈值的文档进行标记或拒绝。

  2. 结构化内容的字段级脱敏:对于已知结构的文档(财务报告、HR 文件),在嵌入之前进行实体替换——用 [PERSON] 替换姓名,用 [ACCOUNT_ID] 替换账号。语义内容得以保留,识别性内容则不保留。

  3. 后检索、前 LLM 净化:在将检索到的数据块插入 LLM 上下文前,应用基于 NER 的后处理器。这是最后一道防线,而非主要控制手段——用于捕获摄取前扫描遗漏的内容。

这些防御措施只有一致执行才有意义。任何绕过扫描步骤的文档路径(部署净化器之前运行的批处理作业、来自遗留系统的迁移)都可能将原始 PII 引入索引。治理要求扫描管道不是可选项——它必须是进入索引的唯一通道。

新鲜度问题:语义相似度没有时钟

73% 的组织报告企业 RAG 部署在 90 天内出现准确性下降。原因几乎总是文档过时:检索语料库偏离真实情况的速度比任何人预想的都快。

这是因为语义相似度搜索没有时间维度。18 个月前写就的文档,如果语义内容相近,得分与上周写就的文档完全相当。检索器无从得知旧文档描述的是已被取代的政策、已废弃的 API 端点,或已停产的产品线。

简单的应对方案是定时重新索引:每晚或每周重新嵌入所有文档。这与语料库大小成线性关系,而非与变更率成正比。当 5 万份文档中只有 500 份发生了变化,重新索引全部文档约浪费了 100 倍不必要的嵌入 API 调用,且新鲜度窗口受限于调度间隔。

更好的架构是按内容的自然衰减率分类:

  • 高衰减内容(API 文档、定价、政策):最长 2–4 周复审窗口;理想情况下由源系统的变更事件驱动
  • 中衰减内容(架构指南、运行手册):季度复审;超过 6 个月未验证则标记为过时
  • 低衰减内容(基础技术论文、历史分析):年度复审;若领域稳定则可能长期有效

流式摄取——由源系统的文档变更事件触发增量重嵌入——可以彻底消除高衰减内容的批量重索引窗口。基于事件驱动架构(Kafka、Pub/Sub)构建的系统可以将文档更新近实时地传播到向量索引。

治理要求在此处是分配 SLA 所有者:由具名团队或角色负责在规定窗口内验证高衰减内容的有效性。没有明确所有权,新鲜度强制就会沦为没人响应的监控告警。

GDPR 的被遗忘权不是软删除

GDPR 中的被遗忘权要求——以及 CCPA 中的类似条款——创造了一项大多数 RAG 系统无力履行的合规义务。当数据主体申请删除其个人数据时,软删除(将记录标记为非活跃)并不满足要求。数据必须从检索索引、缓存、生成日志以及任何纳入了该数据的微调模型权重中彻底移除。

在 RAG 场景下,这意味着:

  • 向量索引:按文档 ID 或数据块 ID 删除嵌入。现代向量数据库(Pinecone、Qdrant、Weaviate、Milvus)支持按 ID 删除,无需重建完整索引。这是可恢复的路径。
  • 原始文档存储:在其起源的任何存储层删除或匿名化源文档。
  • 缓存响应:使所有引用了已删除文档的缓存 LLM 响应失效。如果你按查询哈希缓存,则需要一个从文档 ID 到查询 ID 的反向索引,以失效正确的条目。
  • 日志:生产 LLM 系统通常记录完整的输入/输出对用于调试。包含已删除内容的日志必须清洗或移除相关内容。

审计追踪要求方向相反:你必须能够证明删除已经发生。维护一份删除日志,记录删除了什么、何时删除、依据何种授权(数据主体申请参考编号),以及影响了哪些系统。删除后运行一次验证查询,确认该内容不再出现在检索结果中。

跳过这套基础设施的组织往往在最糟糕的时刻承担代价:法务收到删除申请时,工程团队不得不追查所有数据副本的去向。

构建不会在第六个月崩溃的治理模型

RAG 知识库背后的组织不是 ML 团队。它横跨数据工程(管道与基础设施)、法务合规(政策与删除)、安全(访问控制),以及各领域的主题专家(文档验证)。失败模式是当每个团队都认为 RAG 治理是别人的责任时。

企业知识库的最小可行治理结构:

文档所有者:每个内容域有具名个人或团队邮件组,对新鲜度 SLA 和移除决定承担明确责任。这些人通常不是工程师——他们是撰写或审批文档的主题专家。

摄取审核:对新文档来源或内容类别设置轻量级审批步骤,在任何内容进入索引前强制执行元数据契约和 PII 扫描。这不需要繁重的流程;对来源新增采用类似 Pull Request 的审核方式即可。

过时告警:自动监控,将临近或已超过新鲜度截止日期的文档推送给其所有者,并在所有者无响应时设置升级路径。应发送至团队邮件组,而不是悄然过期。

访问控制审核节奏:每季度审计哪些用户和角色有权访问哪些内容层级。访问授权会累积——加入 ML 团队时因原型项目获得了宽泛检索权限的工程师,往往在原型废弃后仍保留这些权限。

删除工作流:覆盖所有存储层、经过文档化和演练的流程。在收到第一份 GDPR 申请之前演练删除流程,而不是在收到时临时处理。

治理模型在上线时不需要完美。它需要足够明确,使失败可见——有人知道某份文档过时了,有人知道某次访问授权被遗漏了——并且足够有问责机制,使这些失败在累积成更大问题之前得到解决。

在第六个月崩溃的 RAG 系统,都是那些将检索基础设施视为纯技术问题的系统。语料库不是静态制品,而是一个活的知识库,需要与任何关键数据系统同等的组织纪律——因为它本来就是。

References:Let's stay in touch and Follow me for more thoughts and updates