Commit c789418a7bd9aedd1097de1b160141b7dded92eb
1 parent
e5025044
feat:【AI 大模型】依赖 spring ai 升级到 1.0.0
Showing
10 changed files
with
56 additions
and
51 deletions
yudao-module-ai/pom.xml
| ... | ... | @@ -19,7 +19,8 @@ |
| 19 | 19 | 国外:OpenAI、Ollama、Midjourney、StableDiffusion、Suno |
| 20 | 20 | </description> |
| 21 | 21 | <properties> |
| 22 | - <spring-ai.version>1.0.0-M6</spring-ai.version> | |
| 22 | + <spring-ai.version>1.0.0</spring-ai.version> | |
| 23 | + <alibaba-ai.version>1.0.0.2</alibaba-ai.version> | |
| 23 | 24 | <tinyflow.version>1.0.2</tinyflow.version> |
| 24 | 25 | </properties> |
| 25 | 26 | |
| ... | ... | @@ -75,65 +76,66 @@ |
| 75 | 76 | <!-- Spring AI Model 模型接入 --> |
| 76 | 77 | <dependency> |
| 77 | 78 | <groupId>org.springframework.ai</groupId> |
| 78 | - <artifactId>spring-ai-openai-spring-boot-starter</artifactId> | |
| 79 | + <artifactId>spring-ai-starter-model-openai</artifactId> | |
| 79 | 80 | <version>${spring-ai.version}</version> |
| 80 | 81 | </dependency> |
| 81 | 82 | <dependency> |
| 82 | 83 | <groupId>org.springframework.ai</groupId> |
| 83 | - <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId> | |
| 84 | + <artifactId>spring-ai-starter-model-azure-openai</artifactId> | |
| 84 | 85 | <version>${spring-ai.version}</version> |
| 85 | 86 | </dependency> |
| 86 | 87 | <dependency> |
| 87 | 88 | <groupId>org.springframework.ai</groupId> |
| 88 | - <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> | |
| 89 | + <artifactId>spring-ai-starter-model-ollama</artifactId> | |
| 89 | 90 | <version>${spring-ai.version}</version> |
| 90 | 91 | </dependency> |
| 91 | 92 | <dependency> |
| 92 | 93 | <groupId>org.springframework.ai</groupId> |
| 93 | - <artifactId>spring-ai-stability-ai-spring-boot-starter</artifactId> | |
| 94 | + <artifactId>spring-ai-starter-model-stability-ai</artifactId> | |
| 94 | 95 | <version>${spring-ai.version}</version> |
| 95 | 96 | </dependency> |
| 96 | 97 | <dependency> |
| 97 | 98 | <!-- 通义千问 --> |
| 98 | 99 | <groupId>com.alibaba.cloud.ai</groupId> |
| 99 | - <artifactId>spring-ai-alibaba-starter</artifactId> | |
| 100 | - <version>${spring-ai.version}.1</version> | |
| 100 | + <artifactId>spring-ai-alibaba-starter-dashscope</artifactId> | |
| 101 | + <version>${alibaba-ai.version}</version> | |
| 101 | 102 | </dependency> |
| 102 | 103 | <dependency> |
| 103 | 104 | <!-- 文心一言 --> |
| 104 | - <groupId>org.springframework.ai</groupId> | |
| 105 | - <artifactId>spring-ai-qianfan-spring-boot-starter</artifactId> | |
| 106 | - <version>${spring-ai.version}</version> | |
| 105 | + <groupId>org.springaicommunity</groupId> | |
| 106 | + <artifactId>qianfan-spring-boot-starter</artifactId> | |
| 107 | + <version>1.0.0</version> | |
| 107 | 108 | </dependency> |
| 108 | 109 | <dependency> |
| 109 | 110 | <!-- 智谱 GLM --> |
| 110 | 111 | <groupId>org.springframework.ai</groupId> |
| 111 | - <artifactId>spring-ai-zhipuai-spring-boot-starter</artifactId> | |
| 112 | + <artifactId>spring-ai-starter-model-zhipuai</artifactId> | |
| 112 | 113 | <version>${spring-ai.version}</version> |
| 113 | 114 | </dependency> |
| 114 | 115 | <dependency> |
| 115 | 116 | <groupId>org.springframework.ai</groupId> |
| 116 | - <artifactId>spring-ai-minimax-spring-boot-starter</artifactId> | |
| 117 | + <artifactId>spring-ai-starter-model-minimax</artifactId> | |
| 117 | 118 | <version>${spring-ai.version}</version> |
| 118 | 119 | </dependency> |
| 119 | 120 | <dependency> |
| 120 | - <groupId>org.springframework.ai</groupId> | |
| 121 | - <artifactId>spring-ai-moonshot-spring-boot-starter</artifactId> | |
| 122 | - <version>${spring-ai.version}</version> | |
| 121 | + <!-- 月之暗灭 --> | |
| 122 | + <groupId>org.springaicommunity</groupId> | |
| 123 | + <artifactId>moonshot-spring-boot-starter</artifactId> | |
| 124 | + <version>1.0.0</version> | |
| 123 | 125 | </dependency> |
| 124 | 126 | |
| 125 | 127 | <!-- 向量存储:https://db-engines.com/en/ranking/vector+dbms --> |
| 126 | 128 | <dependency> |
| 127 | 129 | <!-- Qdrant:https://qdrant.tech/ --> |
| 128 | 130 | <groupId>org.springframework.ai</groupId> |
| 129 | - <artifactId>spring-ai-qdrant-store</artifactId> | |
| 131 | + <artifactId>spring-ai-starter-vector-store-qdrant</artifactId> | |
| 130 | 132 | <version>${spring-ai.version}</version> |
| 131 | 133 | </dependency> |
| 132 | 134 | |
| 133 | 135 | <dependency> |
| 134 | 136 | <!-- Redis:https://redis.io/docs/latest/develop/get-started/vector-database/ --> |
| 135 | 137 | <groupId>org.springframework.ai</groupId> |
| 136 | - <artifactId>spring-ai-redis-store</artifactId> | |
| 138 | + <artifactId>spring-ai-starter-vector-store-redis</artifactId> | |
| 137 | 139 | <version>${spring-ai.version}</version> |
| 138 | 140 | </dependency> |
| 139 | 141 | <dependency> |
| ... | ... | @@ -144,7 +146,7 @@ |
| 144 | 146 | <dependency> |
| 145 | 147 | <!-- Milvus:https://milvus.io/ --> |
| 146 | 148 | <groupId>org.springframework.ai</groupId> |
| 147 | - <artifactId>spring-ai-milvus-store</artifactId> | |
| 149 | + <artifactId>spring-ai-starter-vector-store-milvus</artifactId> | |
| 148 | 150 | <version>${spring-ai.version}</version> |
| 149 | 151 | <exclusions> |
| 150 | 152 | <!-- 解决和 logback 的日志冲突 --> | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/config/AiAutoConfiguration.java
| ... | ... | @@ -14,10 +14,6 @@ import cn.iocoder.yudao.module.ai.framework.ai.core.model.siliconflow.SiliconFlo |
| 14 | 14 | import cn.iocoder.yudao.module.ai.framework.ai.core.model.suno.api.SunoApi; |
| 15 | 15 | import cn.iocoder.yudao.module.ai.framework.ai.core.model.xinghuo.XingHuoChatModel; |
| 16 | 16 | import lombok.extern.slf4j.Slf4j; |
| 17 | -import org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusServiceClientProperties; | |
| 18 | -import org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusVectorStoreProperties; | |
| 19 | -import org.springframework.ai.autoconfigure.vectorstore.qdrant.QdrantVectorStoreProperties; | |
| 20 | -import org.springframework.ai.autoconfigure.vectorstore.redis.RedisVectorStoreProperties; | |
| 21 | 17 | import org.springframework.ai.embedding.BatchingStrategy; |
| 22 | 18 | import org.springframework.ai.embedding.TokenCountBatchingStrategy; |
| 23 | 19 | import org.springframework.ai.model.tool.ToolCallingManager; |
| ... | ... | @@ -26,6 +22,10 @@ import org.springframework.ai.openai.OpenAiChatOptions; |
| 26 | 22 | import org.springframework.ai.openai.api.OpenAiApi; |
| 27 | 23 | import org.springframework.ai.tokenizer.JTokkitTokenCountEstimator; |
| 28 | 24 | import org.springframework.ai.tokenizer.TokenCountEstimator; |
| 25 | +import org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusServiceClientProperties; | |
| 26 | +import org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreProperties; | |
| 27 | +import org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreProperties; | |
| 28 | +import org.springframework.ai.vectorstore.redis.autoconfigure.RedisVectorStoreProperties; | |
| 29 | 29 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| 30 | 30 | import org.springframework.boot.context.properties.EnableConfigurationProperties; |
| 31 | 31 | import org.springframework.context.annotation.Bean; | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/siliconflow/SiliconFlowImageModel.java
| ... | ... | @@ -89,7 +89,7 @@ public class SiliconFlowImageModel implements ImageModel { |
| 89 | 89 | var observationContext = ImageModelObservationContext.builder() |
| 90 | 90 | .imagePrompt(imagePrompt) |
| 91 | 91 | .provider(SiliconFlowApiConstants.PROVIDER_NAME) |
| 92 | - .requestOptions(imagePrompt.getOptions()) | |
| 92 | + .imagePrompt(imagePrompt) | |
| 93 | 93 | .build(); |
| 94 | 94 | |
| 95 | 95 | return ImageModelObservationDocumentation.IMAGE_MODEL_OPERATION | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/image/AiImageServiceImpl.java
| ... | ... | @@ -9,9 +9,6 @@ import cn.hutool.core.util.ObjUtil; |
| 9 | 9 | import cn.hutool.core.util.StrUtil; |
| 10 | 10 | import cn.hutool.extra.spring.SpringUtil; |
| 11 | 11 | import cn.hutool.http.HttpUtil; |
| 12 | -import cn.iocoder.yudao.module.ai.enums.model.AiPlatformEnum; | |
| 13 | -import cn.iocoder.yudao.module.ai.framework.ai.core.model.midjourney.api.MidjourneyApi; | |
| 14 | -import cn.iocoder.yudao.module.ai.framework.ai.core.model.siliconflow.SiliconFlowImageOptions; | |
| 15 | 12 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 16 | 13 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 17 | 14 | import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageDrawReqVO; |
| ... | ... | @@ -24,17 +21,20 @@ import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; |
| 24 | 21 | import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; |
| 25 | 22 | import cn.iocoder.yudao.module.ai.dal.mysql.image.AiImageMapper; |
| 26 | 23 | import cn.iocoder.yudao.module.ai.enums.image.AiImageStatusEnum; |
| 24 | +import cn.iocoder.yudao.module.ai.enums.model.AiPlatformEnum; | |
| 25 | +import cn.iocoder.yudao.module.ai.framework.ai.core.model.midjourney.api.MidjourneyApi; | |
| 26 | +import cn.iocoder.yudao.module.ai.framework.ai.core.model.siliconflow.SiliconFlowImageOptions; | |
| 27 | 27 | import cn.iocoder.yudao.module.ai.service.model.AiModelService; |
| 28 | 28 | import cn.iocoder.yudao.module.infra.api.file.FileApi; |
| 29 | 29 | import com.alibaba.cloud.ai.dashscope.image.DashScopeImageOptions; |
| 30 | 30 | import jakarta.annotation.Resource; |
| 31 | 31 | import lombok.extern.slf4j.Slf4j; |
| 32 | +import org.springaicommunity.qianfan.QianFanImageOptions; | |
| 32 | 33 | import org.springframework.ai.image.ImageModel; |
| 33 | 34 | import org.springframework.ai.image.ImageOptions; |
| 34 | 35 | import org.springframework.ai.image.ImagePrompt; |
| 35 | 36 | import org.springframework.ai.image.ImageResponse; |
| 36 | 37 | import org.springframework.ai.openai.OpenAiImageOptions; |
| 37 | -import org.springframework.ai.qianfan.QianFanImageOptions; | |
| 38 | 38 | import org.springframework.ai.stabilityai.api.StabilityAiImageOptions; |
| 39 | 39 | import org.springframework.ai.zhipuai.ZhiPuAiImageOptions; |
| 40 | 40 | import org.springframework.scheduling.annotation.Async; |
| ... | ... | @@ -140,10 +140,10 @@ public class AiImageServiceImpl implements AiImageService { |
| 140 | 140 | private static ImageOptions buildImageOptions(AiImageDrawReqVO draw, AiModelDO model) { |
| 141 | 141 | if (ObjUtil.equal(model.getPlatform(), AiPlatformEnum.OPENAI.getPlatform())) { |
| 142 | 142 | // https://platform.openai.com/docs/api-reference/images/create |
| 143 | - return OpenAiImageOptions.builder().withModel(model.getModel()) | |
| 144 | - .withHeight(draw.getHeight()).withWidth(draw.getWidth()) | |
| 145 | - .withStyle(MapUtil.getStr(draw.getOptions(), "style")) // 风格 | |
| 146 | - .withResponseFormat("b64_json") | |
| 143 | + return OpenAiImageOptions.builder().model(model.getModel()) | |
| 144 | + .height(draw.getHeight()).width(draw.getWidth()) | |
| 145 | + .style(MapUtil.getStr(draw.getOptions(), "style")) // 风格 | |
| 146 | + .responseFormat("b64_json") | |
| 147 | 147 | .build(); |
| 148 | 148 | } else if (ObjUtil.equal(model.getPlatform(), AiPlatformEnum.SILICON_FLOW.getPlatform())) { |
| 149 | 149 | // https://docs.siliconflow.cn/cn/api-reference/images/images-generations | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/util/AiUtils.java
| ... | ... | @@ -2,18 +2,18 @@ package cn.iocoder.yudao.module.ai.util; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.util.ObjUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | -import cn.iocoder.yudao.module.ai.enums.model.AiPlatformEnum; | |
| 6 | 5 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| 7 | 6 | import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; |
| 7 | +import cn.iocoder.yudao.module.ai.enums.model.AiPlatformEnum; | |
| 8 | 8 | import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions; |
| 9 | +import org.springaicommunity.moonshot.MoonshotChatOptions; | |
| 10 | +import org.springaicommunity.qianfan.QianFanChatOptions; | |
| 9 | 11 | import org.springframework.ai.azure.openai.AzureOpenAiChatOptions; |
| 10 | 12 | import org.springframework.ai.chat.messages.*; |
| 11 | 13 | import org.springframework.ai.chat.prompt.ChatOptions; |
| 12 | 14 | import org.springframework.ai.minimax.MiniMaxChatOptions; |
| 13 | -import org.springframework.ai.moonshot.MoonshotChatOptions; | |
| 14 | 15 | import org.springframework.ai.ollama.api.OllamaOptions; |
| 15 | 16 | import org.springframework.ai.openai.OpenAiChatOptions; |
| 16 | -import org.springframework.ai.qianfan.QianFanChatOptions; | |
| 17 | 17 | import org.springframework.ai.zhipuai.ZhiPuAiChatOptions; |
| 18 | 18 | |
| 19 | 19 | import java.util.Collections; |
| ... | ... | @@ -43,18 +43,18 @@ public class AiUtils { |
| 43 | 43 | switch (platform) { |
| 44 | 44 | case TONG_YI: |
| 45 | 45 | return DashScopeChatOptions.builder().withModel(model).withTemperature(temperature).withMaxToken(maxTokens) |
| 46 | - .withFunctions(toolNames).withToolContext(toolContext).build(); | |
| 46 | + .withToolNames(toolNames).withToolContext(toolContext).build(); | |
| 47 | 47 | case YI_YAN: |
| 48 | 48 | return QianFanChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens).build(); |
| 49 | 49 | case ZHI_PU: |
| 50 | 50 | return ZhiPuAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) |
| 51 | - .functions(toolNames).toolContext(toolContext).build(); | |
| 51 | + .toolNames(toolNames).toolContext(toolContext).build(); | |
| 52 | 52 | case MINI_MAX: |
| 53 | 53 | return MiniMaxChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) |
| 54 | - .functions(toolNames).toolContext(toolContext).build(); | |
| 54 | + .toolNames(toolNames).toolContext(toolContext).build(); | |
| 55 | 55 | case MOONSHOT: |
| 56 | 56 | return MoonshotChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) |
| 57 | - .functions(toolNames).toolContext(toolContext).build(); | |
| 57 | + .toolNames(toolNames).toolContext(toolContext).build(); | |
| 58 | 58 | case OPENAI: |
| 59 | 59 | case DEEP_SEEK: // 复用 OpenAI 客户端 |
| 60 | 60 | case DOU_BAO: // 复用 OpenAI 客户端 | ... | ... |
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/OpenAIChatModelTests.java
| ... | ... | @@ -25,10 +25,10 @@ public class OpenAIChatModelTests { |
| 25 | 25 | private final OpenAiChatModel chatModel = OpenAiChatModel.builder() |
| 26 | 26 | .openAiApi(OpenAiApi.builder() |
| 27 | 27 | .baseUrl("https://api.holdai.top") |
| 28 | - .apiKey("sk-aN6nWn3fILjrgLFT0fC4Aa60B72e4253826c77B29dC94f17") // apiKey | |
| 28 | + .apiKey("sk-PytRecQlmjEteoa2RRN6cGnwslo72UUPLQVNEMS6K9yjbmpD") // apiKey | |
| 29 | 29 | .build()) |
| 30 | 30 | .defaultOptions(OpenAiChatOptions.builder() |
| 31 | - .model(OpenAiApi.ChatModel.GPT_4_O) // 模型 | |
| 31 | + .model(OpenAiApi.ChatModel.GPT_4_1_NANO) // 模型 | |
| 32 | 32 | .temperature(0.7) |
| 33 | 33 | .build()) |
| 34 | 34 | .build(); | ... | ... |
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/TongYiChatModelTests.java
| ... | ... | @@ -22,14 +22,17 @@ import java.util.List; |
| 22 | 22 | */ |
| 23 | 23 | public class TongYiChatModelTests { |
| 24 | 24 | |
| 25 | - private final DashScopeChatModel chatModel = new DashScopeChatModel( | |
| 26 | - new DashScopeApi("sk-7d903764249848cfa912733146da12d1"), | |
| 27 | - DashScopeChatOptions.builder() | |
| 25 | + private final DashScopeChatModel chatModel = DashScopeChatModel.builder() | |
| 26 | + .dashScopeApi(DashScopeApi.builder() | |
| 27 | + .apiKey("sk-47aa124781be4bfb95244cc62f63f7d0") | |
| 28 | + .build()) | |
| 29 | + .defaultOptions( DashScopeChatOptions.builder() | |
| 28 | 30 | .withModel("qwen1.5-72b-chat") // 模型 |
| 29 | 31 | // .withModel("deepseek-r1") // 模型(deepseek-r1) |
| 30 | 32 | // .withModel("deepseek-v3") // 模型(deepseek-v3) |
| 31 | 33 | // .withModel("deepseek-r1-distill-qwen-1.5b") // 模型(deepseek-r1-distill-qwen-1.5b) |
| 32 | - .build()); | |
| 34 | + .build()) | |
| 35 | + .build(); | |
| 33 | 36 | |
| 34 | 37 | @Test |
| 35 | 38 | @Disabled | ... | ... |
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/image/OpenAiImageModelTests.java
| ... | ... | @@ -18,7 +18,7 @@ public class OpenAiImageModelTests { |
| 18 | 18 | |
| 19 | 19 | private final OpenAiImageModel imageModel = new OpenAiImageModel(OpenAiImageApi.builder() |
| 20 | 20 | .baseUrl("https://api.holdai.top") // apiKey |
| 21 | - .apiKey("sk-aN6nWn3fILjrgLFT0fC4Aa60B72e4253826c77B29dC94f17") | |
| 21 | + .apiKey("sk-PytRecQlmjEteoa2RRN6cGnwslo72UUPLQVNEMS6K9yjbmpD") | |
| 22 | 22 | .build()); |
| 23 | 23 | |
| 24 | 24 | @Test |
| ... | ... | @@ -26,8 +26,8 @@ public class OpenAiImageModelTests { |
| 26 | 26 | public void testCall() { |
| 27 | 27 | // 准备参数 |
| 28 | 28 | ImageOptions options = OpenAiImageOptions.builder() |
| 29 | - .withModel(OpenAiImageApi.ImageModel.DALL_E_2.getValue()) // 这个模型比较便宜 | |
| 30 | - .withHeight(256).withWidth(256) | |
| 29 | + .model(OpenAiImageApi.ImageModel.DALL_E_2.getValue()) // 这个模型比较便宜 | |
| 30 | + .height(256).width(256) | |
| 31 | 31 | .build(); |
| 32 | 32 | ImagePrompt prompt = new ImagePrompt("中国长城!", options); |
| 33 | 33 | ... | ... |
yudao-server/src/main/resources/application-dev.yaml
| ... | ... | @@ -6,8 +6,8 @@ server: |
| 6 | 6 | spring: |
| 7 | 7 | autoconfigure: |
| 8 | 8 | exclude: |
| 9 | - - org.springframework.ai.autoconfigure.vectorstore.qdrant.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建 | |
| 10 | - - org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建 | |
| 9 | + - org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建 | |
| 10 | + - org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建 | |
| 11 | 11 | # 数据源配置项 |
| 12 | 12 | datasource: |
| 13 | 13 | druid: # Druid 【监控】相关的全局配置 | ... | ... |
yudao-server/src/main/resources/application-local.yaml
| ... | ... | @@ -10,8 +10,8 @@ spring: |
| 10 | 10 | - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置 |
| 11 | 11 | - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置 |
| 12 | 12 | - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 |
| 13 | - - org.springframework.ai.autoconfigure.vectorstore.qdrant.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建 | |
| 14 | - - org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建 | |
| 13 | + - org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建 | |
| 14 | + - org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建 | |
| 15 | 15 | # 数据源配置项 |
| 16 | 16 | datasource: |
| 17 | 17 | druid: # Druid 【监控】相关的全局配置 | ... | ... |