文章目录
- 前言
- 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