当前位置: 首页 > news >正文

RAG 系列(二十):企业级 RAG 架构设计

Demo 和生产之间的墙

前面十九篇的代码有一个共同特点:所有人共享同一个向量库,任何问题都能检索到任何文档。

这在 Demo 里没问题,但放到企业环境里会立刻崩溃:

  • 公司 A 的数据库能被公司 B 的用户查到
  • 财务数据能被普通员工检索到
  • HR 政策能被外包人员拿到
  • 一个用户疯狂发请求让系统崩溃,全公司都受影响

生产级企业 RAG 需要三层防护:

用户请求 ↓ 限流检查 —— 这个用户还在配额内吗? ↓ 缓存查询 —— 这个问题有缓存过吗? ↓ 租户路由 —— 去哪个知识库? ↓ 权限过滤 —— 在这个知识库里,这个用户能看什么? ↓ 检索 + 生成 —— 拿到被授权的内容后生成答案 ↓ 写入缓存 —— 存下来下次直接用

本文逐层实现这个架构。


第一层:多租户隔离

策略:每个租户一个 Qdrant Collection

每个客户/部门的知识库存在独立的 Collection 里,Collection 之间物理隔离——你无法在acme_corp里搜到globex_corp的内容,因为这两个 Collection 根本不在同一个向量空间里。

fromlangchain_qdrantimportQdrantVectorStorefromqdrant_clientimportQdrantClientfromqdrant_client.modelsimportDistance,VectorParams qdrant_client=QdrantClient(":memory:")# 生产用 host="qdrant-server"tenant_stores:dict[str,QdrantVectorStore]={}fortenant_id,docsinTENANT_DOCS.items():qdrant_client.create_collection(collection_name=tenant_id,vectors_config=VectorParams(size=1024,distance=Distance.COSINE),)store=QdrantVectorStore(client=qdrant_client,collection_name=tenant_id,embedding=embeddings,)store.add_documents(docs)tenant_stores[tenant_id]=store

路由逻辑也很简单——用户请求带上tenant_id,从tenant_stores里取对应的 Collection:

defget_retriever(tenant_id:str,role:str,k:int=3):iftenant_idnotintenant_stores:raiseValueError(f"Unknown tenant:{tenant_id}")store=tenant_stores[tenant_id]# 下面加权限过滤(见第二层)...

为什么不用同一个 Collection + tenant_id 字段过滤?

技术上可行,但有两个问题:

  1. 一旦过滤器出 bug,A 公司的数据就泄露给了 B 公司——一个 Collection 没有硬边界
  2. Collection 级别隔离还带来存储层面的独立(删除一个租户的数据只需要 drop 对应 Collection,干净彻底)

对于同一公司内不同部门这种"软隔离"场景,元数据过滤足够;对于不同客户这种"硬隔离"场景,独立 Collection 更安全。


第二层:权限控制

策略:文档携带 access_level,检索时注入 Qdrant 过滤器

每篇文档在 metadata 里声明自己的访问级别:

Document(page_content="年终奖:S级3个月,A级2个月...",metadata={"source":
http://www.jsqmd.com/news/840936/

相关文章:

  • 为什么你的NotebookLM总“读不懂”Nature论文?生信老炮拆解7类专业语义断层及5种Prompt工程修复方案
  • 【NotebookLM食品科研提效指南】:3天内将文献综述效率提升300%的5个隐藏技巧
  • Milk-V Duo开发板USB一线通:RNDIS网卡与ACM串口配置实战
  • 如何快速配置游戏插件:ModTheSpire完整安装与使用教程
  • Node.js调用Llama.cpp:本地部署大语言模型的完整指南
  • 智能体框架实战:基于InternLM/lagent构建可执行任务的大模型应用
  • 基于DAG的AI工作流引擎:从原理到实战构建智能自动化应用
  • 构建夜间MVP与骨场分支:快速验证系统工具原型的工程实践
  • 从SystemTap到ftrace:为什么Linux内核‘原装’的追踪工具更适合日常调试?
  • 终极指南:如何利用Play Integrity API构建专业级Android安全检测工具
  • AMD Ryzen处理器深度调试实战:SMUDebugTool完全指南
  • LyricsX:macOS歌词同步工具的终极解决方案
  • 从‘能量函数’视角重新理解Lyapunov稳定性:为什么V(x)必须是正定的?
  • 为团队统一开发环境使用TaotokenCLI一键配置各工具密钥
  • 为自动化工作流集成AI使用OpenClaw连接Taotoken
  • 别再死记硬背了!图解贪心算法:用‘小船过河’和‘区间覆盖’带你掌握核心思想
  • 2025届学术党必备的降AI率网站实测分析
  • 防爆门专业设计与现场实用方案
  • Pearcleaner深度解析:重新定义macOS应用清理的专业工具
  • GanttProject完全指南:如何用免费开源甘特图软件高效管理项目?
  • 反重力技能:提升开发效率的非常规技巧与实战指南
  • KMS_VL_ALL_AIO智能激活脚本:3分钟免费激活Windows和Office的终极方案
  • 2026 年华南输送设备源头厂家推荐:输送机 / 提升机 / 污泥破碎机 选择指南 - 海棠依旧大
  • 还在为百度网盘提取码发愁?这个智能工具让你3秒解锁任何资源
  • 终极指南:如何使用VR-Reversal将3D视频转换为2D格式
  • 法学博士论文降重+溯源双突破:NotebookLM文献脉络追踪功能(实测引用准确率98.6%,超人工校验)
  • 林调报告生成慢?文献综述耗时长?NotebookLM林业科研加速器已上线,72小时实测效率提升3.8倍
  • 崩坏星穹铁道终极自动化解决方案:三月七小助手完整使用指南
  • CareUEyes电脑屏幕护眼软件神器
  • 2026年论文人必备10款好用的降AI工具大盘点! - 降AI实验室