尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
AI全栈知识07:向量数据库 - Milvus/Chroma实战
AI全栈知识07向量数据库 - Milvus/Chroma实战写在前面上一篇我们知道了RAG需要向量检索来搜相关文档。那向量存在哪怎么搜为什么不能用MySQL这篇帮你搞清楚向量数据库是什么、怎么选、怎么用。学完后你既能用Chroma快速开发也知道生产环境Milvus是怎么回事。为什么MySQL干不了这个活存可以搜不动。假设你有100万段文档每段转成1536个数字向量。存MySQL没问题100万行1536列。但搜索时出问题了用户问了一个问题转成向量 [0.12, -0.34, 0.78, ...] MySQL要找最相似的5段 第1步把100万行全部取出来 第2步逐行计算余弦相似度100万次浮点运算 第3步排序取前5 结果耗时几秒到几十秒向量数据库有专门的索引不需要逐行比对。就像MySQL有B树能快速定位某一行向量数据库有HNSW索引能快速定位附近的向量同样100万条 MySQL暴力搜索3-10秒 向量数据库有索引5-20毫秒差了几百倍。生活类比需求MySQL的做法向量数据库的做法“找一本叫《K8s权威指南》的书”在目录里按书名精确查找秒出结果不擅长这个“找跟容器故障排查相关的书”不会。只能搜标题里有没有这几个字理解语义把相关的都找出来MySQL像图书馆的电子目录按编号精确定位。向量数据库像一个懂内容的图书管理员按你的意思推荐相关的。两者不是替代关系是各干各的活。Chroma - 最简单的向量数据库为什么推荐先学它一个原因pip install就能用不需要装数据库服务。就像SQLite不需要装MySQL服务一样Chroma直接在Python代码里跑数据存本地文件。开发测试最方便。完整代码示例# 安装pip install chromadbimportchromadb# 1. 创建客户端数据存本地clientchromadb.Client()# 2. 创建集合类似MySQL的表collectionclient.create_collection(ops_docs)# 3. 添加文档Chroma自动把文字转成向量collection.add(documents[当容器内存超过limit时K8s会触发OOMKilled终止Pod,Pod处于Pending状态通常是因为资源不足或调度约束不满足,使用kubectl describe pod可以查看Pod的Events信息,K8s的HPA根据CPU或自定义指标自动扩缩Pod数量,Ingress是K8s中管理外部HTTP流量进入集群的资源,],ids[doc1,doc2,doc3,doc4,doc5])# 4. 语义搜索resultscollection.query(query_texts[为什么Pod一直重启],# 用户的问题n_results2# 返回最相似的2条)print(results[documents])# 输出[[当容器内存超过limit时...OOMKilled, 使用kubectl describe pod...]]就这么几行。存文档、自动转向量、语义搜索全搞定。Chroma做了什么你调collection.add()时Chroma在背后做了调内置的Embedding模型把文字转成向量建立索引存到本地文件你调collection.query()时把你的问题也转成向量用索引快速找到最近的向量返回对应的原始文档对你来说只需要关心存什么文档、搜什么问题、要几条结果。中间的向量转换和检索过程全自动。Milvus - 生产级向量数据库什么时候需要Milvus需求Chroma够吗需要Milvus几千条文档开发测试够不需要几十万条文档多人使用勉强建议用百万级以上生产环境不行必须用需要高可用/集群部署不支持支持需要持久化和备份简陋完善你们公司的FastGPT背后大概率就是Milvus或pgvector在存知识库的向量。Milvus的架构Milvus集群 三个组件配合 ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ | Milvus | | etcd | | MinIO | | (主程序) | | (元数据) | | (文件存储) | | 向量索引 | | 集合信息 | | 向量数据 | | 查询处理 | | Schema等 | | 索引文件 | └─────────────┘ └─────────────┘ └─────────────┘组件作用类比Milvus处理查询和索引MySQL主进程etcd存元数据有哪些集合、字段定义MySQL的information_schemaMinIO存实际的向量数据文件MySQL的数据目录Docker部署# docker-compose.yml最简单的单机部署version:3.5services:milvus-standalone:image:milvusdb/milvus:v2.4.0ports:-19530:19530-9091:9091volumes:-./milvus-data:/var/lib/milvusenvironment:ETCD_ENDPOINTS:etcd:2379MINIO_ADDRESS:minio:9000depends_on:-etcd-minioetcd:image:quay.io/coreos/etcd:v3.5.5environment:ETCD_AUTO_COMPACTION_MODE:revisionETCD_AUTO_COMPACTION_RETENTION:1000minio:image:minio/minio:RELEASE.2023-03-20T20-16-18Zenvironment:MINIO_ACCESS_KEY:minioadminMINIO_SECRET_KEY:minioadmincommand:minio server /minio_datadocker-composeup-d# 三个容器启动Milvus就绪Python使用示例frompymilvusimportconnections,Collection,FieldSchema,CollectionSchema,DataType# 连接Milvusconnections.connect(hostlocalhost,port19530)# 定义表结构Schemafields[FieldSchema(nameid,dtypeDataType.INT64,is_primaryTrue,auto_idTrue),FieldSchema(nametext,dtypeDataType.VARCHAR,max_length2000),FieldSchema(nameembedding,dtypeDataType.FLOAT_VECTOR,dim1536),]schemaCollectionSchema(fields,description运维知识库)# 创建集合collectionCollection(ops_knowledge,schema)# 创建索引很重要没索引会很慢collection.create_index(field_nameembedding,index_params{index_type:HNSW,# 索引类型metric_type:COSINE,# 相似度算法params:{M:16,efConstruction:256}})# 插入数据需要自己调Embedding模型转向量collection.insert([texts,embeddings])# 搜索collection.load()# 加载到内存resultscollection.search(data[query_embedding],anns_fieldembedding,param{metric_type:COSINE,params:{ef:64}},limit5,output_fields[text]# 同时返回原文)注意和Chroma的区别Milvus不会自动调Embedding你需要自己先把文字转成向量再存进去。Chroma vs Milvus对比维度ChromaMilvus定位开发/学习/小规模生产/大规模安装pip install chromadbDocker部署3个容器数据量几万到几十万亿级搜索速度毫秒级小数据时毫秒级大数据也快自动Embedding支持内置模型不支持自己调持久化本地文件MinIO分布式存储高可用不支持支持集群监控无有Prometheus指标适合K8sChat开发、学习FastGPT生产环境索引类型了解即可向量数据库的索引决定了搜索速度和精度索引类型原理类比特点FLAT挨个对比像翻字典每一页最精确但最慢IVF先分区再搜先找到对的书架再找书速度快有少量精度损失HNSW跳跃式搜索像六度人脉通过朋友的朋友快速找到人速度极快内存占用大结论大多数情况选HNSW就对了。运维Milvus要关心什么如果你的工作中需要运维Milvus集群关注点说明监控方式磁盘空间100万条x1536维 约 6GB看MinIO存储内存使用HNSW索引全部加载到内存看Milvus内存查询延迟正常应该在5-20msPrometheus指标集合大小单集合不建议超过1亿条定期检查数据备份备份MinIO中的数据定时任务etcd健康etcd挂了Milvus不可用etcd健康检查面试怎么说如果被问你了解向量数据库吗了解。向量数据库专门用于存储和检索高维向量核心能力是做语义相似度搜索。跟MySQL的区别是MySQL做精确匹配WHERE向量数据库做相似度匹配找最像的前K条。我用过Chroma做开发pip install就能用了解Milvus的生产部署etcdMinIOMilvus三组件。索引一般选HNSW相似度用余弦。我们公司的FastGPT知识库功能底层就是向量数据库在支撑检索。延伸思考问题答案pgvector能替代Milvus吗小规模可以几十万条以下大规模性能不如专用向量数据库向量数据库会不会被MySQL替代短期不会。MySQL加向量功能了但性能差距大Milvus和Elasticsearch能混用吗可以。ES做关键词搜索Milvus做向量搜索两路结果合并混合检索向量数据会不会很大100万条x1536维约6GB不算特别大。但索引加载到内存会占更多小结本篇核心收获MySQL做不了向量检索暴力搜太慢向量数据库有专用索引HNSWChromapip install就能用开发首选Milvus生产级Docker部署三组件MilvusetcdMinIOChroma自动转向量Milvus需要自己调Embedding索引选HNSW相似度用余弦大多数场景最佳运维Milvus关注内存索引加载、磁盘数据存储、延迟5-20ms正常下一篇预告AI全栈知识08Function Calling与工具调用下一篇我们将深入Agent的核心机制Function Calling到底是什么模型怎么决定调哪个工具完整的调用流程拆解K8sChat项目中Function Calling的实际应用参考链接Chroma官方文档Milvus官方文档Milvus Docker部署指南HNSW索引原理pymilvus Python SDK
RELATED

相关推荐

雄激素代谢关键分子双氢睾酮 (DHT):不止和脱发息息相关,还参与多类疾病调控,云克隆助力激素科研检测

雄激素代谢关键分子双氢睾酮 (DHT):不止和脱发息息相关,还参与多类疾病调控,云克隆助力激素科研检测

一、研究背景:被低估的活性雄激素 DHT生活当中,很多人对双氢睾酮的认知仅仅停留在脱发层面。临床中大量雄激素性脱发患者,毛囊部位对 DHT 高度敏感,局部 DHT 水平异常升高,会持续诱导毛囊微型化,毛发周期发…

📅 2026/10/8 17:25:52
剑网3玩家福音:JX3Toy全功能减负工具,一份脚本告别90%重复操作

剑网3玩家福音:JX3Toy全功能减负工具,一份脚本告别90%重复操作

剑网3玩家福音:JX3Toy全功能减负工具,一份脚本告别90%重复操作 【免费下载链接】JX3Toy 全功能减负工具 项目地址: https://gitcode.com/GitHub_Trending/jx/JX3Toy 你有没有算过,每天晚上那场25人团本,光按技能键就要按多…

📅 2026/9/25 23:56:33
Agent学习路线之——MySQL数据库 ① (从概念到DDL实操)

Agent学习路线之——MySQL数据库 ① (从概念到DDL实操)

Agent学习路线之——MySQL数据库 ① (从概念到DDL实操)本文为学习agent之前数据库知识的储备,涵盖数据库基本概念、MySQL安装配置、数据库连接方式、SQL语言基础以及DDL数据定义语言的实操,适合零基础入门学习。一、数据库概念 1.1 什么是数据库 数据库就…

📅 2026/9/8 9:47:06
MORE NEWS

更多资讯

📰

VirtualBox VMM源码深度解析:世界切换与寄存器上下文管理

1. 项目概述:从“看不见的CPU”说起 你有没有试过在一台Windows电脑上,同时开着Linux终端、macOS图形界面和一个FreeBSD服务器?它们互不干扰,各自运行着自己的内核、驱动和进程,仿佛真的有三台物理机器插在同一张办公桌…

📰

MSCNN多尺度卷积网络实战:人群密度估计从原理到落地

1. 从一张拥挤的地铁站照片说起:为什么需要多尺度卷积网络第一次接触人群密度估计这个方向,是因为一个做安防监控的朋友吐槽:他们部署的传统检测模型,在广场、地铁站这种人挤人的场景里几乎废掉——人一多,互相遮挡&am…

📰

UML试题大集合:用例图与顺序图关系判断与画图避坑指南

简介:面向UML课程复习与考试准备的试题大集合,以用例图、顺序图、协作图等交互图为核心,同时覆盖高内聚度、对象可见性、领域模型、统一过程等高频考点,适合软件工程及相关专业学生、考研备考者和自学者对照查漏补缺。资源以doc格…

📰

RucBase C++数据库源码实战:B+树并发与缓冲池解析

简介:这份资源是面向计算机专业学生与数据库系统实现学习者的RucBase关系数据库管理系统C源码工程,参考CMU15445的BusTub与Stanford CS346的Redbase设计,适合作为《数据库系统实现》课程实验框架,帮助理解并动手实现数据库核心模块…

📰

std::format自定义格式化器:formatter特化与实战指南

说真的&#xff0c;我第一次在代码里用上 std::format 的时候&#xff0c;脑子里冒出来的想法不是“语法真漂亮”&#xff0c;而是“早该有了”。printf 的年代我还没怎么受折磨&#xff0c;倒是 operator<< 那套流式格式化陪了我好多年。直到我真正想给一个自定义的业务…

📰

COMSOL仿真波导BIC现象:原理与建模实践

1. 波导BIC现象初探&#xff1a;当电磁波遇见拓扑缺陷在电磁学领域&#xff0c;Bound states in the continuum&#xff08;连续谱中的束缚态&#xff0c;简称BIC&#xff09;堪称一种反直觉的物理现象。想象一下&#xff1a;一束光被完美地囚禁在波导结构中&#xff0c;即使周…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬