零根本学习Spring AI Java AI使用向量数据库Redis检索增强天生 RAG
要使用向量数据库的原因:数据通常黑白布局化的,这就意味着它没有由界说精良的架构去描述。非布局化数据一般包括文本段落,图像,视频或音频。存储和查询非布局化数据的一种方法是使用向量嵌入。
什么是向量? 在机器学习和人工智能AI中,向量是体现数据的数字序列。它们是模型的输入和输出,以数字形式封装根本信息。矢量将非布局化数据(如文本,图像,视频或音频)转换为机器学习模型可以处理的格式。
增强传统搜刮查询。传统的关键字或词汇搜刮查询依赖于单词或短语的准确匹配,这大概会受到限制。相比之下,向量搜刮或语义搜刮利用了向量嵌入中捕捉的丰富信息。通过将数据映射到向量空间中,相似的项目根据其含义彼此靠近放置。这种方法允许更正确和有意义的搜刮结果,由于它考虑了查询的上下文和语义内容,而不仅仅是使用简直切的单词。
零根本学习Spring AI Java AI使用向量数据库postgresql 检索增强天生 RAG
零根本学习Spring AI Java AI SpringBoot AI调用大模型OpenAi Ollama集成大模型
本地部署大模型,不须要GPU就能玩本地模型-亲测成功
### 向量检索
向量检索(Vector Search)的核心原理是通过将文本或数据体现为高维向量,并在查询时根据向量的相似度举行搜刮。
- 检索的核心是将文本或数据转换成向量,在高维向量空间中查找与查询最相似的向量。
- 在存储数据时将指定的字段通过嵌入模型天生了向量。
- 在检索时,查询文本被向量化,然后与 Redis 中存储的向量举行相似度比力,找到相似度最高的向量(即相关的文档)。
Redis向量数据库
Redis 是一个开源(BSD 允许)的内存数据布局存储,用作数据库、缓存、消息代理和流式处理引擎。Redis 提供数据布局,例如字符串、哈希、列表、集合、带范围查询的有序集合、位图、超对数日记、地理空间索引和流。
Redis 搜刮和查询 扩展了 Redis OSS 的核心功能,并允许您将 Redis 用作向量数据库
- 在哈希或 JSON 文档中存储向量和关联的元数据
- 检索向量
- 执行向量搜刮
解读详细向量化过程
当你将 JSON 中的字段存入 Redis 时,向量化工具(例如 vectorStore)会将指定的字段转换为高维向量。每个字段的内容会通过某种嵌入模型(如 Word2Vec、BERT、OpenAI Embeddings 等)转换成向量体现。每个向量体现的是该字段内容的语义特征。
当执行 SearchRequest.query(message) 时,系统会将输入的 message 转换为一个查询向量。这一步是通过同样的嵌入模型,将查询文本转换为与存储在 Redis 中雷同维度的向量。
- 相似度匹配
vectorStore.similaritySearch(request) 函数使用了一个向量相似度盘算方法来查找最相似的向量。这通常是通过 余弦相似度 或 欧几里得间隔 来度量查询向量和存储向量之间的间隔。然后返回与查询最相似的前 K 个文档,即 withTopK(topK) 所指定的 K 个最相关的结果。
- 返回匹配的文档
匹配的结果是根据相似度得分排序的 List。这些文档是你最初存储在 Redis 中的记录,包含了 JSON 中指定的字段。
环境安装
须要安装Redis Stack
docker运行Redis Stack
官方地址:https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/docker/
- redis/redis-stack包含 Redis Stack 服务器和 Redis Insight。此容器最适合本地开辟,由于您可以使用嵌入式 Redis Insight 来可视化数据。
- redis/redis-stack-server仅提供 Redis Stack 服务器。此容器最适合生产部署。
docker启动redis-stack
- docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest
复制代码 欣赏器访问redis可视化界面:http://127.0.0.1:8001
创建项目


maven的pom.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>3.3.5</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.example</groupId>
- <artifactId>springai</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>springai</name>
- <description>springai</description>
- <properties>
- <java.version>23</java.version>
- </properties>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.ai</groupId>
- <artifactId>spring-ai-bom</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.ai</groupId>
- <artifactId>spring-ai-redis-store-spring-boot-starter</artifactId>
- </dependency>
- <!-- <dependency>-->
- <!-- <groupId>org.springframework.ai</groupId>-->
- <!-- <artifactId>spring-ai-openai-spring-boot-starter</artifactId>-->
- <!-- </dependency>-->
- <dependency>
- <groupId>org.springframework.ai</groupId>
- <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- <repositories>
- <repository>
- <id>spring-milestones</id>
- <name>Spring Milestones</name>
- <url>https://repo.spring.io/milestone</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- <repository>
- <id>spring-snapshots</id>
- <name>Spring Snapshots</name>
- <url>https://repo.spring.io/snapshot</url>
- <releases>
- <enabled>false</enabled>
- </releases>
- </repository>
- </repositories>
- </project>
复制代码 设置Redis连接信息
- spring.application.name=springai
- spring.ai.vectorstore.redis.initialize-schema=true
- spring.ai.vectorstore.redis.uri=redis://192.168.18.97:6379
- spring.ai.vectorstore.redis.index=default-index
- spring.ai.vectorstore.redis.prefix=default:
- spring.ai.openai.api-key=34223242432424324
- spring.ai.vectorstore.pgvector.index-type=HNSW
- spring.ai.vectorstore.pgvector.distance-type=COSINE_DISTANCE
- spring.ai.vectorstore.pgvector.dimensions=1536
- spring.ai.ollama.base-url=http://192.168.18.59:11434
- spring.ai.ollama.init.pull-model-strategy=never
- spring.ai.ollama.init.timeout=60s
- spring.ai.ollama.init.max-retries=1
- spring.ai.ollama.chat.options.model=llama3.1:latest
- spring.ai.ollama.chat.options.temperature=0.7
- spring.ai.ollama.embedding.enabled=true
- spring.ai.ollama.embedding.options.model=llama3.1-instruct:latest
复制代码 代码使用如下
- package com.example.springai.controller;
- import org.springframework.ai.document.Document;
- import org.springframework.ai.embedding.EmbeddingModel;
- import org.springframework.ai.embedding.EmbeddingResponse;
- import org.springframework.ai.vectorstore.SearchRequest;
- import org.springframework.ai.vectorstore.VectorStore;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.List;
- import java.util.Map;
- @RestController
- class AIController {
- @Autowired
- VectorStore vectorStore;
- @GetMapping("/ai")
- void ai() {
- List<Document> documents = List.of(
- new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),
- new Document("The World is Big and Salvation Lurks Around the Corner"),
- new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));
- // Add the documents to Redis
- vectorStore.add(documents);
- // Retrieve documents similar to a query
- List<Document> results = this.vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
- }
- }
复制代码 运行项目
访问接口:http://localhost:8080/ai
查看生存到Redis里的数据
参考链接:
http://www.liuhaihua.cn/archives/711448.html
https://mp.weixin.qq.com/s?__biz=MzAxMjY5NDU2Ng==&mid=2651869668&idx=1&sn=894bd454f055fa4a80d6cad8cfdf51ed&chksm=81e7bab8410a46d987098c55234834796d0ef8ffd1b3495029b33ac45807fa00364d39aeff93&scene=27
https://blog.csdn.net/u011046509/article/details/138292597
https://blog.csdn.net/rubys007/article/details/140561477
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |