diff --git a/pom.xml b/pom.xml
index bc950bf..9e28d15 100644
--- a/pom.xml
+++ b/pom.xml
@@ -105,6 +105,21 @@
spring-ai-markdown-document-reader
1.0.0-M6
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+ org.postgresql
+ postgresql
+ runtime
+
+
+ org.springframework.ai
+ spring-ai-pgvector-store
+ 1.0.0-M6
+
diff --git a/src/main/java/com/huangge1199/aiagent/LongAiAgentApplication.java b/src/main/java/com/huangge1199/aiagent/LongAiAgentApplication.java
index 8ab3ce0..c9d81e1 100644
--- a/src/main/java/com/huangge1199/aiagent/LongAiAgentApplication.java
+++ b/src/main/java/com/huangge1199/aiagent/LongAiAgentApplication.java
@@ -1,9 +1,13 @@
package com.huangge1199.aiagent;
+import org.springframework.ai.autoconfigure.vectorstore.pgvector.PgVectorStoreAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-@SpringBootApplication
+/**
+ * @author hyy
+ */
+@SpringBootApplication(exclude = PgVectorStoreAutoConfiguration.class)
public class LongAiAgentApplication {
public static void main(String[] args) {
diff --git a/src/main/java/com/huangge1199/aiagent/Service/DBService.java b/src/main/java/com/huangge1199/aiagent/Service/DBService.java
new file mode 100644
index 0000000..a40cc41
--- /dev/null
+++ b/src/main/java/com/huangge1199/aiagent/Service/DBService.java
@@ -0,0 +1,15 @@
+package com.huangge1199.aiagent.Service;
+
+import org.springframework.ai.document.Document;
+
+import java.util.List;
+
+/**
+ * DBService
+ *
+ * @author huangge1199
+ * @since 2025/5/27 10:46:40
+ */
+public interface DBService {
+ List similaritySearch();
+}
diff --git a/src/main/java/com/huangge1199/aiagent/Service/impl/DBServiceImpl.java b/src/main/java/com/huangge1199/aiagent/Service/impl/DBServiceImpl.java
new file mode 100644
index 0000000..14a9953
--- /dev/null
+++ b/src/main/java/com/huangge1199/aiagent/Service/impl/DBServiceImpl.java
@@ -0,0 +1,37 @@
+package com.huangge1199.aiagent.Service.impl;
+
+import com.huangge1199.aiagent.Service.DBService;
+import jakarta.annotation.Resource;
+import org.springframework.ai.document.Document;
+import org.springframework.ai.vectorstore.SearchRequest;
+import org.springframework.ai.vectorstore.VectorStore;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * DBServiceImpl
+ *
+ * @author huangge1199
+ * @since 2025/5/27 10:46:56
+ */
+@Service
+public class DBServiceImpl implements DBService {
+
+ @Resource
+ VectorStore pgVectorVectorStore;
+
+
+ @Override
+ public List similaritySearch() {
+ List 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")));
+ // 添加文档
+ pgVectorVectorStore.add(documents);
+ // 相似度查询
+ return pgVectorVectorStore.similaritySearch(SearchRequest.builder().query("Spring").topK(5).build());
+ }
+}
diff --git a/src/main/java/com/huangge1199/aiagent/config/PgVectorVectorStoreConfig.java b/src/main/java/com/huangge1199/aiagent/config/PgVectorVectorStoreConfig.java
new file mode 100644
index 0000000..a0c1782
--- /dev/null
+++ b/src/main/java/com/huangge1199/aiagent/config/PgVectorVectorStoreConfig.java
@@ -0,0 +1,55 @@
+package com.huangge1199.aiagent.config;
+
+import com.huangge1199.aiagent.rag.DocumentLoaderUtils;
+import jakarta.annotation.Resource;
+import org.springframework.ai.embedding.EmbeddingModel;
+import org.springframework.ai.vectorstore.VectorStore;
+import org.springframework.ai.vectorstore.pgvector.PgVectorStore;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import static org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgDistanceType.COSINE_DISTANCE;
+import static org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgIndexType.HNSW;
+
+/**
+ * pgConfi
+ *
+ * @author huangge1199
+ * @since 2025/5/27 9:52:30
+ */
+@Configuration
+public class PgVectorVectorStoreConfig {
+
+ @Resource
+ private DocumentLoaderUtils documentLoaderUtils;
+
+ @Bean
+ public VectorStore vectorStore(JdbcTemplate jdbcTemplate, @Qualifier("ollamaEmbeddingModel") EmbeddingModel embeddingModel) {
+ // 设置向量维度,默认为模型维度或1536
+ // 设置距离类型,默认为 COSINE_DISTANCE
+ // 设置索引类型,默认为 HNSW
+ // 是否初始化模式,默认为 false
+ // 设置模式名称,默认为 "public"
+ // 设置向量表名称,默认为 "vector_store"
+ // 设置最大文档批处理大小,默认为 10000
+ return PgVectorStore.builder(jdbcTemplate, embeddingModel)
+ // 设置向量维度,默认为模型维度或1536
+ .dimensions(1024)
+ // 设置距离类型,默认为 COSINE_DISTANCE
+ .distanceType(COSINE_DISTANCE)
+ // 设置索引类型,默认为 HNSW
+ .indexType(HNSW)
+ // 是否初始化模式,默认为 false
+ .initializeSchema(true)
+ // 设置模式名称,默认为 "public"
+ .schemaName("public")
+ // 设置向量表名称,默认为 "vector_store"
+ .vectorTableName("vector_store")
+ // 设置最大文档批处理大小,默认为 10000
+ .maxDocumentBatchSize(10000)
+ .build();
+ }
+}
+
diff --git a/src/main/java/com/huangge1199/aiagent/controller/DBController.java b/src/main/java/com/huangge1199/aiagent/controller/DBController.java
new file mode 100644
index 0000000..0e73466
--- /dev/null
+++ b/src/main/java/com/huangge1199/aiagent/controller/DBController.java
@@ -0,0 +1,35 @@
+package com.huangge1199.aiagent.controller;
+
+import com.huangge1199.aiagent.Service.DBService;
+import com.huangge1199.aiagent.common.R;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import org.springframework.ai.document.Document;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * DBController
+ *
+ * @author huangge1199
+ * @since 2025/5/27 10:37:25
+ */
+@RestController
+@RequestMapping("/db")
+@Tag(name = "数据库相关")
+public class DBController {
+
+ @Resource
+ private DBService dbService;
+
+ @PostMapping("/similaritySearch")
+ @Operation(summary = "相似度查询")
+ public R> similaritySearch() {
+ List results = dbService.similaritySearch();
+ return R.ok(results);
+ }
+}
diff --git a/src/main/java/com/huangge1199/aiagent/rag/RagConfig.java b/src/main/java/com/huangge1199/aiagent/rag/RagConfig.java
index 2ab8d75..121f97b 100644
--- a/src/main/java/com/huangge1199/aiagent/rag/RagConfig.java
+++ b/src/main/java/com/huangge1199/aiagent/rag/RagConfig.java
@@ -2,16 +2,9 @@ package com.huangge1199.aiagent.rag;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
-import org.springframework.ai.document.Document;
-import org.springframework.ai.embedding.EmbeddingModel;
-import org.springframework.ai.vectorstore.SimpleVectorStore;
-import org.springframework.ai.vectorstore.VectorStore;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import java.util.List;
-
/**
* RagConfig
*
@@ -35,17 +28,4 @@ public class RagConfig {
return builder.defaultSystem("你将作为一名恋爱大师,对于用户的问题作出解答")
.build();
}
-
- @Bean
- VectorStore vectorStore(@Qualifier("ollamaEmbeddingModel") EmbeddingModel embeddingModel) {
- SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(embeddingModel).build();
-// // 加载文档
-// List documentList = documentLoaderUtils.loadMarkdowns();
-// // 自主切分文档
-// List splitDocuments = myTokenTextSplitter.splitCustomized(documentList);
-// // 自动补充关键词元信息
-// List enrichedDocuments = myKeywordEnricher.enrichDocuments(documentList);
-// simpleVectorStore.add(enrichedDocuments);
- return simpleVectorStore;
- }
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 907fe40..b3640e9 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -12,6 +12,12 @@ spring:
base-url: http://192.168.188.2:11435
chat:
model: gemma3:1b
+ vectorstore:
+ pgvector:
+ index-type: HNSW
+ distance-type: COSINE_DISTANCE
+ dimensions: 1536
+ max-document-batch-size: 10000
server:
port: 8123
servlet: