85 lines
3.0 KiB
Java
85 lines
3.0 KiB
Java
package edu.whut.config;
|
||
|
||
import org.springframework.ai.embedding.EmbeddingModel;
|
||
import org.springframework.ai.ollama.OllamaChatModel;
|
||
import org.springframework.ai.ollama.OllamaEmbeddingModel;
|
||
import org.springframework.ai.ollama.api.OllamaApi;
|
||
import org.springframework.ai.ollama.api.OllamaOptions;
|
||
import org.springframework.ai.transformer.splitter.TokenTextSplitter;
|
||
import org.springframework.ai.vectorstore.SimpleVectorStore;
|
||
import org.springframework.ai.vectorstore.pgvector.PgVectorStore;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.context.annotation.Bean;
|
||
import org.springframework.context.annotation.Configuration;
|
||
import org.springframework.context.annotation.Primary;
|
||
import org.springframework.jdbc.core.JdbcTemplate;
|
||
|
||
/**
|
||
* 配置 Ollama 客户端、Embedding 模型、向量存储和文本拆分器等 Bean
|
||
* 注意(1.0.0-M6):
|
||
* - 不再使用 OllamaChatClient,改为 OllamaChatModel
|
||
* - Embedding 使用 EmbeddingModel 接口 + OllamaEmbeddingModel
|
||
* - PgVectorStore 与 SimpleVectorStore 使用 builder 方式创建
|
||
*/
|
||
@Configuration
|
||
public class OllamaConfig {
|
||
|
||
/**
|
||
* 创建 Ollama API 客户端,负责与 Ollama 服务的基础通信
|
||
*/
|
||
@Bean
|
||
public OllamaApi ollamaApi(@Value("${spring.ai.ollama.base-url}") String baseUrl) {
|
||
return new OllamaApi(baseUrl);
|
||
}
|
||
|
||
/**
|
||
* 对话模型;控制器里通过 OllamaOptions 指定具体 chat 模型(如 deepseek-r1:1.5b)
|
||
*/
|
||
@Bean
|
||
public OllamaChatModel ollamaChatModel(OllamaApi ollamaApi) {
|
||
// 如需设置默认对话模型,可在这里 .defaultOptions(OllamaOptions.builder().model("xxx").build())
|
||
return OllamaChatModel.builder()
|
||
.ollamaApi(ollamaApi)
|
||
.build();
|
||
}
|
||
|
||
/**
|
||
* 文本拆分器:基于 Token 切分
|
||
*/
|
||
@Bean
|
||
public TokenTextSplitter tokenTextSplitter() {
|
||
return new TokenTextSplitter();
|
||
}
|
||
|
||
/**
|
||
* EmbeddingModel(Ollama):使用配置项 spring.ai.rag.embed 指定 embedding 模型,如 nomic-embed-text
|
||
*/
|
||
@Bean
|
||
@Primary
|
||
public EmbeddingModel embeddingModel(
|
||
@Value("${spring.ai.rag.embed}") String embedModel,
|
||
OllamaApi ollamaApi) {
|
||
return OllamaEmbeddingModel.builder()
|
||
.ollamaApi(ollamaApi)
|
||
.defaultOptions(OllamaOptions.builder().model(embedModel).build())
|
||
.build();
|
||
}
|
||
|
||
/**
|
||
* 简单内存向量存储(in-memory)
|
||
*/
|
||
@Bean
|
||
public SimpleVectorStore vectorStore(EmbeddingModel embeddingModel) {
|
||
return SimpleVectorStore.builder(embeddingModel).build();
|
||
}
|
||
|
||
/**
|
||
* 基于 PostgreSQL pgvector 的持久化向量存储
|
||
* 如需自定义表名可追加 .vectorTableName("your_table")
|
||
*/
|
||
@Bean
|
||
public PgVectorStore pgVectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel embeddingModel) {
|
||
return PgVectorStore.builder(jdbcTemplate, embeddingModel).build();
|
||
}
|
||
}
|