向量化和向量数据库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);
    }


}
相关推荐
楚兴12 分钟前
MacBook M1 安装 OpenClaw 完整指南
人工智能·后端
JavaGuide21 分钟前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
吃虫子的人26 分钟前
记录使用Arthas修改线上源码重新加载的一次过程
java·arthas
Java编程爱好者36 分钟前
2026版Java面试八股文总结(春招+秋招+社招),建议收藏。
后端
朱昆鹏1 小时前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github
REDcker1 小时前
gRPC开发者快速入门
服务器·c++·后端·grpc
figo10tf1 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva1 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露1 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot