ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

零基础Milvus快速上手指南,手把手搭建RAG向量检索

零基础Milvus快速上手指南,手把手搭建RAG向量检索

文章目录

      • 前言
      • 1 环境准备
        • 1.1 Windows下用Docker部署Milvus
        • 1.2 安装Python依赖
        • 1.3 准备嵌入模型API
      • 2 连接Milvus并创建数据库
        • 2.1 建立客户端连接
        • 2.2 创建自定义数据库
      • 3 创建Collection集合
        • 3.1 检查并创建集合
        • 3.2 查看集合元数据
      • 4 准备嵌入模型
        • 4.1 初始化模型
        • 4.2 生成测试向量
      • 5 插入数据
      • 6 数据查询与检索
        • 6.1 遍历所有数据
        • 6.2 按主键批量查询
        • 6.3 相似度检索
      • 7 清理资源
      • 8 踩坑提醒
      • 9 总结


P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看, 传送门https://blog.csdn.net/qq_34419312

前言

做RAG应用的同学,十有八九都要跟向量数据库打交道。

很多人上来就被环境劝退,装个软件折腾一下午,代码一行没写,光重启电脑了。

今天就拿Milvus开刀,从装环境到跑通相似度检索,一步一步给你捋明白。

1 环境准备

1.1 Windows下用Docker部署Milvus

先说好前提,Windows上装这个,你得先有WSL。

没装的打开PowerShell输一行命令就行,装完乖乖重启电脑,这步跳不过去。

然后装Docker Desktop,安装流程全程下一步,别瞎改配置。

装完别傻乎乎去注册登录,直接跳过就行,咱用的功能免费版完全够。

接下来配镜像加速,没代理的同学这步必做。

不然下载镜像慢到你以为网断了,喝杯茶回来进度条没动两格。

点设置找到Docker Engine,把国内镜像地址粘进去,保存重启Docker。

找个你想存放文件的文件夹,用管理员身份开PowerShell切过去。

下载官方的启动脚本,存成standalone.bat。

运行脚本启动Milvus,等着Docker拉镜像就行。

启动完成后,服务默认跑在localhost:19530,后面连接就用这个地址。

以后想开想关,直接在Docker界面点按钮,不用再敲命令,方便得很。

1.2 安装Python依赖

就四个包,pip一行命令就能装完。

pymilvus是官方客户端,langchain用来统一调用嵌入模型,剩下两个是辅助工具。

1.3 准备嵌入模型API

随便找个支持嵌入模型的平台,搞个API Key就行。

只要兼容OpenAI格式的服务都能用,不用死磕某一家。

整个.env文件存密钥和地址,别硬写在代码里,泄露了哭都来不及。

2 连接Milvus并创建数据库

2.1 建立客户端连接

几行代码的事儿,实例化MilvusClient,传本地服务地址就行。

打印一下现有数据库,默认会自带一个default库。

2.2 创建自定义数据库

Milvus支持多数据库隔离,咱自己整个rag_demo库,跟默认的分开用。

先查一下有没有重名的,没有就创建,创建完切换过去。

友情提示,删库之前得先把里面的集合全删干净,不然直接报错。

别问我怎么知道的,踩过坑的人都懂。

3 创建Collection集合

Collection就相当于关系型数据库里的表,专门存向量和附带的元数据。

3.1 检查并创建集合

创建的时候两个参数最关键:向量维度和相似度度量类型。

维度必须跟你用的嵌入模型输出严格对上,比如bge-m3就是1024维。

差一维都插不进去,就像买鞋买错码,硬塞肯定塞不进去。

相似度算法选COSINE余弦相似度,做语义检索就用这个,准没错。

先查一下集合是否存在,没有就创建,避免重复创建报错。

3.2 查看集合元数据

可以用describe_collection查看集合的详细信息。

默认会有id主键和vector向量字段,而且开了动态字段。

意思就是你随便加额外字段都行,不用提前定义表结构,对新手很友好。

4 准备嵌入模型

4.1 初始化模型

加载.env里的环境变量,用langchain的接口初始化嵌入模型。

填上模型名、api_key和base_url,参数对齐就能用。

4.2 生成测试向量

准备几条测试文本,调用embed_documents批量转成向量。

打印一下向量数量和维度,确认跟集合设置的对得上。

别等插数据的时候才发现维度不匹配,白忙活半天。

5 插入数据

把向量、原文、来源这些信息拼成字典,组成一个列表。

用upsert方法插入,有相同id就更新,没有就新增,很省心。

插完可以手动flush一下,强制数据落盘,心里踏实。

再查一下集合统计信息,看看行数对不对,确认插成功了。

6 数据查询与检索

6.1 遍历所有数据

数据量大的话,用query_iterator分批读取。

别一次性全捞出来把内存干爆,分批拿稳得很。

循环取数就行,用完记得把迭代器关了。

6.2 按主键批量查询

知道数据id的话,直接用get方法批量查,效率很高。

6.3 相似度检索

这才是向量数据库的灵魂功能,也是RAG的核心逻辑。

用户提个问题,先转成向量,然后在库里找最相似的Top-K条内容。

把问题向量传进去,设好返回条数和要返回的字段。

返回结果里的distance就是相似度得分,余弦模式下数值越高越相关。

你会发现语义最贴合的内容排在最前面,这就是RAG能精准召回的底气。

7 清理资源

测试完不用了,就顺手删掉集合和数据库,省得占地方。

再强调一遍,删库前先删集合,顺序别搞反,反了就报错。

8 踩坑提醒

维度必须一致,这是新手最高发的坑,没有之一。

度量类型别乱选,做RAG语义检索,闭眼选COSINE就行。

动态字段虽然灵活,但生产环境该定schema还是定,别图省事乱加字段。

插入和搜索都支持批量操作,数据多了记得用,效率能提一大截。

示例用的是默认FLAT索引,数据少没问题。

真上生产环境,得换HNSW这类索引,不然检索慢到你怀疑人生。

9 总结

这么一套流程走下来,从部署到检索的全链路就跑通了。

Docker跑Milvus单机版,pymilvus操作数据库,langchain调用嵌入模型,再加相似度检索。

这就是RAG系统的数据层底子。

接下来把召回的内容塞给大模型,就能搭出自己的问答应用了。

P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/qq_34419312

返回列表