RAG-向量数据库Milvus
Milvus是开源的分布式向量数据库非常适合大规模的向量检索场景优点高性能检索、弹性扩展、生态完善官网的Milvus高度解耦的系统架构图基本概念以下介绍下向量数据库的基本概念以便快速了解。想要深入研究请看官网https://Milvus.io/docs/zh/create-collection.md数据库Database数据库是组织和管理数据的逻辑单元。你可以创建多个数据库为不同的应用程序或租户从逻辑上隔离数据集合(Collection)向量数据存放的容器相当于数据库中的表所有向量按照业务存储在collection里每个collection有固定的Schema结构增删改查都在collection上操作字段Field相当于mysql表中的列一个集合有主键字段必须向量字段必须指定维度dim其他标量字段int/string/bool等实体Entity一行数据、有主键ID向量标量字段向量Vector浮点数组如[0.1, 0.2, 0.3, …, 0.768]。由模型BGE把文本、图片、音频转成特征表示。常见维度768、1024、1536分区Partition分区是集合的子集对集合做数据分组。当创建一个集合时默认会创建一个**_default 的**分区。如果不增加其他分区插入到集合的实体数据都会进入默认分区。创建分区会加快查询缩小扫描范围索引Index快速检索结构没有索引全表遍历很慢有了索引加快搜索速度FLAT: 暴力全比对向量最准但最慢适合小数据官方例子#建立索引 ndex_params.add_index( field_nameyour_vector_field_name, # 要给哪个向量字段建索引表中的向量列名 index_typeFLAT, # 索引类型FLAT index_namevector_index, # 给索引起个名字 metric_typeL2, # 相似度计算方式L2距离 params{} # FLAT 不需要任何额外参数 ) #在索引上搜索 res MilvusClient.search( collection_nameyour_collection_name,# 集合名称就是你存向量的“表名” anns_fieldvector_field, # 向量字段名表里存向量的列名 data[[0.1, 0.2, 0.3, 0.4, 0.5]], # 要查询的向量你拿这个向量去搜相似的 limit3, # 返回最相似的前 3 条结果TopK search_params{params: {}} # FLAT 索引不需要额外参数 )IVF_FLAT: 先将向量聚类分桶再查桶快、常用。解释如果把向量比做成书籍的话。这个算法IVF就是通过K-Means将书籍进行归类分区把书籍放在不同的书架。具体会划分多少书架得看设置的nlistnlist是多少就会将书籍划分成多少个书架。所以在进行向量检索的时候只需要检索相近的几个分区就能快速的找到向量了。设置nprobe,nprobe代表检索相近几个分区。FLAT则是完整保存向量不压缩比对距离时是精准原始计算没有精度损耗。官方例子#建立索引 index_params.add_index( field_nameyour_vector_field_name, # 要给哪个向量字段建索引表中的向量列名 index_typeIVF_FLAT, # 索引类型IVF_FLAT index_namevector_index, # 给索引起个名字 metric_typeL2, # 相似度计算方式L2距离 params{ nlist: 64, # nlist 越大则分区越多单个分区数据少检索速度快nlist 越小单个分区的数据就越大检索的速度不快 } ) #在索引上搜索 search_params { params: { nprobe: 10, # nprobe越大则检索越准确但是检索慢nprobe越小则检索越快但是容易漏掉结果 } } res MilvusClient.search( collection_nameyour_collection_name, # 集合名称 anns_fieldvector_field, data[[0.1, 0.2, 0.3, 0.4, 0.5]], # 查询向量 limit3, # 返回 Top3 search_paramssearch_params )IVF_SQ8: 对向量压缩省内存精度略降解释在分区的逻辑上和IVF_FLAT一样唯一的区别是对向量进行了高强度压缩只保留核心特征丢掉了微小的细节。所以这种索引节省了大量的内存空间官方例子#建立索引 index_params.add_index( field_nameyour_vector_field_name, # 要给哪个向量字段建索引表中的向量列名 index_typeIVF_SQ8, # 索引类型IVF_SQ8 index_namevector_index, # 给索引起个名字 metric_typeL2, # 相似度计算方式L2距离 params{ nlist: 64, # nlist 越大则分区越多单个分区数据少检索速度快nlist 越小单个分区的数据就越大检索的速度不快 } ) #在索引上搜索 search_params { params: { nprobe: 8, # 检索相近分区的数量 } } res MilvusClient.search( collection_nameyour_collection_name, anns_fieldvector_field, data[[0.1, 0.2, 0.3, 0.4, 0.5]], limit10, search_paramssearch_params )HNSW: 基于图结构查询最快精度最高耗内存解释: 每个向量都与其他向量相连组成一个超大的关系网络图多层立体地图。向量完整原始保存不压缩不分区。向量检索通过地图进行跳跃查找。官方例子#建立索引 index_params.add_index( field_nameyour_vector_field_name, # 要给哪个向量字段建索引表中的向量列名 index_typeHNSW, # 索引类型HNSW index_namevector_index, # 给索引起个名字 metric_typeL2, # 相似度计算方式L2距离 params{ M: 64, # :每个节点可连接的最大邻居数量 efConstruction: 100 # 索引构建过程中考虑连接的候选邻居数量 } ) #在索引上搜索 search_params { params: { ef: 10, #搜索时要考虑的邻居数量 } } res MilvusClient.search( collection_nameyour_collection_name, anns_fieldvector_field, data[[0.1, 0.2, 0.3, 0.4, 0.5]], limit10, search_paramssearch_params )SCANN: 平衡速度与精度高召回场景用解释结合了以上IVF、SQ8、HNSW的优点先像IVF一样划分大区、粗分区先大范围缩小搜索范围再像SQ8一样局部向量压缩控制内存最后像HNSW一样在分区内部搭建小型邻居网络图精细快速检索官方例子#建立索引 index_params.add_index( field_nameyour_vector_field_name, # 要给哪个向量字段建索引表中的向量列名 index_typeSCANN, # 索引类型SCANN index_namevector_index, # 给索引起个名字 metric_typeL2, # 相似度计算方式L2距离 params{ with_raw_data: True, # 是否在存储量化表示的同时存储原始向量数据。 } ) #在索引上搜索 search_params { params: { reorder_k: 10, # 在重新排序阶段要细化的候选实体数量 nprobe: 8 # 要搜索的分区 } } res MilvusClient.search( collection_nameyour_collection_name, anns_fieldvector_field, data[[0.1, 0.2, 0.3, 0.4, 0.5]], limit10, search_paramssearch_params )DISKANN: 磁盘级图索引向量落盘存储适合海量向量SSD环境解释把向量本体全部存在磁盘内存只留导航索引用磁盘换容量、省机器内存速度略弱HNSW远超 IVF 系列是超大规模向量库的低成本方案。官方案例默认情况下Milvus会禁用DISKANN以优先提高内存中索引的速度以适应RAM中的数据集。Milvus.yaml配置common: DiskIndex: MaxDegree: 56 # 每个向量最多连多少条“邻居线” SearchListSize: 100 # 搜索时一次查多少候选 PQCodeBudgetGBRatio: 0.125 # 向量压缩比例压缩到原来的 1/8 SearchCacheBudgetGBRatio: 0.1 # 内存里放多少缓存 BeamWidthRatio: 4 # 磁盘读取并发度总结索引的选择场景索引数据量小追求绝对精准不在乎速度FLAT常规业务百万级向量平衡好用IVF_FLAT海量向量内存紧张IVF_SQ8线上高并发、接口低延迟、不差内存HNSW海量向量、高召回、省内存、速度快SCANN海量向量、内存极小、依赖高速 SSD、低成本扩容DISKANN相似度量Metric TypeMilvus通过不同的距离计算方式判断两个向量之间的相似度三种常用度量规则如下L2(欧式距离)计算向量空间直线距离数值越小向量越相似IP(内积)计算向量关联程度数值越大向量越相似CONSINE(余弦)直比对向量方向不关注长度数值越大语义/特征越相似检索Search向量检索即相速度查询业务传入一个目标查询向量Milvus根据选定的向量相似度度量公式在向量索引中快速比对所有向量最终返回TOP-K相似度最高的匹配结果。总结以上就是Milvus向量数据库的简单介绍想要深入了解的同学可以去官网研究。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】