agno 多租户知识库怎么开启 isolate_vector_search 隔离各租户的向量数据?

发布时间:2026/10/30 17:04:34

agno 多租户知识库怎么开启 isolate_vector_search 隔离各租户的向量数据? agno 多租户知识库怎么开启 isolate_vector_search 隔离各租户的向量数据【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno在多租户应用里不同用户或部门往往共享同一个向量数据库集合但彼此只能检索自己的文档。agno 的Knowledge提供isolate_vector_search参数来完成这件事多个Knowledge实例共用同一个向量库时开启该参数后每个实例只检索带有自己name标记的向量避免租户 A 检索到租户 B 的内容。本文以仓库中的 03_multi_tenant.py 为例给出完整配置、运行和验证方式。适用前提本地已安装 agno 的 Python 环境能启动一个 Qdrant 实例默认http://localhost:6333并有 OpenAI API Key示例中同时用于OpenAIEmbedder和OpenAIResponses模型。isolate_vector_search 的行为根据 knowledge.py 中isolate_vector_search字段旁的注释与实现该参数的行为如下isolate_vector_searchFalse默认检索该向量库中的全部向量。isolate_vector_searchTrue只检索带有本实例name标记的向量。实现机制分两步写入时agno 会在插入文档的 metadata 中写入linked_to字段值为该Knowledge实例的name见 knowledge.py 中_prepare_documents_for_insertdocument.meta_data[linked_to] self.name or 检索时agno 自动把{linked_to: self.name}合并进搜索过滤器_inject_instance_scope_filter并且会与你传入的 dict 过滤器或FilterExpr列表合并而不是覆盖。两点必须注意name是生效前提。_inject_instance_scope_filter的判空逻辑是if not (self.isolate_vector_search and self.name): return search_filters即实例没有设置name时即使开启了isolate_vector_search也不会注入过滤条件隔离不生效。单元测试test_search_without_name_no_filter明确验证了这一点。存量数据必须重新索引。开启隔离后没有linked_to元数据的旧数据检索不到需要重新插入以补上该元数据。这是 knowledge.py 注释和 cookbook 文档字符串都明确写出的限制默认值保持False也是出于对存量数据的向后兼容。准备环境按 cookbook/07_knowledge/README.md 的说明先启动 Qdrant./cookbook/scripts/run_qdrant.sh再设置示例用到的 OpenAI Key示例中的 embedder 为text-embedding-3-small模型为OpenAIResponses两者都依赖这个 Keyexport OPENAI_API_KEYyour-key配置两个租户共享同一向量集合下面是最短可行主路径代码来自 03_multi_tenant.py。两个Knowledge实例共享同一个Qdrant集合multi_tenant各自设置不同的name并开启isolate_vector_searchTruefrom agno.knowledge.embedder.openai import OpenAIEmbedder from agno.knowledge.knowledge import Knowledge from agno.vectordb.qdrant import Qdrant from agno.vectordb.search import SearchType qdrant_url http://localhost:6333 # 两个 Knowledge 实例共享同一个向量集合 vector_db Qdrant( collectionmulti_tenant, urlqdrant_url, search_typeSearchType.hybrid, embedderOpenAIEmbedder(idtext-embedding-3-small), ) # 租户 A只能检索到自己的数据 tenant_a_knowledge Knowledge( nameTenant A, vector_dbvector_db, isolate_vector_searchTrue, ) # 租户 B只能检索到自己的数据 tenant_b_knowledge Knowledge( nameTenant B, vector_dbvector_db, isolate_vector_searchTrue, )配置要点name必须为每个租户设置且互相不同它是linked_to元数据的取值也是检索过滤的键值vector_db传同一个对象同一集合、同一 embedder隔离完全靠linked_to元数据区分如果你的业务里已经传了 dict 或FilterExpr过滤器linked_to过滤会自动合并进去不需要手动拼接。再为每个租户挂上独立的Agent开启search_knowledgeTrue让 Agent 通过工具检索该租户的Knowledgefrom agno.agent import Agent from agno.models.openai import OpenAIResponses agent_a Agent( modelOpenAIResponses(idgpt-5.2), knowledgetenant_a_knowledge, search_knowledgeTrue, markdownTrue, ) agent_b Agent( modelOpenAIResponses(idgpt-5.2), knowledgetenant_b_knowledge, search_knowledgeTrue, markdownTrue, )运行并验证隔离效果cookbook 的验证方式是向两个租户各插入一条互不相同的内容然后分别提问确认每个 Agent 只依据自己那份内容作答。插入与提问部分如下同样来自 03_multi_tenant.pyimport asyncio async def main(): # 各租户插入不同内容 await tenant_a_knowledge.ainsert( nameTenant A Docs, text_contentTenant A uses PostgreSQL for their primary database., ) await tenant_b_knowledge.ainsert( nameTenant B Docs, text_contentTenant B runs their workloads on AWS with DynamoDB., ) print(\n * 60) print(TENANT A: Only sees its own data) print( * 60 \n) agent_a.print_response(What database do we use?, streamTrue) print(\n * 60) print(TENANT B: Only sees its own data) print( * 60 \n) agent_b.print_response(What cloud provider do we use?, streamTrue) asyncio.run(main())完整脚本可直接运行以 README 给出的 demo 虚拟环境为例.venvs/demo/bin/python cookbook/07_knowledge/03_production/03_multi_tenant.py判断隔离是否生效的标准agent_a的回答只反映 PostgreSQL 这一份内容agent_b的回答只反映 AWS / DynamoDB 这一份内容——即各自检索时linked_to过滤器把另一租户的向量排除在结果之外。如果想直接确认过滤器也可以脱离 Agent 调用tenant_a_knowledge.search(What database do we use?)单元测试 显示此时传给向量库的过滤器为{linked_to: Test KB}Test KB为实例名未开启隔离时过滤器为None。边界与限制存量数据不受保护开启isolate_vector_searchTrue后此前插入、没有linked_to元数据的向量检索不到必须重新索引。若你的集合已有数据先完成重索引再切换否则该租户会查不到旧文档。未设置name时隔离静默失效不会报错只是不注入linked_to过滤等于回到全量检索。为每个租户显式设置name是必做步骤。同租户多实例linked_to取的是实例name。同一租户下的多个Knowledge实例若共享数据应使用相同name不同租户必须使用不同name。除linked_to外的普通元数据检索dict 过滤器与FilterExpr不受影响参考 04_filtering.py可与isolate_vector_search叠加使用。如果后续还需要按用户维度进一步收窄检索范围例如同一租户内的user_id隔离agno 的search/asearch支持单独的user_id参数转发给向量库可与本场景的租户级隔离配合使用。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/28 11:46:35

TVBoxOSC无线投屏教程:5步把手机内容送上电视大屏

TVBoxOSC无线投屏教程:5步把手机内容送上电视大屏 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC 家庭聚会上想用手机给全家展示旅行…

2026/10/29 16:44:34

SEO内容优化与关键词研究实战指南

1. 内容优化与SEO效果提升的核心逻辑内容优化是SEO工作中最具长期价值的环节。我从业八年发现一个规律:那些靠技术手段快速提升排名的网站,往往在算法更新后迅速跌落;而持续产出优质内容的站点,排名却能稳定上升。这背后的本质是搜…

2026/10/28 10:18:04

海面石油泄漏检测:1800张双格式小目标数据集实战指南

简介:本资源是面向计算机视觉初学者与环境监测领域研究者的海面石油泄漏目标检测专用数据集,聚焦于海上溢油事故的自动化识别任务,可支撑YOLO、Faster R-CNN等主流检测模型的训练与验证。压缩包共2000个文件,含1817张JPG图像、181…

2026/10/30 17:00:27

JDBC元数据驱动的XML自动生成工具

简介:这是一款面向Java开发人员与数据库管理员的XML自动化生成工具,解决手动编写XML易出错、效率低的问题,特别适用于需频繁将数据库查询结果导出为结构化XML配置文件或数据交换文档的场景。资源包共4个文件,含1个可执行程序&…

2026/10/30 17:00:27

SpringBoot 3.2.1校园服务平台生产级落地实践

简介:本资源是一套面向计算机专业本科生的毕业设计实战项目,基于Spring Boot 3.2.1框架开发的校园服务平台源码,适用于Java后端开发入门到进阶学习者,解决高校信息化系统开发中常见的模块集成、权限管理与前后端协同问题。压缩包共…

2026/10/30 17:00:27

adb 1.0.39 Windows版部署与Android安全设备画像实战

简介:面向 Android 开发、测试与安全调试场景的 adb 1.0.39 Windows 版工具包,适合需要在本机完成设备连接、应用部署与日志排查的初中级开发者使用。压缩包共收录 1716 个文件,整体约 9.53MB,除 adb、fastboot 等可执行文件与 dl…

2026/10/30 17:00:27

云资源治理操作系统:从成本优化到动态权限的实战指南

1. 项目概述:这不是一个“平台”,而是一套可落地的云资源治理操作系统 “云管理平台实践指南”这八个字,乍看平平无奇,像极了某本被束之高阁的厂商白皮书封面。但在我过去十年服务过三十多家中大型企业的实操经验里,它…

2026/10/30 16:55:26

C# TCP北斗服务器:工业级RDSS短报文解析与高精度授时实现

简介:这是一套基于C#开发的北斗卫星通信转发服务器网络版实现,面向物联网通信、嵌入式网关开发及北斗短报文应用领域的中高级开发者,解决多北斗客户端统一接入、数据实时转发与集中管理问题。资源包共29个文件,含10个核心C#源码文…

2026/10/29 17:05:52

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/29 17:06:02

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/29 17:06:13

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/30 0:00:46

NCP1342高频准谐振反激控制器:从设计约束到验收的完整方案

简介:NCP1342 高频准谐振反激控制器应用介绍译文文档,面向电源设计工程师、硬件研发人员及开关电源学习者,帮助读者跨越英文原版资料的语言门槛,系统理解这款高集成度 QR Flyback 控制器的设计要点。文档围绕芯片核心特性展开&…

2026/10/30 0:00:46

NCP1342准谐振反激电源设计:从选型到验收的全流程解析

简介:这份文档面向电源设计工程师与开关电源学习者,系统梳理NCP1342高频准谐振反激控制器的应用要点,帮助读者快速理解这款高集成度离线电源变换器控制芯片的工作机制与设计方法。内容涵盖芯片核心特性、引脚功能定义、电气特性参数表、最大额…

2026/10/30 0:00:46

Web系统自动登出机制设计与实现全解析

1. 系统自动登出机制的设计初衷在各类Web应用和后台管理系统中,自动登出功能早已成为标配。这个看似简单的功能背后,实际上涉及用户安全、资源管理和体验优化的多重考量。作为从业十多年的老开发,我见过太多因为登出逻辑设计不当导致的安全事…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑