向量化和向量数据库redisstack使用

向量化和向量数据库

向量存储官网地址: java2ai.com/docs/1.0.0....

向量是什么

向量: 表示具有大小和方向的量

文本向量化 Embedding Model

嵌入(Embedding)的工作原理是将文本、图像和视频转换为称为向量(Vectors)的浮点数数组。这些向 量旨在捕捉文本、图像和视频的含义,嵌入数组的长度称为向量的维度(Dimensionality)。

文本向量化(Text Vectorization)是指将人类可读的文本(如单词、句子、段落或整篇文档)转换为计算机可以处理的数值向量(通常是实数数组)的过程。这是自然语言处理(NLP)和机器学习中的关键预处理步骤,因为算法无法直接理解文字,但可以高效处理数字

为什么需要文本向量化?

  • 机器学习模型只能处理数值型输入。
  • 文本本身是离散符号,需映射到连续或离散的数值空间。
  • 向量化还能保留语义、语法或统计信息,提升模型效果。

向量数据库

向量存储官网地址: java2ai.com/docs/1.0.0....

阿里巴巴官网: help.aliyun.com/zh/model-st...

向量存储(VectorStore)是一种用于存储和检索高维向量数据的数据库或存储解决方案,它特别适用于处理那些经过嵌入模型转化后的数据。在 VectorStore 中,查询与传统关系数据库不同。它们执行相似性搜索,而不是精确匹配。向量数据库维度越高,查询精准度也越高,查询效果越好。

本次使用Redis8(RedisStack)作为向量数据库存储。

RedisStack当作向量存储

官网地址: docs.spring.io/spring-ai/r...

RedisStack免费云数据库地址: cloud.redis.io/#/databases

RedisStack: 是Redis Labs推出的 增强版Redis,不是Redis替代品,是基于原生Redis基础功能的拓展包,专为构建现代实时应用而生。

功能 Redis(标准版) Redis Stack
基础数据结构(String, List, Hash 等) ✅ 支持 ✅ 支持
持久化、复制、集群 ✅ 支持 ✅ 支持
全文搜索(类似 Elasticsearch) ❌ 不支持 ✅ 内置 RediSearch 模块
JSON 文档存储与查询 ❌ 需用 String + 应用层解析 ✅ 内置 RedisJSON 模块
概率数据结构(布隆过滤器、Top-K 等) ✅ 内置 RedisBloom 模块
时序数据处理 ❌(可用 Sorted Set 模拟) ✅ 内置 RedisTimeSeries 模块
向量相似性搜索(用于 AI/语义搜索) ✅ 内置 RedisVL / Vector Similarity Search (VSS)
图形数据库能力 ✅(通过 RediGraph 模块,部分版本包含)
可视化管理工具 ❌(需第三方工具) ✅ 自带 Redis Insight(Web UI,可查数据、监控、调试)

开发步骤

阿里巴巴官网: help.aliyun.com/zh/model-st...

创建module
改POM

引入spring-ai-starter-vector-store-redis依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.miao</groupId>
        <artifactId>SpringAIAlibaba-test01</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>SAA-08Embedding</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--  模型服务灵积  调用alibaba生态的协议 对标openai协议   -->
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
            <version>1.0.0.2</version>
        </dependency>

        <!--   向量数据库依赖 redisstack    -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-vector-store-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.38</version>
        </dependency>
    </dependencies>
</project>
改yml
yaml 复制代码
server:
  port: 8082
  servlet:
    encoding:
      enabled: true
      force: true
      charset: UTF-8

spring:
  application:
    name: SAA-07
  ai:
    dashscope:
      api-key: ${qwen-api-key}
      chat:
        options:
          model: qwen3-vl-flash
      emedding:
        options:
          model: text-embedding-v4
    vectorstore:
      redis:
        initialize-schema: true
        index-name: custom-indexhaha
        prefix: custom-index
  data:
    redis:
      host: redis-16002.c1.us-east1-2.gce.cloud.redislabs.com
      port: 16002
      password: password
启动类
typescript 复制代码
package com.miao;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SAA08EmbeddingApplication {
    public static void main(String[] args) {
        SpringApplication.run(SAA08EmbeddingApplication.class, args);
    }
}
业务类
typescript 复制代码
package com.miao.controller;

import com.alibaba.cloud.ai.dashscope.embedding.DashScopeEmbeddingOptions;
import jakarta.annotation.Resource;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.embedding.EmbeddingOptions;
import org.springframework.ai.embedding.EmbeddingRequest;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

@RestController
public class EmbeddingController {
    public static final String EMBEDDING_MODEL = "text-embedding-v4";
    @Resource
    private EmbeddingModel dashScopeEmbeddingModel;

    @Resource
    private VectorStore vectorStore;

    // 向量化文本
    @GetMapping(value = "/embedding")
    public Object embedding(@RequestParam(name = "text") String text) {
        // 向量化文本
        List<String> inputText = Arrays.asList(text);

        // 设定模型参数
        EmbeddingOptions embeddingOptions = DashScopeEmbeddingOptions.builder()
                .withModel(EMBEDDING_MODEL)
                .build();

        // 构建请求
        EmbeddingRequest embeddingRequest = new EmbeddingRequest(inputText, embeddingOptions);
        return dashScopeEmbeddingModel.call(embeddingRequest).getResult();
    }


    @GetMapping(value = "/addVectorStore")
    public String addVectorStore(@RequestParam(name = "text") String text) {
        vectorStore.add(List.of(new Document(text)));
        return "Text vector stored successfully.";
    }


    @GetMapping(value = "/getVectors")
    public List<Document> getVectors(@RequestParam(name = "text") String text) {
        SearchRequest searchRequest = SearchRequest.builder()
                .query(text)
                .topK(2)
                .build();
        return vectorStore.similaritySearch(searchRequest);
    }


}
相关推荐
rannn_1112 小时前
【Git教程】概述、常用命令、Git-IDEA集成
java·git·后端·intellij-idea
嘻哈baby2 小时前
NextCloud私有云盘完整部署指南
后端
Ray662 小时前
Linux 日志处理三剑客:grep、awk、sed
后端
前端小板凳2 小时前
前端-你学什么AI呀
ai编程
用户47949283569152 小时前
拆包、立边界、可发布:Gemini CLI 的 Monorepo 设计我学到了什么
aigc·agent·ai编程
苹果醋32 小时前
Java设计模式实战:从面向对象原则到架构设计的最佳实践
java·运维·spring boot·mysql·nginx
郑州光合科技余经理2 小时前
实战分享:如何构建东南亚高并发跑腿配送系统
java·开发语言·javascript·spring cloud·uni-app·c#·php
陈随易2 小时前
PostgreSQL v18发布,新增AIO uuidv7 OAuth等功能
前端·后端·程序员
yaoxin5211232 小时前
273. Java Stream API - Stream 中的中间操作:Mapping 操作详解
java·开发语言·python