当前位置: 首页 > news >正文

Milvus 向量数据库部署与 BGE-M3 模型加载的踩坑记录

前言

在搭建本地 RAG 应用时,我选择了 Milvus 作为向量数据库,BGE-M3 作为嵌入模型。整个过程比预想的曲折,这里记录下从“不懂”到“跑通”的完整过程与踩坑点。


一、Milvus 部署与 Attu 客户端连接

1.1 为什么选 Milvus?

Milvus 是开源向量数据库的事实标准,支持海量向量的存储与检索,并提供官方图形化管理工具 Attu。对于本地开发测试,单机 Docker 部署最为便捷。

1.2 预期目标

  • 在本地(Windows / macOS / Linux)通过 Docker Compose 运行 Milvus 2.4.11 单机版
  • 使用 Python 客户端pymilvus连接
  • 通过 Attu 可视化界面管理集合

1.3 标准部署步骤(脱敏版)

# 创建工作目录mkdir~/milvus&&cd~/milvus# 下载官方 docker-compose 配置curl-L-odocker-compose.yml https://github.com/milvus-io/milvus/releases/download/v2.4.11/milvus-standalone-docker-compose.yml# 启动服务dockercompose up-d# 查看状态dockercomposeps# 三个容器应均为 Up

安装 Python 客户端并测试:

pipinstallpymilvus
frompymilvusimportconnections connections.connect(host='localhost',port='19530')print("连接成功")

部署 Attu:

dockerrun-d--nameattu-p8000:3000-eMILVUS_URL=host.docker.internal:19530 zilliz/attu:latest

浏览器访问http://localhost:8000,即可管理 Milvus。

1.4 踩坑记录

  1. 端口冲突:本机已有服务占用了9000/9001,导致 Milvus 内置的 MinIO 无法启动。
    解决:修改docker-compose.yml中 MinIO 服务的端口映射,例如改为9002:90009003:9001,然后docker compose down && docker compose up -d

  2. wget命令不存在:在 Git Bash 中执行wget报错。
    解决:改用curl -L -o docker-compose.yml <URL>下载。

  3. docker compose port报错“service not running”:虽然容器实际已运行,但该命令返回误导信息。
    解决:以docker compose ps为准,不依赖port子命令。

  4. Attu 连接 Milvus 失败,提示14 UNAVAILABLE:使用host.docker.internal时,Windows + WSL2 环境下容器无法解析该域名。
    验证:在宿主机执行curl -v telnet://localhost:19530成功连通,说明 Milvus 服务正常。
    解决:改用宿主机实际 IP(例如通过ipconfigifconfig获得的局域网 IPv4 地址)运行 Attu:

    dockerrm-fattudockerrun-d--nameattu-p8000:3000-eMILVUS_URL=<宿主机IP>:19530 zilliz/attu:latest

    然后在 Attu 界面手动填写该 IP 即可连接。

  5. 容器名冲突:重复运行docker run创建 attu 时报错Conflict. The container name "/attu" is already in use
    解决:先执行docker rm -f attu删除旧容器。


二、BGE-M3 嵌入模型加载

2.1 为什么选 BGE-M3?

BGE-M3 是 BAAI 最新开源的嵌入模型,支持多语言、稠密与稀疏向量混合检索,在中文任务上表现优异。RAG 应用中需要用它将文档和查询转为向量。

2.2 预期目标

在 Python 环境中加载 BGE-M3 模型,并能够对文本生成向量。

2.3 标准加载方式(推荐)

importos os.environ['HF_ENDPOINT']='https://hf-mirror.com'# 国内镜像(网络受限时使用)fromsentence_transformersimportSentenceTransformer model=SentenceTransformer("BAAI/bge-m3",cache_folder="./models/bge-m3_cache"# 可选:指定缓存目录)# 测试编码emb=model.encode("你好,世界")print(emb.shape)# (1024,)

2.4 踩坑记录

  1. 使用FlagModel加载本地路径失败

    fromFlagEmbeddingimportFlagModel model=FlagModel("D:/downloaded_models/bge-m3")

    报错:Repo id must use alphanumeric chars...
    原因:FlagModel将本地路径误认为 model repo ID,不支持 Windows 盘符格式。
    解决:改用sentence-transformers库,它对本地路径支持更友好。

  2. 本地模型文件不完整:从 ModelScope 下载的文件夹内缺少pytorch_model.bin等权重文件。
    现象sentence-transformers加载时报Error no file named pytorch_model.bin ... found
    解决:放弃本地残缺文件夹,从国内镜像重新下载完整模型。

  3. 无法连接 Hugging Face 官方源:默认下载时出现Connection to huggingface.co timed out
    解决:设置环境变量HF_ENDPOINT=https://hf-mirror.com使用国内镜像。

  4. 模型下载速度慢/中断:大文件(2.2GB)下载易失败。
    解决:使用cache_folder指定一个有充足空间的目录,并保持网络稳定。或使用modelscope命令行工具提前下载到指定路径:

    modelscope download--modelBAAI/bge-m3--local_dir./models/bge-m3

    然后用SentenceTransformer("./models/bge-m3")加载本地目录。


三、总结

组件核心踩点有效解决方案
Milvus端口冲突、Attu 连接失败、wget 缺失修改 docker-compose 端口;Attu 改用宿主机 IP;curl 替代 wget
BGE-M3本地路径不支持、网络不通、文件不完整改用 Sentence‑Transformers;设置 HF 镜像;重新下载完整模型

这两项基础环境的搭建虽有小波折,但最终都顺利解决。希望这份记录能帮你避开同样的坑,更快完成 RAG 应用的本地开发。


附:前面提到的踩坑记录(简明版)

  • Milvus 部署
    • 端口冲突 → 修改 yml
    • Attu 连不上 → 用宿主机 IP 而非 host.docker.internal
    • 命令不存在 → 用 curl 代替 wget
  • BGE-M3 加载
    • FlagModel 不接受本地路径 → 换 Sentence‑Transformers
    • 模型文件缺失 → 从镜像重下
    • 外网不通 → 设置 HF_ENDPOINT 镜像
http://www.jsqmd.com/news/771940/

相关文章:

  • 2026交调系统十大品牌盘点,广州聚杰芯科凭实力上榜 - 品牌速递
  • Hugo博客自动化发布:从脚本到CI/CD的完整实践指南
  • 使用Taotoken聚合API为初创团队统一管理多模型调用成本
  • 质量好到出圈!2026广州聚杰芯科交调系统,收获行业一致好评 - 品牌速递
  • Kunpeng:基于工件与形态驱动的多智能体运行时架构解析
  • 【深度测评】!2026年男孩、女孩、宝宝起名/取名TOP3公司怎么选? - 深度智识库
  • 信得过的厂家!2026广州晶石非现场执法,全流程严苛品控更安心 - 品牌速递
  • OpenModScan完全免费Modbus主站工具:工业自动化调试终极指南
  • 天守:AI智能体团队可视化指挥中心的设计、部署与实战
  • 品牌推荐|2026广州聚杰芯科交通流量调查系统,品质靠谱适配多行业需求 - 品牌速递
  • 2026压电石英传感器五大排行,广州晶石压电石英传感器凭性能脱颖而出 - 品牌速递
  • 量化金融入门指南:从Python数据处理到策略回测实战
  • 质量好+服务优!2026广州聚杰芯科交调设备,成为行业推荐之选 - 品牌速递
  • 2026届毕业生推荐的六大AI论文方案实测分析
  • 多模态大模型mPLUG-Owl:从图文对齐到指令微调的实践指南
  • 2026压电石英传感器排行榜,广州晶石压电石英传感器凭全品类优势领跑市场 - 品牌速递
  • 上海计算机学会2026年4月月赛C++丙组T3 螺旋矩阵
  • 厂家直供推荐!2026广州聚杰芯科交调设备,质量稳定售后无忧 - 品牌速递
  • Emacs AI编程接口:统一多模型后端,实现工程化开发工作流
  • 告别布线噩梦!用Valens VS3000芯片,一根网线搞定4K视频、音频、网络和USB
  • 大连可靠的西装定制哪家划算?维纳缇等5大品牌深度解析 - 西装爱好者
  • 多模态视频理解:跨模态联合推理与评估体系构建
  • 【深度测评】2026年陕西育儿嫂/月嫂/保姆/家庭保洁/商业保洁公司TOP5怎么选? - 深度智识库
  • TypingMind静态自托管部署指南:构建私有AI聊天前端工作台
  • UCIe协议层实战解析:PCIe 6.0与CXL 3.0的Flit模式到底怎么选?
  • Tita 小技巧|未审批 OKR 也能对齐,打破审批流程阻碍
  • 2026交通量调查系统哪家好?认准广州聚杰芯科交通量调查系统 - 品牌速递
  • OpenClaw怎么搭建?2026年本地10分钟新手超简单教程及百炼Coding Plan方法
  • 用STM32F407的DAC做个简易信号发生器:CubeMX配置+按键调压+ADC自检一条龙
  • 告别EV2300?手把手教你用STM32自制BQ4050调试器,读取电压电流温度