85 lines
3.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
/**
* EmbeddingModelOllama使用配置项 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();
}
}