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

相关新闻

什么值得买自动签到脚本实战:青龙面板免费托管每日任务的完整指南

什么值得买自动签到脚本实战:青龙面板免费托管每日任务的完整指南

什么值得买自动签到脚本实战:青龙面板免费托管每日任务的完整指南 【免费下载链接】smzdm_script smzdm 自用脚本 for 青龙面板,支持 App 端签到、转盘抽奖、每日任务等功能 项目地址: https://gitcode.com/gh_mirrors/smz/smzdm_script 每天醒来…

2026/10/17 22:20:49 阅读更多 →
单目深度估计从“卡壳“到“毫秒级“:Depth Anything V2 完整上手指南

单目深度估计从“卡壳“到“毫秒级“:Depth Anything V2 完整上手指南

单目深度估计从"卡壳"到"毫秒级":Depth Anything V2 完整上手指南 【免费下载链接】Depth-Anything-V2 [NeurIPS 2024] Depth Anything V2. A More Capable Foundation Model for Monocular Depth Estimation 项目地址: https://gitcode.com/…

2026/10/17 22:20:32 阅读更多 →
BiliRoamingX 快速上手指南:7 步解锁番剧区域限制,把 B 站改造成你的专属客户端

BiliRoamingX 快速上手指南:7 步解锁番剧区域限制,把 B 站改造成你的专属客户端

BiliRoamingX 快速上手指南:7 步解锁番剧区域限制,把 B 站改造成你的专属客户端 【免费下载链接】BiliRoamingX-integrations BiliRoamingX integrations and patches powered by ReVanced. 项目地址: https://gitcode.com/gh_mirrors/bi/BiliRoamingX…

2026/10/15 15:35:05 阅读更多 →

最新新闻

Kafka接入AI实战:从消息管道到智能数据管道

Kafka接入AI实战:从消息管道到智能数据管道

我这两年跟Kafka打交道的时间,比跟家人说话的时间都多。群里每天都在问“Kafka宕机怎么办”“消费延迟怎么查”,说实话,这些问题翻来覆去就那几个套路。但最近画风变了,大家开始问“Kafka能不能直接把消息丢给大模型处理”“AI能不…

2026/10/17 22:20:22 阅读更多 →
Vue3全栈源码实战:TypeScript类型系统如何撑起可维护链路

Vue3全栈源码实战:TypeScript类型系统如何撑起可维护链路

简介:这份原创源码资料面向希望深入掌握 TypeScript 类型系统并落地 Vue3 全栈项目的前端进阶开发者,围绕高级类型编程、装饰器、全局声明文件等核心知识点展开,同时提供一套 Vue3 TS Pinia 的完整基础项目,可用于工程化实践与项…

2026/10/17 22:20:22 阅读更多 →
萤火商城v2.0.8多端版商业落地:一套代码支撑小程序、H5和App

萤火商城v2.0.8多端版商业落地:一套代码支撑小程序、H5和App

简介:萤火商城 v2.0.8 多端版是一套面向中小型电商创业者、独立开发者与二次开发学习者的轻量级前后端分离电商系统源码,支持微信小程序、H5、公众号与 APP 多端运行,前后端代码 100% 开源,所见即所得,便于快速搭建个性…

2026/10/17 22:20:22 阅读更多 →
微信小说平台CDMS系统实战:从分账结算到避坑指南

微信小说平台CDMS系统实战:从分账结算到避坑指南

简介:草莓CDMS内容分销系统v1.0是一套基于ThinkPHP5.1、EasyWeChat4.0、Swoole和Redis开发的原创内容分销系统,主要面向需要搭建微信小说、漫画、有声等内容平台的技术人员与运营团队。系统提供微信开放平台扫码授权与公众平台手动对接两种模式&#xff…

2026/10/17 22:20:22 阅读更多 →
Flink SQL中ROW_NUMBER() OVER窗口报错解析与避坑指南

Flink SQL中ROW_NUMBER() OVER窗口报错解析与避坑指南

1. 从一个真实报错说起:ROW_NUMBER() 为什么在 Flink SQL 里“水土不服”第一次在 Flink SQL 里写ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)去重的时候,我满心以为这就是个标准 SQL 操作,结果提交作业直接给我甩了个异常&#xff0…

2026/10/17 22:20:22 阅读更多 →
Cline 配置 Figma MCP 服务器(Windows):把 settings 改到 TaoToken 的完整步骤

Cline 配置 Figma MCP 服务器(Windows):把 settings 改到 TaoToken 的完整步骤

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

2026/10/17 22:19:21 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →