diff --git a/backend/api-gateway/pom.xml b/backend/api-gateway/pom.xml
index c6284e6f..87c3cf4a 100644
--- a/backend/api-gateway/pom.xml
+++ b/backend/api-gateway/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../pom.xml
diff --git a/backend/pom.xml b/backend/pom.xml
index 682eaa06..8a7a795d 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -6,11 +6,11 @@
4.0.0
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
pom
- DataMatePlatform
+ DataMate
一站式数据工作平台,面向模型微调与RAG检索
diff --git a/backend/services/data-annotation-service/pom.xml b/backend/services/data-annotation-service/pom.xml
index a91d058c..387d7cb6 100644
--- a/backend/services/data-annotation-service/pom.xml
+++ b/backend/services/data-annotation-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/data-cleaning-service/pom.xml b/backend/services/data-cleaning-service/pom.xml
index 56b70fc5..9e622b49 100644
--- a/backend/services/data-cleaning-service/pom.xml
+++ b/backend/services/data-cleaning-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/data-collection-service/pom.xml b/backend/services/data-collection-service/pom.xml
index 9261ad74..d946b696 100644
--- a/backend/services/data-collection-service/pom.xml
+++ b/backend/services/data-collection-service/pom.xml
@@ -6,7 +6,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/data-evaluation-service/pom.xml b/backend/services/data-evaluation-service/pom.xml
index c976d19d..a572467b 100644
--- a/backend/services/data-evaluation-service/pom.xml
+++ b/backend/services/data-evaluation-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/data-management-service/pom.xml b/backend/services/data-management-service/pom.xml
index e6f0c16b..2b351077 100644
--- a/backend/services/data-management-service/pom.xml
+++ b/backend/services/data-management-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/data-synthesis-service/pom.xml b/backend/services/data-synthesis-service/pom.xml
index bc146a44..9a7baf9f 100644
--- a/backend/services/data-synthesis-service/pom.xml
+++ b/backend/services/data-synthesis-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/execution-engine-service/pom.xml b/backend/services/execution-engine-service/pom.xml
index 42f94843..58c4fcbe 100644
--- a/backend/services/execution-engine-service/pom.xml
+++ b/backend/services/execution-engine-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/main-application/pom.xml b/backend/services/main-application/pom.xml
index 33e48625..4fb6f00c 100644
--- a/backend/services/main-application/pom.xml
+++ b/backend/services/main-application/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/main-application/src/main/resources/application.yml b/backend/services/main-application/src/main/resources/application.yml
index 4becb3c6..51206ba9 100644
--- a/backend/services/main-application/src/main/resources/application.yml
+++ b/backend/services/main-application/src/main/resources/application.yml
@@ -1,7 +1,7 @@
# 数据引擎平台 - 主应用配置
spring:
application:
- name: data-mate-platform
+ name: datamate
# 暂时排除Spring Security自动配置(开发阶段使用)
autoconfigure:
diff --git a/backend/services/operator-market-service/pom.xml b/backend/services/operator-market-service/pom.xml
index 6543a1e0..b63c681c 100644
--- a/backend/services/operator-market-service/pom.xml
+++ b/backend/services/operator-market-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/pipeline-orchestration-service/pom.xml b/backend/services/pipeline-orchestration-service/pom.xml
index d5dfe1d5..ab75ae5a 100644
--- a/backend/services/pipeline-orchestration-service/pom.xml
+++ b/backend/services/pipeline-orchestration-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/rag-indexer-service/pom.xml b/backend/services/rag-indexer-service/pom.xml
index f9e0441e..040a9f8f 100644
--- a/backend/services/rag-indexer-service/pom.xml
+++ b/backend/services/rag-indexer-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/services/rag-query-service/pom.xml b/backend/services/rag-query-service/pom.xml
index cc407ef5..ed6c226b 100644
--- a/backend/services/rag-query-service/pom.xml
+++ b/backend/services/rag-query-service/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/backend/shared/domain-common/pom.xml b/backend/shared/domain-common/pom.xml
index bf1e9330..6cb2b22c 100644
--- a/backend/shared/domain-common/pom.xml
+++ b/backend/shared/domain-common/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
@@ -33,5 +33,10 @@
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
+
+ dev.langchain4j
+ langchain4j-open-ai
+ 1.8.0
+
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/infrastructure/exception/KnowledgeBaseErrorCode.java b/backend/shared/domain-common/src/main/java/com/datamate/common/infrastructure/exception/KnowledgeBaseErrorCode.java
new file mode 100644
index 00000000..d56bdb9a
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/infrastructure/exception/KnowledgeBaseErrorCode.java
@@ -0,0 +1,23 @@
+package com.datamate.common.infrastructure.exception;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 知识库错误码
+ *
+ * @author dallas
+ * @since 2025-10-24
+ */
+
+@Getter
+@AllArgsConstructor
+public enum KnowledgeBaseErrorCode implements ErrorCode {
+ /**
+ * 知识库不存在
+ */
+ KNOWLEDGE_BASE_NOT_FOUND("knowledge.0001", "知识库不存在");
+
+ private final String code;
+ private final String message;
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/application/ModelConfigApplicationService.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/application/ModelConfigApplicationService.java
new file mode 100644
index 00000000..1c3435b9
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/application/ModelConfigApplicationService.java
@@ -0,0 +1,85 @@
+package com.datamate.common.models.application;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.datamate.common.infrastructure.exception.BusinessAssert;
+import com.datamate.common.interfaces.PagedResponse;
+import com.datamate.common.models.domain.entity.ModelConfig;
+import com.datamate.common.models.domain.repository.ModelConfigRepository;
+import com.datamate.common.models.infrastructure.client.ModelClient;
+import com.datamate.common.models.infrastructure.exception.ModelsErrorCode;
+import com.datamate.common.models.interfaces.rest.dto.CreateModelRequest;
+import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest;
+import dev.langchain4j.model.chat.ChatModel;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 模型配置应用服务类
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+@Service
+@RequiredArgsConstructor
+public class ModelConfigApplicationService {
+ private final ModelConfigRepository modelConfigRepository;
+
+ public List getProviders() {
+ List providers = new ArrayList<>();
+ providers.add(ModelConfig.builder().provider("ModelEngine").baseUrl("http://localhost:9981").build());
+ providers.add(ModelConfig.builder().provider("Ollama").baseUrl("http://localhost:11434").build());
+ providers.add(ModelConfig.builder().provider("OpenAI").baseUrl("https://api.openai.com/v1").build());
+ providers.add(ModelConfig.builder().provider("DeepSeek").baseUrl("https://api.deepseek.cn/v1").build());
+ providers.add(ModelConfig.builder().provider("火山方舟").baseUrl("https://ark.cn-beijing.volces.com/api/v3").build());
+ providers.add(ModelConfig.builder().provider("阿里云百炼").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build());
+ providers.add(ModelConfig.builder().provider("硅基流动").baseUrl("https://api.siliconflow.cn/v1").build());
+ providers.add(ModelConfig.builder().provider("智谱AI").baseUrl("https://open.bigmodel.cn/api/paas/v4").build());
+ return providers;
+ }
+
+ public PagedResponse getModels(QueryModelRequest queryModelRequest) {
+ // 从数据库查询模型配置
+ IPage page = modelConfigRepository.page(queryModelRequest);
+ return PagedResponse.of(page.getRecords(), page.getCurrent(), page.getTotal(), page.getPages());
+ }
+
+ public ModelConfig getModelDetail(String modelId) {
+ return modelConfigRepository.getById(modelId);
+ }
+
+ public ModelConfig createModel(CreateModelRequest modelConfig) {
+ ModelConfig newConfig = ModelConfig.builder()
+ .provider(modelConfig.getProvider())
+ .modelName(modelConfig.getModelName())
+ .type(modelConfig.getType())
+ .baseUrl(modelConfig.getBaseUrl())
+ .apiKey(modelConfig.getApiKey())
+ .isEnabled(true)
+ .build();
+ ModelClient.checkHealth(newConfig);
+ modelConfigRepository.save(newConfig);
+ return newConfig;
+ }
+
+ public ModelConfig updateModel(String modelId, @Valid CreateModelRequest updateModelRequest) {
+ ModelConfig modelConfig = modelConfigRepository.getById(modelId);
+ BusinessAssert.notNull(modelConfig, ModelsErrorCode.MODEL_CONFIG_NOT_FOUND);
+ modelConfig.setProvider(updateModelRequest.getProvider());
+ modelConfig.setModelName(updateModelRequest.getModelName());
+ modelConfig.setType(updateModelRequest.getType());
+ modelConfig.setBaseUrl(updateModelRequest.getBaseUrl());
+ modelConfig.setApiKey(updateModelRequest.getApiKey());
+ modelConfig.setIsEnabled(true);
+ ModelClient.checkHealth(modelConfig);
+ modelConfigRepository.updateById(modelConfig);
+ return modelConfig;
+ }
+
+ public void deleteModel(String modelId) {
+ modelConfigRepository.removeById(modelId);
+ }
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelConfig.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelConfig.java
new file mode 100644
index 00000000..1eecd8ee
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelConfig.java
@@ -0,0 +1,44 @@
+package com.datamate.common.models.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.datamate.common.domain.model.base.BaseEntity;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 模型配置实体类
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+@Getter
+@Setter
+@TableName("t_model_config")
+@Builder
+public class ModelConfig extends BaseEntity {
+ /**
+ * 模型名称(如 qwen2)
+ */
+ private String modelName;
+ /**
+ * 模型提供商(如 Ollama、OpenAI、DeepSeek)
+ */
+ private String provider;
+ /**
+ * API 基础地址
+ */
+ private String baseUrl;
+ /**
+ * API 密钥(无密钥则为空)
+ */
+ private String apiKey;
+ /**
+ * 模型类型(如 chat、embedding)
+ */
+ private ModelType type;
+ /**
+ * 是否启用:1-启用,0-禁用
+ */
+ private Boolean isEnabled;
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelType.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelType.java
new file mode 100644
index 00000000..7b056728
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelType.java
@@ -0,0 +1,18 @@
+package com.datamate.common.models.domain.entity;
+
+/**
+ * 模型类型枚举类
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+public enum ModelType {
+ /**
+ * 语言模型
+ */
+ CHAT,
+ /**
+ * 嵌入模型
+ */
+ EMBEDDING
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/repository/ModelConfigRepository.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/repository/ModelConfigRepository.java
new file mode 100644
index 00000000..2c70b348
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/repository/ModelConfigRepository.java
@@ -0,0 +1,22 @@
+package com.datamate.common.models.domain.repository;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.repository.IRepository;
+import com.datamate.common.models.domain.entity.ModelConfig;
+import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest;
+
+/**
+ * 模型配置仓库接口
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+public interface ModelConfigRepository extends IRepository {
+ /**
+ * 分页查询模型配置
+ *
+ * @param queryModelRequest 分页查询参数
+ * @return 模型配置列表
+ */
+ IPage page(QueryModelRequest queryModelRequest);
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/client/ModelClient.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/client/ModelClient.java
new file mode 100644
index 00000000..5246c031
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/client/ModelClient.java
@@ -0,0 +1,44 @@
+package com.datamate.common.models.infrastructure.client;
+
+import com.datamate.common.models.domain.entity.ModelConfig;
+import com.datamate.common.models.domain.entity.ModelType;
+import dev.langchain4j.model.chat.ChatModel;
+import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.model.openai.OpenAiChatModel;
+import dev.langchain4j.model.openai.OpenAiEmbeddingModel;
+
+import java.util.function.Consumer;
+
+/**
+ * 模型客户端接口
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+public class ModelClient {
+ public static T invokeModel(ModelConfig modelConfig, Class modelInterface) {
+ return switch (modelConfig.getType()) {
+ case CHAT -> modelInterface.cast(invokeChatModel(modelConfig));
+ case EMBEDDING -> modelInterface.cast(invokeEmbeddingModel(modelConfig));
+ };
+ }
+
+ private static EmbeddingModel invokeEmbeddingModel(ModelConfig modelConfig) {
+ return OpenAiEmbeddingModel.builder()
+ .baseUrl(modelConfig.getBaseUrl())
+ .apiKey(modelConfig.getApiKey())
+ .modelName(modelConfig.getModelName())
+ .build();
+ }
+
+ private static ChatModel invokeChatModel(ModelConfig modelConfig) {
+ return OpenAiChatModel.builder()
+ .baseUrl(modelConfig.getBaseUrl())
+ .apiKey(modelConfig.getApiKey())
+ .modelName(modelConfig.getModelName())
+ .build();
+ }
+
+ public static void checkHealth(ModelConfig modelConfig) {
+ }
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/exception/ModelsErrorCode.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/exception/ModelsErrorCode.java
new file mode 100644
index 00000000..e0835838
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/exception/ModelsErrorCode.java
@@ -0,0 +1,27 @@
+package com.datamate.common.models.infrastructure.exception;
+
+import com.datamate.common.infrastructure.exception.ErrorCode;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 模型配置错误码枚举类
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+@Getter
+@AllArgsConstructor
+public enum ModelsErrorCode implements ErrorCode {
+ /**
+ * 模型配置不存在
+ */
+ MODEL_CONFIG_NOT_FOUND("model.0001", "模型配置不存在"),
+ /**
+ * 模型配置已存在
+ */
+ MODEL_CONFIG_ALREADY_EXISTS("model.0002", "模型配置已存在");
+
+ private final String code;
+ private final String message;
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/impl/ModelConfigRepositoryImpl.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/impl/ModelConfigRepositoryImpl.java
new file mode 100644
index 00000000..0d4239fa
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/impl/ModelConfigRepositoryImpl.java
@@ -0,0 +1,37 @@
+package com.datamate.common.models.infrastructure.persistence.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.repository.CrudRepository;
+import com.datamate.common.models.domain.entity.ModelConfig;
+import com.datamate.common.models.domain.repository.ModelConfigRepository;
+import com.datamate.common.models.infrastructure.persistence.mapper.ModelConfigMapper;
+import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.StringUtils;
+
+import java.util.Objects;
+
+/**
+ * 模型配置仓库实现类
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+@Repository
+@RequiredArgsConstructor
+public class ModelConfigRepositoryImpl extends CrudRepository implements ModelConfigRepository {
+ private final ModelConfigMapper modelConfigMapper;
+
+
+ @Override
+ public IPage page(QueryModelRequest queryModelRequest) {
+ IPage page = new Page<>(queryModelRequest.getPage(), queryModelRequest.getSize());
+ return this.page(page, new LambdaQueryWrapper()
+ .eq(StringUtils.hasText(queryModelRequest.getProvider()), ModelConfig::getProvider, queryModelRequest.getProvider())
+ .eq(Objects.nonNull(queryModelRequest.getType()), ModelConfig::getType, queryModelRequest.getType())
+ .eq(Objects.nonNull(queryModelRequest.getIsEnabled()), ModelConfig::getIsEnabled, queryModelRequest.getIsEnabled()));
+ }
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/mapper/ModelConfigMapper.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/mapper/ModelConfigMapper.java
new file mode 100644
index 00000000..970f3fa9
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/mapper/ModelConfigMapper.java
@@ -0,0 +1,15 @@
+package com.datamate.common.models.infrastructure.persistence.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.datamate.common.models.domain.entity.ModelConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 模型配置映射器接口
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+@Mapper
+public interface ModelConfigMapper extends BaseMapper {
+}
\ No newline at end of file
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/ModelConfigController.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/ModelConfigController.java
new file mode 100644
index 00000000..e05ddc51
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/ModelConfigController.java
@@ -0,0 +1,90 @@
+package com.datamate.common.models.interfaces.rest;
+
+
+import com.datamate.common.interfaces.PagedResponse;
+import com.datamate.common.models.application.ModelConfigApplicationService;
+import com.datamate.common.models.domain.entity.ModelConfig;
+import com.datamate.common.models.interfaces.rest.dto.CreateModelRequest;
+import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 模型配置控制器类
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+@RestController
+@RequestMapping("/api/models")
+@RequiredArgsConstructor
+public class ModelConfigController {
+ private final ModelConfigApplicationService modelConfigApplicationService;
+
+ /**
+ * 获取厂商列表
+ *
+ * @return 厂商列表
+ */
+ @GetMapping("/providers")
+ public List getProviders() {
+ return modelConfigApplicationService.getProviders();
+ }
+
+ /**
+ * 获取模型列表
+ *
+ * @return 模型列表
+ */
+ @GetMapping("/list")
+ public PagedResponse getModels(@RequestParam QueryModelRequest queryModelRequest) {
+ return modelConfigApplicationService.getModels(queryModelRequest);
+ }
+
+ /**
+ * 获取模型详情
+ *
+ * @param modelId 模型 ID
+ * @return 模型详情
+ */
+ @GetMapping("/{modelId}")
+ public ModelConfig getModelDetail(@PathVariable String modelId) {
+ return modelConfigApplicationService.getModelDetail(modelId);
+ }
+
+ /**
+ * 创建模型配置
+ *
+ * @param createModelRequest 创建模型配置请求
+ * @return 创建的模型配置
+ */
+ @PostMapping("/create")
+ public ModelConfig createModel(@RequestBody @Valid CreateModelRequest createModelRequest) {
+ return modelConfigApplicationService.createModel(createModelRequest);
+ }
+
+ /**
+ * 更新模型配置
+ *
+ * @param modelId 模型 ID
+ * @param updateModelRequest 更新模型配置请求
+ * @return 更新后的模型配置
+ */
+ @PutMapping("/{modelId}")
+ public ModelConfig updateModel(@PathVariable String modelId, @RequestBody @Valid CreateModelRequest updateModelRequest) {
+ return modelConfigApplicationService.updateModel(modelId, updateModelRequest);
+ }
+
+ /**
+ * 删除模型配置
+ *
+ * @param modelId 模型 ID
+ */
+ @DeleteMapping("/{modelId}")
+ public void deleteModel(@PathVariable String modelId) {
+ modelConfigApplicationService.deleteModel(modelId);
+ }
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/CreateModelRequest.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/CreateModelRequest.java
new file mode 100644
index 00000000..54678e5f
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/CreateModelRequest.java
@@ -0,0 +1,46 @@
+package com.datamate.common.models.interfaces.rest.dto;
+
+import com.datamate.common.models.domain.entity.ModelType;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 创建模型配置请求类
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+@Setter
+@Getter
+public class CreateModelRequest {
+ /**
+ * 模型名称(如 qwen2)
+ */
+ @NotEmpty(message = "模型名称不能为空")
+ private String modelName;
+ /**
+ * 模型提供商(如 Ollama、OpenAI、DeepSeek)
+ */
+ @NotEmpty(message = "模型提供商不能为空")
+ private String provider;
+ /**
+ * API 基础地址
+ */
+ @NotEmpty(message = "API 基础地址不能为空")
+ private String baseUrl;
+ /**
+ * API 密钥(无密钥则为空)
+ */
+ private String apiKey;
+ /**
+ * 模型类型(如 chat、embedding)
+ */
+ @NotNull(message = "模型类型不能为空")
+ private ModelType type;
+ /**
+ * 是否启用:1-启用,0-禁用
+ */
+ private Boolean isEnabled;
+}
diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/QueryModelRequest.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/QueryModelRequest.java
new file mode 100644
index 00000000..5c17c0f9
--- /dev/null
+++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/QueryModelRequest.java
@@ -0,0 +1,27 @@
+package com.datamate.common.models.interfaces.rest.dto;
+
+import com.datamate.common.interfaces.PagingQuery;
+import com.datamate.common.models.domain.entity.ModelType;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 模型查询请求 DTO
+ *
+ * @author dallas
+ * @since 2025-10-27
+ */
+@Getter
+@Setter
+public class QueryModelRequest extends PagingQuery {
+ /**
+ * 模型提供商(如 Ollama、OpenAI、DeepSeek)
+ */
+ private String provider;
+ /**
+ * 模型类型(如 chat、embedding)
+ */
+ private ModelType type;
+
+ private Boolean isEnabled;
+}
diff --git a/backend/shared/security-common/pom.xml b/backend/shared/security-common/pom.xml
index 686234bb..5f3a8ca4 100644
--- a/backend/shared/security-common/pom.xml
+++ b/backend/shared/security-common/pom.xml
@@ -7,7 +7,7 @@
com.datamate
- data-mate-platform
+ datamate
1.0.0-SNAPSHOT
../../pom.xml
diff --git a/editions/community/config/application.yml b/editions/community/config/application.yml
index d6b251de..0d468f4b 100644
--- a/editions/community/config/application.yml
+++ b/editions/community/config/application.yml
@@ -1,7 +1,7 @@
# 数据引擎平台 - 主应用配置
spring:
application:
- name: data-mate-platform
+ name: datamate
# 暂时排除Spring Security自动配置(开发阶段使用)
autoconfigure:
diff --git a/editions/enterprise/config/application.yml b/editions/enterprise/config/application.yml
index 671a27f7..9326ab62 100644
--- a/editions/enterprise/config/application.yml
+++ b/editions/enterprise/config/application.yml
@@ -1,7 +1,7 @@
# 数据引擎平台 - 主应用配置
spring:
application:
- name: data-mate-platform
+ name: datamate
# 暂时排除Spring Security自动配置(开发阶段使用)
autoconfigure:
diff --git a/scripts/db/model-management-init.sql b/scripts/db/model-management-init.sql
new file mode 100644
index 00000000..993ba5a3
--- /dev/null
+++ b/scripts/db/model-management-init.sql
@@ -0,0 +1,17 @@
+CREATE TABLE t_model_config
+(
+ id VARCHAR(36) AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
+ model_name VARCHAR(100) NOT NULL COMMENT '模型名称(如 qwen2)',
+ provider VARCHAR(50) NOT NULL COMMENT '模型提供商(如 Ollama、OpenAI、DeepSeek)',
+ base_url VARCHAR(255) NOT NULL COMMENT 'API 基础地址',
+ api_key VARCHAR(255) DEFAULT '' COMMENT 'API 密钥(无密钥则为空)',
+ type VARCHAR(50) NOT NULL COMMENT '模型类型(如 chat、embedding)',
+ is_enabled TINYINT DEFAULT 1 COMMENT '是否启用:1-启用,0-禁用',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ created_by VARCHAR(255) COMMENT '创建者',
+ updated_by VARCHAR(255) COMMENT '更新者',
+ UNIQUE KEY uk_model_provider (model_name, provider) COMMENT '避免同一提供商下模型名称重复'
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4 COMMENT ='模型配置表';
+