Spring Boot 项目引入 下载仓库地址
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
Spring Boot项目 引入 Spring Ai Pgvector和OpenAi库
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId>
<version>${spring-ai.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-pgvector-store</artifactId>
</dependency>
PgVector : 开启扩展+ vector_store
向量表创建
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE IF NOT EXISTS vector_store (
id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
content text,
metadata json,
embedding vector(1536)
);
CREATE INDEX ON vector_store USING HNSW (embedding vector_cosine_ops);
Spring Boot : 配置application.yaml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/postgres
username: postgres
password: postgres798
ai:
openai:
base-url: https://api.siliconflow.cn
api-key: sk-xxxxxxxx
chat:
options:
model: deepseek-ai/DeepSeek-V3
max-tokens: 1024
temperature: 0.0
top-p: 1.0
embedding:
enabled: true
api-key: sk-xxxx
base-url: https://api.siliconflow.cn
options:
model: BAAI/bge-large-zh-v1.5
max-tokens: 512
dimensions: 1024
vectorstore:
pgvector:
distance-type: COSINE_DISTANCE
dimensions: 1024
max-document-batch-size: 10000
table-name: vector_store
index-type: hnsw
Spring 使用 Embedding + Vector Store 【pgVector】 接口
package com.kong.ai.api;
import com.kong.ai.common.dto.R;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
public class EmbeddingController {
private final EmbeddingModel embeddingModel;
private final VectorStore vectorStore;
@Autowired
public EmbeddingController(EmbeddingModel embeddingModel,VectorStore vectorStore) {
this.embeddingModel = embeddingModel;
this.vectorStore = vectorStore;
}
@GetMapping("/ai/embedding")
public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));
Document.builder().text(message).build();
return Map.of("embedding", embeddingResponse);
}
@GetMapping("/ai/embedding/vectorstore")
public Map vectorStore(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
List<Document> documents = List.of(
new Document(message));
vectorStore.add(documents);
return Map.of("embedding", "ok");
}
@GetMapping("/ai/embedding/vectorstore/query")
public R vectorStoreQuery(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
List<Document> results = this.vectorStore.similaritySearch(SearchRequest.builder().query(message).topK(5).build());
return R.success(Map.of("embedding", results));
}
}