「milvus-course-ai.zip」
链接:https://pan.quark.cn/s/00f3d411bb6d
github:https://github.com/yuanmomoya/milvus
教程目标
完成本教程后,你应该能够从原理、工程、生产三个层面掌握 Milvus:能解释 ANN、HNSW、IVF、PQ 的工作方式;能使用 pymilvus 开发业务系统;能搭建 RAG、图片检索、多模态检索服务;也能在百万、千万、亿级向量场景下做容量规划、压测、调优和故障排查。
阶段规划
#mermaid-svg-DDkUISptNUA62ss4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DDkUISptNUA62ss4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DDkUISptNUA62ss4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DDkUISptNUA62ss4 .error-icon{fill:#552222;}#mermaid-svg-DDkUISptNUA62ss4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DDkUISptNUA62ss4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DDkUISptNUA62ss4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DDkUISptNUA62ss4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DDkUISptNUA62ss4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DDkUISptNUA62ss4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DDkUISptNUA62ss4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DDkUISptNUA62ss4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DDkUISptNUA62ss4 .marker.cross{stroke:#333333;}#mermaid-svg-DDkUISptNUA62ss4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DDkUISptNUA62ss4 p{margin:0;}#mermaid-svg-DDkUISptNUA62ss4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DDkUISptNUA62ss4 .cluster-label text{fill:#333;}#mermaid-svg-DDkUISptNUA62ss4 .cluster-label span{color:#333;}#mermaid-svg-DDkUISptNUA62ss4 .cluster-label span p{background-color:transparent;}#mermaid-svg-DDkUISptNUA62ss4 .label text,#mermaid-svg-DDkUISptNUA62ss4 span{fill:#333;color:#333;}#mermaid-svg-DDkUISptNUA62ss4 .node rect,#mermaid-svg-DDkUISptNUA62ss4 .node circle,#mermaid-svg-DDkUISptNUA62ss4 .node ellipse,#mermaid-svg-DDkUISptNUA62ss4 .node polygon,#mermaid-svg-DDkUISptNUA62ss4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DDkUISptNUA62ss4 .rough-node .label text,#mermaid-svg-DDkUISptNUA62ss4 .node .label text,#mermaid-svg-DDkUISptNUA62ss4 .image-shape .label,#mermaid-svg-DDkUISptNUA62ss4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-DDkUISptNUA62ss4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DDkUISptNUA62ss4 .rough-node .label,#mermaid-svg-DDkUISptNUA62ss4 .node .label,#mermaid-svg-DDkUISptNUA62ss4 .image-shape .label,#mermaid-svg-DDkUISptNUA62ss4 .icon-shape .label{text-align:center;}#mermaid-svg-DDkUISptNUA62ss4 .node.clickable{cursor:pointer;}#mermaid-svg-DDkUISptNUA62ss4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DDkUISptNUA62ss4 .arrowheadPath{fill:#333333;}#mermaid-svg-DDkUISptNUA62ss4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DDkUISptNUA62ss4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DDkUISptNUA62ss4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DDkUISptNUA62ss4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DDkUISptNUA62ss4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DDkUISptNUA62ss4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DDkUISptNUA62ss4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DDkUISptNUA62ss4 .cluster text{fill:#333;}#mermaid-svg-DDkUISptNUA62ss4 .cluster span{color:#333;}#mermaid-svg-DDkUISptNUA62ss4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DDkUISptNUA62ss4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DDkUISptNUA62ss4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-DDkUISptNUA62ss4 .icon-shape,#mermaid-svg-DDkUISptNUA62ss4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DDkUISptNUA62ss4 .icon-shape p,#mermaid-svg-DDkUISptNUA62ss4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DDkUISptNUA62ss4 .icon-shape .label rect,#mermaid-svg-DDkUISptNUA62ss4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DDkUISptNUA62ss4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DDkUISptNUA62ss4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DDkUISptNUA62ss4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 第一阶段:学习地图和项目骨架
第二阶段:40 章 Markdown 教程
第三阶段:Demo 项目代码
第四阶段:部署、监控、压测、生产方案
本仓库已经按四个阶段组织:README.md 给出全局规划,docs/ 是逐章教程,demos/ 是可运行工程,scripts/ 是部署和压测入口,configs/ 是 Milvus 配置样例。
章节学习路径
| 阶段 | 章节 | 学完后你能做什么 |
|---|---|---|
| 基础 | 01-05 | 解释向量检索,启动 Milvus,完成基本 CRUD/Search |
| 建模 | 06-09 | 设计 Collection、字段、Embedding 和索引 |
| 调优 | 10-17 | 根据业务选择 IVF/HNSW/PQ,调 nprobe/ef/batch |
| 生产 | 18-21 | 规划集群、高可用、监控、备份和容量 |
| RAG | 22-29 | 构建知识库问答、召回优化、Rerank、多路召回 |
| 多模态 | 30-34 | 构建图片检索、多模态检索和 AI 搜索 API |
| 深水区 | 35-40 | 做亿级架构、Benchmark、Debug、源码阅读和面试准备 |
每章统一结构
每一章都包含学习目标、核心概念、原理讲解、Mermaid 图解、完整代码入口、Demo、常见错误、面试题、练习题和小结。重点章节会额外给出参数表、生产经验和架构权衡。
项目整体架构
#mermaid-svg-YNRbqgfeSWSeZof3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YNRbqgfeSWSeZof3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YNRbqgfeSWSeZof3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YNRbqgfeSWSeZof3 .error-icon{fill:#552222;}#mermaid-svg-YNRbqgfeSWSeZof3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YNRbqgfeSWSeZof3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YNRbqgfeSWSeZof3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YNRbqgfeSWSeZof3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YNRbqgfeSWSeZof3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YNRbqgfeSWSeZof3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YNRbqgfeSWSeZof3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YNRbqgfeSWSeZof3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YNRbqgfeSWSeZof3 .marker.cross{stroke:#333333;}#mermaid-svg-YNRbqgfeSWSeZof3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YNRbqgfeSWSeZof3 p{margin:0;}#mermaid-svg-YNRbqgfeSWSeZof3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YNRbqgfeSWSeZof3 .cluster-label text{fill:#333;}#mermaid-svg-YNRbqgfeSWSeZof3 .cluster-label span{color:#333;}#mermaid-svg-YNRbqgfeSWSeZof3 .cluster-label span p{background-color:transparent;}#mermaid-svg-YNRbqgfeSWSeZof3 .label text,#mermaid-svg-YNRbqgfeSWSeZof3 span{fill:#333;color:#333;}#mermaid-svg-YNRbqgfeSWSeZof3 .node rect,#mermaid-svg-YNRbqgfeSWSeZof3 .node circle,#mermaid-svg-YNRbqgfeSWSeZof3 .node ellipse,#mermaid-svg-YNRbqgfeSWSeZof3 .node polygon,#mermaid-svg-YNRbqgfeSWSeZof3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YNRbqgfeSWSeZof3 .rough-node .label text,#mermaid-svg-YNRbqgfeSWSeZof3 .node .label text,#mermaid-svg-YNRbqgfeSWSeZof3 .image-shape .label,#mermaid-svg-YNRbqgfeSWSeZof3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-YNRbqgfeSWSeZof3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YNRbqgfeSWSeZof3 .rough-node .label,#mermaid-svg-YNRbqgfeSWSeZof3 .node .label,#mermaid-svg-YNRbqgfeSWSeZof3 .image-shape .label,#mermaid-svg-YNRbqgfeSWSeZof3 .icon-shape .label{text-align:center;}#mermaid-svg-YNRbqgfeSWSeZof3 .node.clickable{cursor:pointer;}#mermaid-svg-YNRbqgfeSWSeZof3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YNRbqgfeSWSeZof3 .arrowheadPath{fill:#333333;}#mermaid-svg-YNRbqgfeSWSeZof3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YNRbqgfeSWSeZof3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YNRbqgfeSWSeZof3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YNRbqgfeSWSeZof3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YNRbqgfeSWSeZof3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YNRbqgfeSWSeZof3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YNRbqgfeSWSeZof3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YNRbqgfeSWSeZof3 .cluster text{fill:#333;}#mermaid-svg-YNRbqgfeSWSeZof3 .cluster span{color:#333;}#mermaid-svg-YNRbqgfeSWSeZof3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YNRbqgfeSWSeZof3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YNRbqgfeSWSeZof3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-YNRbqgfeSWSeZof3 .icon-shape,#mermaid-svg-YNRbqgfeSWSeZof3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YNRbqgfeSWSeZof3 .icon-shape p,#mermaid-svg-YNRbqgfeSWSeZof3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YNRbqgfeSWSeZof3 .icon-shape .label rect,#mermaid-svg-YNRbqgfeSWSeZof3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YNRbqgfeSWSeZof3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YNRbqgfeSWSeZof3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YNRbqgfeSWSeZof3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户/业务系统
FastAPI 服务
Embedding 服务
RAG 编排
检索模块
Milvus
etcd 元数据
MinIO 对象存储
OpenAI Compatible LLM
图片/多模态 Demo
CLIP 模型
推荐实践节奏
- 先跑通
docker compose up -d和demos/basic-search。 - 每读完一个索引章节,就用
demos/benchmark改参数验证。 - 读 RAG 章节时,直接启动
demos/rag-system并用 curl 走完整链路。 - 读生产章节时,把自己的数据规模代入容量估算表。