semantic-router 使用 Qdrant 作为缓存、记忆与向量存储后端:Docker/K8s 部署与 Router 配置实战指南
后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载导读本文基于开源项目 semantic-routervLLM 语义路由项目官方文档完整讲解如何将 Qdrant 源码中的底层实现逻辑。前置条件部署前需要准备Docker本机已安装 Docker 守护进程或Kubernetes 集群已配置好kubectl若选择 Kubernetes 的 Helm 安装方式还需Helm 3.x。使用 Docker 部署 Qdrant快速启动文档给出的标准做法是先创建一个共享 Docker 网络vllm-sr-network再让 Qdrant 和 Router 都接入该网络这样 Router 可以直接通过 Docker DNS 以服务名访问 Qdrant 的gRPC 端口6334而宿主机上只需要暴露 HTTP 端口用于健康检查docker network inspect vllm-sr-network /dev/null 21 || \ docker network create vllm-sr-network docker run -d --name qdrant \ --network vllm-sr-network \ -p 127.0.0.1:6333:6333 \ qdrant/qdrant:latest启动后验证 Qdrant 是否就绪curl http://localhost:6333/healthz/healthz返回{status:ok}或 HTTP 200即表示服务正常。这里6333是 Qdrant 的 REST/健康检查端口仅绑定在127.0.0.1回环地址上Router 走的是共享网络内的 gRPC 端口6334无需发布到宿主机这也避免了将向量数据库端口暴露到外部网络。带持久化的部署上面的命令未挂载数据卷容器删除后数据即丢失。官方文档提供了挂载命名卷qdrant-data到/qdrant/storageQdrant 官方镜像的默认数据目录的写法docker run -d --name qdrant \ --network vllm-sr-network \ -p 127.0.0.1:6333:6333 \ -v qdrant-data:/qdrant/storage \ qdrant/qdrant:latest开启 API Key 认证生产或共享环境应启用认证。文档演示了先用openssl生成一个随机 64 位十六进制 Key再通过环境变量QDRANT__SERVICE__API_KEY注入容器export QDRANT_API_KEY$(openssl rand -hex 32) docker run -d --name qdrant \ --network vllm-sr-network \ -p 127.0.0.1:6333:6333 \ -v qdrant-data:/qdrant/storage \ -e QDRANT__SERVICE__API_KEY$QDRANT_API_KEY \ qdrant/qdrant:latest启用认证后Router 配置中每个Qdrant 连接块都需要引用同一个 Keyapi_key: ${QDRANT_API_KEY}关键安全原则文档原文要点Key 必须保留在进程环境变量或 Kubernetes Secret中严禁把明文 API Key 写死在 Router 配置文件里当 Qdrant 服务端未开启认证时应省略api_key字段留空或省略均可见 config/runtime/response-cache/qdrant.yaml 中的示例api_key: 文档中的 Docker 示例统一使用latest镜像标签仅适合短期评估共享或生产部署应固定发布的 Qdrant 版本号或镜像 digest。网络与主机名的约定上文配置中的主机名qdrant是 Docker 在vllm-sr-network网络内的DNS 名称不是宿主机地址如果 Router 以自定义 stack 名称启动例如VLLM_SR_STACK_NAMEteam-a vllm-sr serve网络名会变为team-a-vllm-sr-network此时应将 Qdrant 挂到同名网络并把配置中的host换成对应的可解析主机名端口6334只映射到容器 gRPC 端口宿主上无需发布Router 通过共享网络直连即可。在 Kubernetes 中部署 Qdrant使用 Helm Chart文档给出的命令直接使用 Qdrant 官方 Helm Chart并显式指定了命名空间和持久卷大小helm repo add qdrant https://qdrant.github.io/qdrant-helm helm repo update helm install qdrant qdrant/qdrant \ --namespace vllm-semantic-router-system --create-namespace \ --set persistence.size10Gi--create-namespace会在安装时自动创建vllm-semantic-router-system命名空间--set persistence.size10Gi指定 PVC 容量为 10Gi。使用 StatefulSet 手动部署对于希望完全掌控清单不用 Chart的场景文档提供了完整的 StatefulSet Headless Service 组合。核心要点Qdrant 是有状态服务每个 Pod 需要独立稳定的存储因此使用StatefulSet而非 Deployment同时暴露两个端口6333REST/健康检查与6334gRPCRouter 实际使用的端口通过volumeClaimTemplates为每个副本动态申请10Gi的持久卷Service 使用clusterIP: None的Headless 模式与 StatefulSet 配合提供稳定的 Pod 身份。完整 YAML 如下文档原文完整继承apiVersion: apps/v1 kind: StatefulSet metadata: name: qdrant namespace: vllm-semantic-router-system spec: serviceName: qdrant replicas: 1 selector: matchLabels: app: qdrant template: metadata: labels: app: qdrant spec: containers: - name: qdrant image: qdrant/qdrant:latest ports: - containerPort: 6333 - containerPort: 6334 volumeMounts: - name: data mountPath: /qdrant/storage resources: requests: memory: 512Mi cpu: 250m limits: memory: 2Gi cpu: 1000m volumeClaimTemplates: - metadata: name: data spec: accessModes: [ReadWriteOnce] resources: requests: storage: 10Gi --- apiVersion: v1 kind: Service metadata: name: qdrant namespace: vllm-semantic-router-system spec: selector: app: qdrant ports: - name: rest port: 6333 targetPort: 6333 - name: grpc port: 6334 targetPort: 6334 clusterIP: None注意这个 StatefulSet 是无认证的评估示例。文档明确要求共享或生产集群必须固定 Chart 或镜像版本、通过 Kubernetes Secret 配置 API Key、在 Qdrant 与 Router 两侧同时启用 TLSapi_key/use_tls绑定、用 NetworkPolicy 限制访问并为持久卷定义备份与恢复流程。配置 Router 接入 QdrantQdrant 在 semantic-router 中承载四种能力每一类都有独立的配置块与专属字段。所有连接块都通过gRPC 端口 6334通信并共享host、port、可选api_key、use_tls四个基础字段。语义缓存Semantic Cache当请求命中相似度阈值内的历史响应时Router 直接复用缓存结果可显著降低重复推理成本global: stores: response_cache: enabled: true backend_type: qdrant similarity_threshold: 0.90 ttl_seconds: 7200 embedding_model: mmbert qdrant: host: qdrant # Service name or hostname port: 6334 use_tls: false collection_name: semantic_cache connect_timeout: 10字段说明similarity_threshold: 0.90缓存命中所需的余弦相似度阈值值越大要求越严格ttl_seconds: 7200缓存条目存活时间秒2 小时embedding_model: mmbert用于查询向量化的嵌入模型connect_timeout: 10连接超时秒。源码佐证在 qdrant_cache.go 中NewQdrantCache会将port缺省补为6334port 0时、collection_name缺省补为semantic_cache随后用qdrant.NewClient建立 gRPC 客户端并依次执行CheckConnection内部通过ListCollections探测连接见 CheckConnection 实现和ensureCollection——若semantic_cache集合不存在会以Distance_Cosine距离度量和 HNSW 参数M16、EfConstruct64自动创建集合并给request_id字段建立 Keyword 索引见 ensureCollection 实现。也就是说 Router 启动时会自动完成集合的初始化无需手工在 Qdrant 侧建集合。该配置块的完整字段结构对应源码中的QdrantConfigruntime_config.go字段包括host、port、api_key、use_tls、connect_timeout、collection_name。Agentic 记忆Agentic Memory记忆存储让 Router 在会话中携带历史事实与上下文。配置如下global: stores: memory: enabled: true backend: qdrant qdrant: host: qdrant port: 6334 collection: agentic_memory dimension: 256 # mmbert: 64, 128, 256, 512 or 768 embedding_model: mmbert default_retrieval_limit: 5 default_similarity_threshold: 0.30字段说明collection: agentic_memory记忆集合名。注意这里用的是collection而非缓存的collection_namedimension: 256向量维度。注释标明 mmbert 模型支持64、128、256、512 或 768五种 Matryoshka 维度default_retrieval_limit: 5默认检索条数上限default_similarity_threshold: 0.30默认相似度阈值。维度校验逻辑务必注意dimension必须是嵌入模型实际提供的尺寸之一。若配置了其他尺寸Router 会记录日志Failed to create memory store: … Memory will be disabled并在无记忆状态下继续运行对应 router_memory.go 中的降级逻辑。源码层面StorageDimension会先校验显式配置的维度再回退到模型默认值mmbert 默认 256若存在已准备的嵌入 Provider 则调用ResolveDimension严格校验配置的维度必须是 Provider 通告的输出维度或 Matryoshka 支持的维度之一否则直接报错见 dimension.go 与 embedding.go。阈值校准提醒文档原文要点0.30只是普通余弦检索的起点值不是校准后的数值。每个嵌入模型与向量尺寸都有各自的分值区间应根据你自己的数据用「已答复问题、无关问题、更正后的事实」三类查询分别校准阈值。集合自动初始化NewQdrantStore会以余弦距离自动创建集合HNSWM16、EfConstruct64并为user_id、project_id、memory_typeKeyword与created_atInteger四个字段建立 Payload 索引供 List/排序查询使用见 qdrant_store.go。上传文档向量存储Uploaded Document Vector Store用于对用户上传的文档做向量化检索RAG 场景global: stores: vector_store: enabled: true backend_type: qdrant file_storage_dir: /var/lib/vsr/data embedding_model: multimodal embedding_dimension: 384 qdrant: host: qdrant port: 6334 use_tls: false connect_timeout: 10 collection_prefix: vsr_vs_ metadata_store: memory字段说明file_storage_dir上传文件落盘目录embedding_model: multimodal、embedding_dimension: 384文档嵌入模型及其向量维度维度必须与模型实际输出一致否则启动校验会失败collection_prefix: vsr_vs_集合名前缀每个上传的文档/存储体对应一个以该前缀开头的 Qdrant 集合metadata_store: memory文件注册表元数据后端。当多个 Router 副本需要看到同一份上传文件清单时应改用共享的持久化元数据存储如 postgres而不是内存。源码佐证QdrantVectorStoreConfig的CollectionPrefix注释标明默认值为vsr_vs_vectorstore.goNewQdrantBackend在未显式配置前缀时也会回退到这个默认值qdrant_backend.go。backend_type的合法值由validateVectorStoreBackendType限定为memory、milvus、llama_stack、valkey、qdrant之一且qdrant模式要求vector_store.qdrant.host必填vectorstore.go。路由重放存储Router Replay Store重放能力用于记录路由决策便于审计与回放调试global: services: router_replay: enabled: true store_backend: qdrant qdrant: host: qdrant port: 6334 collection_name: router_replay启用该全局配置即打开路由器级重放策略。只有当某个决策需要覆盖捕获或保留行为时才需要额外添加路由局部的router_replay插件——详见 Router Replay 插件教程文档原文内部链接已转为仓库根目录相对路径。源码佐证重放存储工厂newStorageBackend的case qdrant分支要求cfg.Qdrant非空否则报错支持的后端为memory、redis、postgres、milvus、qdrant见 factory.go。NewQdrantStore中端口缺省补6334、集合缺省为router_replay_recordsqdrant.go。该模式还支持async_writes异步写入缓冲通道容量 100见 qdrant.go。配置参考四个 Qdrant 绑定的字段差异文档强调四个绑定都接受host、port、可选api_key、use_tls但集合字段刻意设计得各不相同切勿把一个能力的字段抄到另一个能力能力集合字段其他 Qdrant 专属字段响应缓存Response cachecollection_nameconnect_timeoutAgentic 记忆Agentic memorycollectiondimension、connect_timeout上传文档向量存储Uploaded document vector storecollection_prefixconnect_timeout路由重放Router Replaycollection_name重放 schema 中无连接超时字段启用认证时统一使用${QDRANT_API_KEY}这类环境变量引用。最终请校验完整配置而不是从某个能力复制字段到另一个能力可通过仓库中的参考配置样例对照缓存块见 config/runtime/response-cache/qdrant.yaml其中也演示了host: localhost、api_key: 、collection_name: semantic_cache、connect_timeout: 10的完整字段形态RAG 插件的 Qdrant 后端示例见 config/fragments/plugin/rag/qdrant.yaml含backend: qdrant、top_k: 5、similarity_threshold: 0.78、reuse_cache_connection: true等实用参数。生产环境加固清单结合文档与源码生产部署应至少落实以下事项固定版本Docker 镜像与 Helm Chart 均不要用latest固定发布版本号或 digest认证与密钥管理API Key 通过环境变量或 Kubernetes Secret 注入配置文件只写${QDRANT_API_KEY}形式的引用绝不落明文TLS在 Qdrant 服务端与 Router 的api_key/use_tls绑定两侧同时启用use_tls: true走加密 gRPC网络隔离K8s 场景用 NetworkPolicy 限制 Qdrant 仅对 Router 命名空间开放 6334持久化与备份使用 PVCStatefulSet 已内置并为持久卷定义备份/恢复流程多副本元数据vector_store 的多副本部署改用持久化metadata_store如 postgres避免各自维护内存注册表阈值校准记忆检索阈值按实际数据的 cosine 分值区间校准不要长期使用默认的 0.30。总结至此你已经可以通过 Docker 或 KubernetesHelm/StatefulSet快速部署 Qdrant并分别为 semantic-router 的语义缓存、Agentic 记忆、文档向量存储和路由重放四种能力配置正确的连接参数。源码层面Router 会在启动时自动完成集合创建、索引建立与连接健康检查失败时按能力降级运行这大大降低了接入成本而collection_name/collection/collection_prefix的字段差异、dimension的严格校验以及 API Key/TLS 的安全配置则是保证这套后端稳定运行的关键细节。赞分享后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载相关推荐Semantic Router 集成 Milvus分布式向量响应缓存的后端配置与运维实战Semantic Router 集成 Milvus分布式向量响应缓存的后端配置与运维实战 本指南讲解如何为 Semantic Router 接入 Milvus后端API网关模型推理服务AI Agent用 PostgresML 为 Auto-GPT 构建记忆后端向量存储与语义检索实战用 PostgresML 为 Auto GPT 构建记忆后端向量存储与语义检索实战 Auto GPT 是依赖 GPT 4 与外部软件和服务交互的开源自主 AI后端人工智能机器学习RAG向量数据库HedgeDoc 使用 WebDAV 作为图片存储后端环境变量配置与 Nextcloud 实战指南HedgeDoc 使用 WebDAV 作为图片存储后端环境变量配置与 Nextcloud 实战指南 HedgeDoc 支持将笔记中的图片上传存储到多种后端本后端前端云原生上一篇30分钟上手ADB调试用Douyin-Bot打造抖音自动化脚本下一篇React-Slingshot 终极指南InversifyJS vs TypeDI 依赖注入框架对比创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OpenSpiel 观测张量布局(observation_tensor_layout)详解:CHW / HWC 约定与张量解释实战

OpenSpiel 观测张量布局(observation_tensor_layout)详解:CHW / HWC 约定与张量解释实战

人工智能强化学习深度学习 【免费下载链接】open_spiel OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. 项目地址: https://gitcode.com/gh_mirrors/op/open_spiel 点击…

2026/10/12 1:37:53 阅读更多 →
用 ENTRYPOINT 封装命令行工具:udemy-docker-mastery 中 cmatrix 矩阵屏保镜像的构建实战

用 ENTRYPOINT 封装命令行工具:udemy-docker-mastery 中 cmatrix 矩阵屏保镜像的构建实战

示例工程 【免费下载链接】udemy-docker-mastery Docker Mastery Udemy course to build, compose, deploy, and manage containers from local development to high-availability in the cloud 项目地址: https://gitcode.com/gh_mirrors/ud/udemy-docker-mastery …

2026/10/12 1:37:53 阅读更多 →
Slang IR 参考索引导航:按家族检索 Slang IR 指令集、解读 opcode 溯源列

Slang IR 参考索引导航:按家族检索 Slang IR 指令集、解读 opcode 溯源列

编译器图形学编程语言 【免费下载链接】slang Making it easier to work with shaders 项目地址: https://gitcode.com/GitHub_Trending/sl/slang 点击查看 免费下载 本指南围绕 Slang 编译器的 IR 指令参考文档子树(docs/generated/design/ir-referenc…

2026/10/12 1:37:53 阅读更多 →

最新新闻

【深度学习新浪潮】Meta Muse 智能体:它是什么?有哪些特点?为什么突然火了?

【深度学习新浪潮】Meta Muse 智能体:它是什么?有哪些特点?为什么突然火了?

1. 引言 近期,Meta Muse 智能体在 AI 领域引发广泛关注,开发者、创作者与科技从业者纷纷展开讨论。许多初次接触者不禁疑惑:这是 Meta 推出的又一款大模型?抑或仅是蹭热度的 AI 玩具? 事实并非如此。Meta Muse 是 Meta 在 AI 智能体方向的一次战略性布局,它并非简单的对…

2026/10/12 2:24:22 阅读更多 →
Spring-boot-3 -注解 yaml配置 -日志

Spring-boot-3 -注解 yaml配置 -日志

4、核心技能1. 常用注解SpringBoot 摒弃 XML 配置方式,改为全注解驱动1. 组件注册Configuration 自定义配置类、SpringBootConfiguration 用来标注SpringBoot主启动类的Bean 可以在自定义配置类面创建对象交给ioc容器,组件在容器中的名字为方法名、Scope…

2026/10/12 2:24:22 阅读更多 →
Neuroimage: 动态功能连接方法的重测信度比较

Neuroimage: 动态功能连接方法的重测信度比较

本篇文献发表在Neuroimage杂志。所发布内容旨在与大家分享学术新知,促进交流学习版权归原作者或原出处所有,感谢各位学者的辛勤付出与研究成果。1.引言大脑的功能组织具有丰富的时空结构,可以使用功能连接指标进行探测。功能连接被定义为两个…

2026/10/12 2:24:22 阅读更多 →
page_alloc __rmqueue

page_alloc __rmqueue

__rmqueue() 是伙伴系统分配路径的核心调度器。它在持有 zone->lock 的前提下,按照碎片化风险从低到高的顺序,依次尝试不同的分配策略,直到成功或彻底失败。核心作用与策略链它的本质是一个多级降级策略链:先尝试最“干净”的方…

2026/10/12 2:24:22 阅读更多 →
游戏引擎中物理步进与动画采样的同步机制解析

游戏引擎中物理步进与动画采样的同步机制解析

1. 这不是教科书,是我在三个项目里拆过七次引擎后写下的物理与动画系统手记“游戏引擎架构深度解析(三):物理与动画系统”——看到这个标题,你大概率正卡在某个角色落地时穿模、布料抖动像癫痫发作、或者刚加完一个新关…

2026/10/12 2:24:22 阅读更多 →
产业与汇率全景分析深入分析多表格形成一篇文章

产业与汇率全景分析深入分析多表格形成一篇文章

产业与汇率全景深度分析:汇率是外生变量,产业是底层根基引言汇率从来不是孤立的数字,它是一国产业竞争力、贸易结构、资本流动、宏观政策、全球供需格局共同定价的结果;反过来,汇率波动又会重塑产业成本、订单、利润、…

2026/10/12 2:23:21 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →