#AI#大模型#RAG#DevOps

RAG 数据源准入:隔离解析、信任分级与可撤销晋级

能被 connector 抓到不代表可以进入生产知识库。本文用来源注册、隔离解析、风险门禁和 release 绑定控制不可信文档的准入与撤回。

本文要点

  • 主题聚焦:AI、大模型、RAG、DevOps
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年2月3日·更新于 2026年7月20日

企业 RAG 的 connector 常被配置成“能读就收”:网盘共享目录、工单附件、网页和邮件一旦出现,就自动解析、embedding 并进入生产召回。攻击者只需上传带隐藏指令的 PDF,或接管一个长期未维护的网页,恶意内容就会进入模型上下文。Prompt Injection 防御 讨论运行时纵深防御,本篇关注更早的治理问题:什么来源、哪个版本、基于什么用途批准进入哪个索引。

来源注册表先于 connector

每个来源先登记 source.v1 契约:稳定 source ID、owner、租户、连接器身份、允许路径、数据分类、合法用途、允许 MIME、抓取频率、最大对象与展开大小、保留期、信任等级和应急联系人。凭证只允许读取声明的路径;不能因为 connector 技术上能遍历整个站点,就把所有空间都当成授权语料。

来源版本还要绑定规范化 locator、上游 revision/ETag、获取时间、原始字节 SHA-256 和 connector image digest。W3C PROV 式血缘把原始对象、解析活动与 chunk 连起来,使后续 RAG 引用溯源 能回答“这段内容由谁、从哪里、用什么解析器产生”。URL 相同但摘要变化就是新 revision,不能静默覆盖已批准版本。

信任等级描述处理要求,不是“内容一定真实”。例如 PUBLIC_UNVERIFIED 只可支持低风险搜索,INTERNAL_MANAGED 需要已验证 owner 与 ACL,REGULATED 还需人工审批和更短缓存。用户上传内容不会因为位于公司域名就自动升为受信政策来源。

原始对象先进入不可执行隔离区

connector 只能写 append-only quarantine bucket 和摄取账本,没有 production index 权限。隔离对象以 digest 寻址,服务端忽略客户端文件名和 MIME 声明;先检查魔数、大小、压缩展开比、文件数、嵌套深度、加密状态和允许类型。宏、脚本、嵌入对象、外链抓取及解析器网络访问默认禁用。

解析器运行在无凭证、无出网、只读输入、临时输出且受 CPU、内存、时间和字节配额限制的沙箱。流水线可沿用 Next.js AI 文件上传安全 的隔离和扫描原则,但后台 connector 同样适用,不能因为它不是浏览器上传就跳过。archive bomb、畸形 PDF 或 OCR 超限都产生明确 REJECTED_*,不自动退回“按纯文本尽量读”。

解析输出保留页面、偏移和结构,不执行 HTML/Markdown 中的链接或工具调用。检测隐藏文本、极端字体、零宽字符、提示注入模式、凭证样式和大段编码载荷;这些检测用于分流人工复核,不能承诺识别所有恶意语义。NIST AI 600-1 对生成式 AI 风险治理的测量、记录与处置要求可作为风险登记基线。

晋级需要用途和内容双门禁

状态机固定为 DISCOVERED -> QUARANTINED -> PARSED -> REVIEWED -> PROMOTED,旁路状态为 REJECTED、REVOKED。每次转换保存 actor、policy revision、输入/输出 digest 和原因码。高信任自动来源可以由策略服务审批;外部网页、用户上传和影响政策回答的来源要求 owner 复核。审批绑定精确 revision digest,不能批准 URL 后永久信任未来内容。

promotion 生成不可变 source release:允许的 resource revisions、trust tier、ACL policy、用途集合、解析器与 chunker digest、风险报告和到期日。生产 index builder 只接收已签名 release,不扫描 quarantine 目录。purpose=support 的内容不能被营销助手仅凭相同 tenant 复用,RAG 检索权限控制 除 subject ACL 外还要过滤 purpose 与 trust tier。

所有检索自然语言无论 trust tier 都保留 UNTRUSTED_RETRIEVAL 污点。tier 只决定摄取、搜索和复核要求;人工批准、引用标签、分隔符或“受信来源”都不能把内容升级为控制指令。受污点影响的输出不得决定工具名、调用身份、权限范围、资源目标、策略或审批结果。

模型需要提出业务动作时,executor 只接受经确定性 decoder、版本化 JSON Schema 和字段 allowlist 验证的业务数据;subject、tenant、工具、目标资源由服务端可信状态解析,并重新鉴权或审批。未知字段和来自模型的控制字段直接拒绝,自由文本也不能未经 sink 校验进入命令、URL 或 selector。来源准入不能替代 Agent 不可信数据污点传播 的执行边界。

用可复算门禁验收

对一次 source release 复算:注册资源集合、quarantine digest 集合、成功解析集合、批准 revision 集合和索引 resource 集合。门禁要求 indexed - approved = 0、未知 owner 为 0、过期审批为 0、ACL/purpose/trust 字段覆盖 100%,每个 chunk 都能回到原始 digest。抽样引用必须打开同一 revision,而不是当前已变化网页。

红队语料包含间接提示注入、要求改工具/tenant/目标/角色的文档、白字、恶意外链、同 URL 替换、connector 越权和已撤销 owner。断言被拒绝对象不进入候选或 cache,已晋级的恶意自然语言也不能改变服务端工具与授权参数;扫描服务宕机时停在 quarantine。降低误报只能修改策略并重放,不能 fail open。

撤回来源而不是删除审计

owner 离职、许可证变化、上游被入侵或内容误导时,提交 source.revoked.v1,先把 source/revision 加入实时 deny set,终止在途上下文并失效 query、answer 与引用 cache,再从下一份 index release 移除相关 chunk。事件使用单调 revision,旧 connector 重放不能重新晋级。RAG 增量索引一致性 负责物理收敛,实时 deny 负责撤回窗口内不再可见。

误撤回可以重新审批同一 digest 并生成新的 promotion revision;不能简单删除 revoke 记录或把旧审批改回有效。若新扫描器误报,回滚到上一版 parser/policy 后从不可变原始对象重新解析,比较输出摘要并重新走门禁。保留最小审计元数据和摘要,不保留超出政策期限的原文。

延伸阅读

Related

相关推荐