踩坑实录 | RAG知识库完整搭建-Milvus2.4+BGE大中文AI模型嵌入

目录

  • 一、RAG及其成型框架
    • [1.1 什么是RAG](#1.1 什么是RAG)
    • [1.2 三大组件通俗讲解,新手一眼看懂整套架构](#1.2 三大组件通俗讲解,新手一眼看懂整套架构)
  • 二、部署Embedding模型
    • [2.1 下载模型](#2.1 下载模型)
    • [2.2 部署模型](#2.2 部署模型)
    • [2.3 向量转换](#2.3 向量转换)
  • 三、部署向量库数据库
    • [3.1 部署Milvus](#3.1 部署Milvus)
    • [3.2 部署Attu](#3.2 部署Attu)
  • 四、测试场景
    • [4.1 创建个人知识库](#4.1 创建个人知识库)
    • [4.2 数据检索](#4.2 数据检索)

一、RAG及其成型框架


1.1 什么是RAG


RAGRetrieval-Augmented Generation,检索增强生成)在2020年被首次提出,是一种结合了信息检索技术与语言生成模型的人工智能技术。该技术通过从外部知识库中检索相关信息,并将其作为提示(prompt)输入给大型语言模型(LLMs),以增强模型处理知识密集型任务的能力。

一句话总结:RAG 是给现有 AI 一个"现成知识库",让 AI 在回答问题前,先主动去指定的"资料库"里查资料,再基于真实、最新的资料生成答案,降低胡说八道的概率。

1.2 三大组件通俗讲解,新手一眼看懂整套架构


首先,为什么要转化为向量?

计算机底层只能处理数字,不能直接识别文字,相似度的计算也是利用向量的内积进行运算。语义相同的文字,生成的向量数字整体分布高度相似。

其次,需要应用到什么技术

很多刚入门向量检索的朋友,分不清模型、向量库、可视化工具的定位,需要先把三者核心作用讲透。

  • Embedding模型:BAAI/bge-large-zh-v1.5(当前中文最强检索模型)
  • 向量数据库:Milvus 2.4.0 单机Docker部署
  • 可视化工具管理:Attu 2.4Milvus官方Web后台)

其关系如下:

组件 全称定位 通俗比喻 核心本职工作
BAAI/bge-large-zh-v1.5 Embedding 嵌入模型(语义转换器) 翻译员 自然文字翻译成机器能识别的 1024 维数字向量,精准捕捉中文语义相似度。
Milvus 2.4.0 高性能向量数据库 档案仓库 + 高速检索机 专门存储 BAAI/bge-large-zh-v1.5 生成的向量、原文内容,建立索引实现毫秒级海量向量相似度匹配,负责精准召回相似法条,只负责 "找资料",不会理解文字含义。
Attu Milvus 的「可视化操作台」 显示屏 可视化创建集合、配置 HNSW 索引、手动导入向量、在线执行向量检索。

最后,完整链路

简而言之就是:BAAI/bge-large-zh-v1.5将文字转为向量,存储到Milvus中。用户每次搜索的时候,基于输入的文字同样调用 BAAI/bge-large-zh-v1.5 生成查询向量,Milvus利用内存暴力计算所有法条向量的 IP 相似度,取出最匹配的几条内容返回。

二、部署Embedding模型


2.1 下载模型


国内用户建议登录魔塔社区下载模型:魔塔社区地址

直接搜索bge-large-zh,然后下载即可

2.2 部署模型


我们需要找一个框架来运行下载的模型,这里我们使用vLLM,具体的下载及安装步骤可以参考我的这篇文章:Linux 环境极速部署 vLLM:从零搭建生产级大模型推理服务

安装完vLLM后,一建启动下载的BAAI/bge-large-zh-v1.5模型即可,下面命令表示允许所有ip访问,同时映射的端口是8890,最高只占用20%的电脑显存

bash 复制代码
vllm serve /work/ai/model/bgeModel  --trust-remote-code --host 0.0.0.0 --port 8890 --tensor-parallel-size 1 --gpu-memory-utilization 0.2 --max-num-seqs 4

看到如下界面表示启动成功

2.3 向量转换


启动模型后,可通过post接口http://IP地址:端口/v1/embeddings来实现向量转换,请求体如下:

bash 复制代码
{
	"model":"xxxxxxx",
	"input":["xxxxxxx"]
}

其中model为模型地址,input为需要转化的内容。返回结果中的embedding即为转换的1024维向量

三、部署向量库数据库


3.1 部署Milvus


Milvus通过dockerdocker compose部署,需要提前安装好

首先拉取Milvus镜像,总共有三个docker镜像,分别是milvus、etcdminio。国内基本上都没办法直接从原始网站上拉取,所以建议从镜像网站拉取,再改名字

bash 复制代码
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/milvusdb/milvus:v2.4.0
bash 复制代码
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/milvusdb/milvus:v2.4.0 milvusdb/milvus:v2.4.0
bash 复制代码
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/coreos/etcd:v3.5.5
bash 复制代码
docker tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/coreos/etcd:v3.5.5  quay.io/coreos/etcd:v3.5.5
bash 复制代码
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/minio/minio:RELEASE.2023-03-20T20-16-18Z
bash 复制代码
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/minio/minio:RELEASE.2023-03-20T20-16-18Z docker.io/minio/minio:RELEASE.2023-03-20T20-16-18Z

docker images 验证所有的镜像

新建启动文件docker-compose.yml,注意端口映射,不要和现有服务冲突

yaml 复制代码
version: '3.5'
services:
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.5
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
    command: etcd -name=etcd -data-dir=/etcd -advertise-client-urls=http://0.0.0.0:2379 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://0.0.0.0:2380
    ports:
      - "2379:2379"
    networks:
      - milvus
    restart: always

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    ports:
      - "9010:9000"
      - "9011:9001"
    networks:
      - milvus
    restart: always

  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.4.0
    command: ["milvus", "run", "standalone"]
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
    ports:
      - "19530:19530"
      - "9092:9091"
    depends_on:
      - "etcd"
      - "minio"
    networks:
      - milvus
    restart: always

networks:
  milvus:
    driver: bridge

启动 Milvus,三个容器全部 Up 即为部署成功。

bash 复制代码
docker compose up -d
docker compose ps

3.2 部署Attu


接着我们部署Attu,用于可视化管理Milvus。依旧从镜像网站拉取,再改名字

bash 复制代码
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zilliz/attu:v2.4
bash 复制代码
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zilliz/attu:v2.4 docker.io/zilliz/attu:v2.4

启动可视化工具

bash 复制代码
docker run -d --name attu -p 8088:3000 zilliz/attu:v2.4

此时我们总共启动了四个docker容器

访问:http://IP地址:8088,连接参数为服务器IP地址,端口为milvus部署的端口,账号密码为空,连接成功即可。

四、测试场景


4.1 创建个人知识库


下面我们以创建法律知识库来做示例

先创建一个法律知识集合law_collection。其中主键id选择自增;向量字段为后续需要检索的字段,类型为float vector,长度即1024,例如我这的law_vector即为法律正文的向量字段;其余字段自定义。

给需要检索的字段增加索引

创建完后点击状态处的字样加载到内存,只有被加载到内存中的集合才可以被检索

接着我们导入数据,导入数据分为页面导入和接口导入

页面导入数据

页面导入的数据为json格式,字段和我们创建字段保持一致即可,可以先从网站上下载模板,再填入数据

然后上传该json文件,刷新便可看见

接口插入数据

也可以通过接口http://IP地址:19530/v2/vectordb/entities/insert插入数据,请求体如下。其中collectionName为集合名称,data中字段和和我们创建字段保持一致

bash 复制代码
{
	"collectionName":"xxxxx",
	"data":[
		{
			"law_content":"xxxxx",
			"law_type":"xxxxxx",
			"law_vector":[]
		}
	]
}

插入成功将返回ids

4.2 数据检索


插入完成数据后,便可进行数据相似度检索

例如,我这边先利用Embedding模型生成有关于计算机犯罪的向量,理论上应该可以检索出相关的犯罪法律条文。

调用接口http://IP地址:19530/v2/vectordb/entities/search进行检索,其中请求体如下。collectionName为集合名称,data为转换需要检索的向量值,annsField表示向量值映射的字段,limit表示展示最匹配的前几条数据,outputFields表示结果需要展示的字段

bash 复制代码
{
	"collectionName":"law_collection",
	"data":[[xxx]] ,
	"annsField":"law_vector",
	"limit":3,
	"outputFields":["id","law_content","law_type"]
}

最终检索的效果如下,还是蛮准确的。至此,私有化法律RAG系统100%落地完成,后面就是对接业务

相关推荐
蕃茄田艺术1 小时前
学龄儿童创意画画怎么判断是否适合自己
人工智能·蕃茄田艺术
思-无-涯1 小时前
AI Agent技能编写与质量保障
人工智能·python
熊猫钓鱼>_>1 小时前
智能革命的巨浪——AI时代的社会重构与生存之道
大数据·人工智能·重构·架构·llm·agent·ai-native
美狐美颜SDK开放平台1 小时前
直播APP平台开发如何降低成本?视频美颜SDK方案解析
人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk·美颜api
百胜软件@百胜软件1 小时前
维达×百胜软件E3+订单协同平台项目正式启动,共筑智能履约新标杆
大数据·人工智能
doiito(Do It Together)1 小时前
我用 Rust 写了个 AI 媒体管家:Gliding Horse 赋能 media_agent,目标是让 ComfyUI 工作流彻底自动化
人工智能·架构·rust·媒体
qcx231 小时前
Agentic RAG不止能回答问题,已经能自动修复真实CVE漏洞了
人工智能·机器学习·ai·llm·脑信号
用户39483951075531 小时前
用一个 MCP 给你的 AI 装上长期记忆——从原理到配置全流程
人工智能
TanYYF1 小时前
spring ai入门教程一
java·人工智能·spring