package com.superbiz.agent.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ai.document.MetadataMode; import org.springframework.ai.embedding.EmbeddingModel; import org.springframework.ai.openai.OpenAiEmbeddingModel; import org.springframework.ai.openai.OpenAiEmbeddingOptions; import org.springframework.ai.openai.api.OpenAiApi; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestClient; import org.springframework.web.reactive.function.client.WebClient; /** * SiliconFlow Embedding 配置(BGE-M3, OpenAI 兼容协议, 1024维) *

* Chat 走 DeepSeek、Embedding 走 SiliconFlow,两者都是 OpenAI 兼容但地址不同, * 因此单独为 SiliconFlow 创建 OpenAiApi + EmbeddingModel Bean。 */ @Configuration public class SiliconFlowEmbeddingConfig { private static final Logger log = LoggerFactory.getLogger(SiliconFlowEmbeddingConfig.class); @Value("${siliconflow.api-key}") private String apiKey; @Value("${siliconflow.base-url}") private String baseUrl; @Value("${siliconflow.embedding.model}") private String model; @Bean public OpenAiApi siliconFlowApi(RestClient.Builder restClientBuilder, WebClient.Builder webClientBuilder) { log.info("创建 SiliconFlow OpenAiApi: {}", baseUrl); return OpenAiApi.builder() .baseUrl(baseUrl) .apiKey(apiKey) .restClientBuilder(restClientBuilder) .build(); } @Bean public EmbeddingModel siliconFlowEmbeddingModel(OpenAiApi siliconFlowApi) { log.info("创建 SiliconFlow EmbeddingModel, model: {}", model); return new OpenAiEmbeddingModel(siliconFlowApi, MetadataMode.EMBED, OpenAiEmbeddingOptions.builder() .model(model) .build()); } }