1.概述

如果需要实现 RAG ,首先需要将数据进行分块向量化实现,下面就讲一下如何使用 milvus 实现向量化存储的过程。

2.实现过程

2.1 安装 milvus

milvus 是一个向量高性能的向量数据库。

安装过程比较简单

我们使用 docker-compose 运行就可以了

wget https://github.com/milvus-io/milvus/releases/download/v2.6.0/milvus-standalone-docker-compose.yml -O docker-compose.yml

执行 docker-compose up -d 就可以了。

image

我们可以通过控制台访问 milvus

访问地址 http://ip:9091/webui

image

milvus 和我们的普通数据库也差不多。

一样有数据库,表(milvus 叫做 集合)的概念。

2.2 创建springboot 项目

我使用的spring-ai 版本是最新的 1.0.1
引入必要的依赖

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
		<!--向量数据库的依赖-->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-vector-store-milvus</artifactId>
        </dependency>
		<!--智谱清言的依赖-->
		 <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-zhipuai</artifactId>
        </dependency>

2.3 增加配置

我们需要注意的是,使用智谱清言 需要知道以下几点:

1.如果需要使用 智谱清言 的 嵌入模型,他的向量化是需要将 输入 发送到智谱的嵌入模型进行词嵌入的,这个嵌入是需要收费的,因此之后,还是需要自定义嵌入模型。

2.需要了解向量模型的维度和最大token数量
https://docs.bigmodel.cn/cn/guide/models/embedding/embedding-3
可以自定义维度,维度最小 64维 最大维度 2048 维,最大支持 6000个汉字左右。
https://docs.bigmodel.cn/cn/guide/models/embedding/embedding-2
维度 1024 维度,最大支持 6000个汉字左右。

  • 智谱ai 的配置
spring:
  ai:
    zhipuai:
	  //需要去智谱AI网站申请
      api-key: ${key}
      embedding: Embedding-2
  • milvus 配置
spring:
  ai:
    zhipuai:
      api-key: ${key}
      embedding: Embedding-2
    vectorstore:
      milvus:
        client:
          host: "192.168.2.14"
          port: 19530
          username: "root"
          password: "Milvus"
        databaseName: "knowledge"
        collectionName: "mydoc"
        embeddingDimension: 1024
        initializeSchema: true
        indexType: HNSW
		# 余弦相似度
        metricType: COSINE

注意 这里我们需要 指定 initializeSchema 为 true,这个作用是在启动应用的时候,spring 会自动帮我们创建数据集。

image

2.4 实现数据向量化

当我们做好配置后,我们就可以着手写我们的程序了。

@Autowired
    public  VectorStore vectorStore;


    @GetMapping("/addDoc")
    public ResponseEntity <String> addDoc(){


        List <Document> documents = List.of(
                new Document("人工智能在医疗领域的应用正在改变诊断和治疗方式,从影像识别到个性化药物,AI技术为患者带来更好的医疗服务。"),
                new Document("量子计算的发展有望解决传统计算机无法处理的复杂问题,为密码学、材料科学和药物研发等领域带来革命性突破。"),
                new Document("5G网络的普及正在推动物联网、自动驾驶和智慧城市的发展,为数字社会奠定基础。"),
                new Document("区块链技术不仅应用于加密货币,还在供应链管理、数字身份验证和智能合约等领域展现出巨大潜力。"),
                new Document("虚拟现实和增强现实技术正在改变娱乐、教育和远程工作方式,提供沉浸式体验。"),
                new Document("日本京都的古老寺庙与现代都市完美融合,春季樱花和秋季红叶吸引了来自世界各地的游客。"),
                new Document("意大利托斯卡纳的田园风光、葡萄园和中世纪小镇构成了迷人的文化景观,是美食和艺术爱好者的天堂。"),
                new Document("新西兰南岛的壮丽自然景观,包括冰川、峡湾和湖泊,为户外运动爱好者提供了绝佳的目的地。"),
                new Document("秘鲁马丘比丘是印加文明的瑰宝,这座古老的城市遗址坐落在安第斯山脉之中,令人叹为观止。"),
                new Document("挪威的峡湾地区以其壮观的瀑布、陡峭的悬崖和宁静的水域而闻名,是观赏极光的理想之地。"));

        vectorStore.add(documents);


        return ResponseEntity.ok("Added Documents");
    }

我们将这些数据进行向量化,这些数据我是通过ai 帮我生成的。

2.5 实现向量查询

@GetMapping("/search")
    public ResponseEntity <List<Document>> search(@RequestParam("query")String query){
        List<Document> results = this.vectorStore.similaritySearch(SearchRequest.builder().query(query).topK(2).build());
        return ResponseEntity.ok(results);
    }

查询结果

image

我们可以看到查询的相关度和打分都出来了。

整体来讲,配置的过程麻烦一点,通过引入 spring ai 的向量操作接口,还是挺方便的, 我们这个是引用了 智谱清言的向量模型,我们还是可以通过使用 将向量模型本地化。

posted on 2025-08-28 10:43  自由港  阅读(84)  评论(0)    收藏  举报