Commit 813e7af8467c1f4b693593fdbe9c20b96a0228e6

Authored by YunaiV
1 parent 5dc93cb8

【代码评审】AI:硅基流动的图片生成

Showing 17 changed files with 39 additions and 358 deletions
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/AiartCreationController.java deleted
1   -package cn.iocoder.yudao.module.ai.controller.admin.creation;
2   -
3   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundReqVO;
5   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundResVO;
6   -import cn.iocoder.yudao.module.ai.service.creation.AiartCreationService;
7   -import io.swagger.v3.oas.annotations.Operation;
8   -import io.swagger.v3.oas.annotations.tags.Tag;
9   -import jakarta.annotation.Resource;
10   -import jakarta.validation.Valid;
11   -import org.springframework.validation.annotation.Validated;
12   -import org.springframework.web.bind.annotation.PostMapping;
13   -import org.springframework.web.bind.annotation.RequestBody;
14   -import org.springframework.web.bind.annotation.RequestMapping;
15   -import org.springframework.web.bind.annotation.RestController;
16   -
17   -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
18   -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
19   -
20   -@Tag(name = "管理后台 - 艺术创作")
21   -@RestController
22   -@RequestMapping("/ai/artcreation")
23   -@Validated
24   -public class AiartCreationController {
25   -
26   - @Resource
27   - private AiartCreationService aiartCreationService;
28   -
29   - @Operation(summary = "商品图替换背景")
30   - @PostMapping("/replacebackground")
31   - public CommonResult<AiartReplaceBackgroundResVO> replaceBackground(@Valid @RequestBody AiartReplaceBackgroundReqVO replaceBackgroundReqVO) {
32   - return success(aiartCreationService.replaceBackground(getLoginUserId(), replaceBackgroundReqVO));
33   - }
34   -
35   -
36   -}
37 0 \ No newline at end of file
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/AiartStyleController.java deleted
1   -package cn.iocoder.yudao.module.ai.controller.admin.creation;
2   -
3   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4   -import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateReqVO;
6   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateResVO;
7   -import cn.iocoder.yudao.module.ai.dal.dataobject.creation.AiartStyleBackgroundTemplateDO;
8   -import cn.iocoder.yudao.module.ai.service.creation.AiartStyleService;
9   -import io.swagger.v3.oas.annotations.Operation;
10   -import io.swagger.v3.oas.annotations.tags.Tag;
11   -import jakarta.annotation.Resource;
12   -import jakarta.validation.Valid;
13   -import org.springframework.security.access.prepost.PreAuthorize;
14   -import org.springframework.validation.annotation.Validated;
15   -import org.springframework.web.bind.annotation.PostMapping;
16   -import org.springframework.web.bind.annotation.RequestBody;
17   -import org.springframework.web.bind.annotation.RequestMapping;
18   -import org.springframework.web.bind.annotation.RestController;
19   -
20   -import java.util.List;
21   -
22   -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
23   -
24   -@Tag(name = "管理后台 - 艺术创作模版")
25   -@RestController
26   -@RequestMapping("/ai/artstyle")
27   -@Validated
28   -public class AiartStyleController {
29   -
30   - @Resource
31   - private AiartStyleService aiartStyleService;
32   -
33   - @PostMapping("/backgroundtemplate-list")
34   - @Operation(summary = "获取商品背景模版列表")
35   - @PreAuthorize("@ss.hasPermission('ai:artstyle-background:query')")
36   - public CommonResult<List<BackgroundTemplateResVO>> queryBackgroundStyle(@Valid @RequestBody BackgroundTemplateReqVO backgroundTemplateReqVO) {
37   - List<AiartStyleBackgroundTemplateDO> res = aiartStyleService.queryBackgroundStyle(backgroundTemplateReqVO);
38   - return success(BeanUtils.toBean(res,BackgroundTemplateResVO.class));
39   - }
40   -}
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/vo/style/AiartReplaceBackgroundReqVO.java deleted
1   -package cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style;
2   -
3   -import io.swagger.v3.oas.annotations.media.Schema;
4   -import jakarta.validation.constraints.NotEmpty;
5   -import jakarta.validation.constraints.Size;
6   -import lombok.Data;
7   -
8   -@Schema(description = "管理后台 - 商品替换背景请求 VO")
9   -@Data
10   -public class AiartReplaceBackgroundReqVO {
11   -
12   - @Schema(description = "提示词", requiredMode = Schema.RequiredMode.REQUIRED, example = "画一个长城")
13   - @NotEmpty(message = "提示词不能为空")
14   - @Size(max = 1200, message = "提示词最大 1200")
15   - private String prompt;
16   -
17   -}
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/vo/style/AiartReplaceBackgroundResVO.java deleted
1   -package cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style;
2   -
3   -import io.swagger.v3.oas.annotations.media.Schema;
4   -import lombok.Data;
5   -
6   -@Schema(description = "管理后台 - 商品替换背景结果 VO")
7   -@Data
8   -public class AiartReplaceBackgroundResVO {
9   -
10   - @Schema(description = "结果url", requiredMode = Schema.RequiredMode.REQUIRED, example = "根据参数不同不一样")
11   - private String resultImage;
12   -
13   - @Schema(description = "唯一请求 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "由服务端生成")
14   - private String requestId;
15   -
16   - @Schema(description = "MaskUrl", requiredMode = Schema.RequiredMode.REQUIRED, example = "如果 MaskUrl 未传,则返回使用内置商品分割算法得到的 Mask 结果")
17   - private String maskImage;
18   -}
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/vo/style/BackgroundTemplateReqVO.java deleted
1   -package cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style;
2   -
3   -import io.swagger.v3.oas.annotations.media.Schema;
4   -import lombok.Data;
5   -
6   -@Schema(description = "管理后台 - AI API 密钥新增/修改 Request VO")
7   -@Data
8   -public class BackgroundTemplateReqVO {
9   -
10   - @Schema(description = "一级级次名称", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "通用")
11   - private String fistLevelName;
12   -
13   - @Schema(description = "二级级次名称", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "色彩背景")
14   - private String secondLevelName;
15   -
16   -}
17 0 \ No newline at end of file
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/vo/style/BackgroundTemplateResVO.java deleted
1   -package cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style;
2   -
3   -import io.swagger.v3.oas.annotations.media.Schema;
4   -import lombok.Data;
5   -
6   -@Schema(description = "管理后台 - 商品替换背景模版 VO")
7   -@Data
8   -public class BackgroundTemplateResVO {
9   -
10   - @Schema(description = "一级分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "汽车、通用")
11   - private String levelFirst;
12   -
13   - @Schema(description = "二级分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "色彩背景")
14   - private String levelSecond;
15   -
16   - @Schema(description = "背景模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "彩虹渐变")
17   - private String name;
18   -
19   - @Schema(description = "背景模版提示词", requiredMode = Schema.RequiredMode.REQUIRED, example = "背景为彩虹渐变墙面,亮暖色,清新简约风格,喷涂效果")
20   - private String prompt;
21   -
22   - @Schema(description = "背景模版商品示例", requiredMode = Schema.RequiredMode.REQUIRED, example = "小熊玩偶")
23   - private String demProduct;
24   -
25   - @Schema(description = "背景模版商品示例效果", requiredMode = Schema.RequiredMode.REQUIRED, example = "url")
26   - private String demUrl;
27   -}
28   -
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/creation/AiartStyleBackgroundTemplateDO.java deleted
1   -package cn.iocoder.yudao.module.ai.dal.dataobject.creation;
2   -
3   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4   -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5   -import com.baomidou.mybatisplus.annotation.KeySequence;
6   -import com.baomidou.mybatisplus.annotation.TableId;
7   -import com.baomidou.mybatisplus.annotation.TableName;
8   -import lombok.AllArgsConstructor;
9   -import lombok.Builder;
10   -import lombok.Data;
11   -import lombok.NoArgsConstructor;
12   -
13   -/**
14   - * AI art商品背景风格 DO
15   - *
16   - * @author 芋道源码
17   - */
18   -@TableName("ai_backgroundtemplate")
19   -@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
20   -@Data
21   -@Builder
22   -@NoArgsConstructor
23   -@AllArgsConstructor
24   -public class AiartStyleBackgroundTemplateDO extends BaseDO {
25   - /**
26   - * 编号
27   - */
28   - @TableId
29   - private Long id;
30   -
31   - /**
32   - * 名称
33   - */
34   - private String levelFirst;
35   -
36   - /**
37   - * 名称
38   - */
39   - private String levelSecond;
40   - /**
41   - * 模版名称
42   - */
43   - private String name;
44   - /**
45   - * 模版提示词
46   - */
47   - private String prompt;
48   - /**
49   - * 示例商品
50   - */
51   - private String demoProduct;
52   -
53   - /**
54   - * 示例效果
55   - */
56   - private String demoUrl;
57   -
58   - /**
59   - * 状态
60   - *
61   - * 枚举 {@link CommonStatusEnum}
62   - */
63   - private Integer status;
64   -
65   -}
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/creation/AiartStyleBackgroundTemplateMapper.java deleted
1   -package cn.iocoder.yudao.module.ai.dal.mysql.creation;
2   -
3   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4   -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5   -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateReqVO;
7   -import cn.iocoder.yudao.module.ai.dal.dataobject.creation.AiartStyleBackgroundTemplateDO;
8   -import org.apache.ibatis.annotations.Mapper;
9   -
10   -import java.util.List;
11   -
12   -/**
13   - * AI style分隔 Mapper
14   - *
15   - * @author 芋道源码
16   - */
17   -@Mapper
18   -public interface AiartStyleBackgroundTemplateMapper extends BaseMapperX<AiartStyleBackgroundTemplateDO> {
19   -
20   - /**
21   - * 获取有效的商品后端模版
22   - * @param reqVO 请求对象
23   - * @return 结果
24   - */
25   - default List<AiartStyleBackgroundTemplateDO> selectList(BackgroundTemplateReqVO reqVO) {
26   - return selectList(new LambdaQueryWrapperX<AiartStyleBackgroundTemplateDO>()
27   - .eqIfPresent(AiartStyleBackgroundTemplateDO::getLevelFirst,reqVO.getFistLevelName())
28   - .eqIfPresent(AiartStyleBackgroundTemplateDO::getLevelSecond,reqVO.getSecondLevelName())
29   - .eqIfPresent(AiartStyleBackgroundTemplateDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
30   - .orderByDesc(AiartStyleBackgroundTemplateDO::getId));
31   - }
32   -
33   -}
34 0 \ No newline at end of file
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/creation/AiartCreationService.java deleted
1   -package cn.iocoder.yudao.module.ai.service.creation;
2   -
3   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundReqVO;
4   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundResVO;
5   -
6   -/**
7   - * AI创作Service 接口
8   - *
9   - * @author zzt
10   - */
11   -public interface AiartCreationService {
12   -
13   -
14   - /**
15   - * 替换商品背景图片
16   - * @param loginUserId 当前登录用户
17   - * @param replaceBackgroundReqVO 请求对象
18   - * @return 结果
19   - */
20   - AiartReplaceBackgroundResVO replaceBackground(Long loginUserId, AiartReplaceBackgroundReqVO replaceBackgroundReqVO);
21   -}
22 0 \ No newline at end of file
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/creation/AiartCreationServiceImpl.java deleted
1   -package cn.iocoder.yudao.module.ai.service.creation;
2   -
3   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundReqVO;
4   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundResVO;
5   -import org.springframework.stereotype.Service;
6   -import org.springframework.validation.annotation.Validated;
7   -
8   -/**
9   - * AI创作Service 实现类
10   - *
11   - * @author zzt
12   - */
13   -@Service
14   -@Validated
15   -public class AiartCreationServiceImpl implements AiartCreationService {
16   -
17   -
18   - @Override
19   - public AiartReplaceBackgroundResVO replaceBackground(Long loginUserId, AiartReplaceBackgroundReqVO replaceBackgroundReqVO) {
20   - return null;
21   - }
22   -}
23 0 \ No newline at end of file
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/creation/AiartStyleService.java deleted
1   -package cn.iocoder.yudao.module.ai.service.creation;
2   -
3   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateReqVO;
4   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateResVO;
5   -import cn.iocoder.yudao.module.ai.dal.dataobject.creation.AiartStyleBackgroundTemplateDO;
6   -
7   -import java.util.List;
8   -
9   -/**
10   - * AI风格Service 接口
11   - *
12   - * @author zzt
13   - */
14   -public interface AiartStyleService {
15   -
16   -
17   - /**
18   - * 查询商品背景模版列表
19   - * @param backgroundTemplateReqVO 商品背景模版请求对象
20   - * @return 结果
21   - */
22   - List<AiartStyleBackgroundTemplateDO> queryBackgroundStyle(BackgroundTemplateReqVO backgroundTemplateReqVO);
23   -}
24 0 \ No newline at end of file
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/creation/AiartStyleServiceImpl.java deleted
1   -package cn.iocoder.yudao.module.ai.service.creation;
2   -
3   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateReqVO;
4   -import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateResVO;
5   -import cn.iocoder.yudao.module.ai.dal.dataobject.creation.AiartStyleBackgroundTemplateDO;
6   -import cn.iocoder.yudao.module.ai.dal.mysql.creation.AiartStyleBackgroundTemplateMapper;
7   -import cn.iocoder.yudao.module.ai.dal.mysql.model.AiApiKeyMapper;
8   -import jakarta.annotation.Resource;
9   -
10   -import java.util.List;
11   -
12   -/**
13   - * AI风格Service 接口
14   - *
15   - * @author zzt
16   - */
17   -public class AiartStyleServiceImpl implements AiartStyleService{
18   -
19   - @Resource
20   - private AiartStyleBackgroundTemplateMapper backgroundTemplateMapper;
21   -
22   -
23   - @Override
24   - public List<AiartStyleBackgroundTemplateDO> queryBackgroundStyle(BackgroundTemplateReqVO backgroundTemplateReqVO) {
25   - return backgroundTemplateMapper.selectList(backgroundTemplateReqVO);
26   - }
27   -}
28 0 \ No newline at end of file
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/image/AiImageServiceImpl.java
... ... @@ -147,8 +147,8 @@ public class AiImageServiceImpl implements AiImageService {
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
150   - return SiliconflowImageOptions.builder().withModel(model.getModel())
151   - .withHeight(draw.getHeight()).withWidth(draw.getWidth())
  150 + return SiliconflowImageOptions.builder().model(model.getModel())
  151 + .withHeight(draw.getHeight()).withHeight(draw.getWidth())
152 152 .build();
153 153 } else if (ObjUtil.equal(model.getPlatform(), AiPlatformEnum.STABLE_DIFFUSION.getPlatform())) {
154 154 // https://platform.stability.ai/docs/api-reference#tag/SDXL-and-SD1.6/operation/textToImage
... ...
yudao-module-ai/yudao-spring-boot-starter-ai/pom.xml
... ... @@ -117,13 +117,6 @@
117 117 </exclusions>
118 118 </dependency>
119 119  
120   - <!-- 腾讯大模型图像创作引擎-->
121   - <dependency>
122   - <groupId>com.tencentcloudapi</groupId>
123   - <artifactId>tencentcloud-sdk-java-aiart</artifactId>
124   - <version>3.1.1215</version>
125   - </dependency>
126   -
127 120 <!-- Test 测试相关 -->
128 121 <dependency>
129 122 <groupId>org.springframework.boot</groupId>
... ...
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java
... ... @@ -9,7 +9,6 @@ import cn.iocoder.yudao.framework.ai.core.model.doubao.DouBaoChatModel;
9 9 import cn.iocoder.yudao.framework.ai.core.model.hunyuan.HunYuanChatModel;
10 10 import cn.iocoder.yudao.framework.ai.core.model.midjourney.api.MidjourneyApi;
11 11 import cn.iocoder.yudao.framework.ai.core.model.siliconflow.SiiconflowApiConstants;
12   -import cn.iocoder.yudao.framework.ai.core.model.siliconflow.SiiconflowmageApi;
13 12 import cn.iocoder.yudao.framework.ai.core.model.siliconflow.SiliconFlowChatModel;
14 13 import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi;
15 14 import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
... ...
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/util/AiUtils.java
... ... @@ -50,8 +50,8 @@ public class AiUtils {
50 50 case HUN_YUAN: // 复用 OpenAI 客户端
51 51 case XING_HUO: // 复用 OpenAI 客户端
52 52 case SILICON_FLOW: // 复用 OpenAI 客户端
53   - OpenAiChatOptions.Builder builder = OpenAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens);
54   - return toolNames == null ? builder.build() : builder.toolNames(toolNames).build();
  53 + return OpenAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
  54 + .toolNames(toolNames).build();
55 55 case AZURE_OPENAI:
56 56 // TODO 芋艿:貌似没 model 字段???!
57 57 return AzureOpenAiChatOptions.builder().deploymentName(model).temperature(temperature).maxTokens(maxTokens)
... ...
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/image/SiliconFlowImageModelTests.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.ai.image;
  2 +
  3 +import cn.iocoder.yudao.framework.ai.core.model.siliconflow.SiiconflowmageApi;
  4 +import cn.iocoder.yudao.framework.ai.core.model.siliconflow.SiliconflowImageModel;
  5 +import cn.iocoder.yudao.framework.ai.core.model.siliconflow.SiliconflowImageOptions;
  6 +import org.junit.jupiter.api.Disabled;
  7 +import org.junit.jupiter.api.Test;
  8 +import org.springframework.ai.image.ImagePrompt;
  9 +import org.springframework.ai.image.ImageResponse;
  10 +
  11 +/**
  12 + * {@link SiliconflowImageModel} 集成测试
  13 + */
  14 +public class SiliconFlowImageModelTests {
  15 +
  16 + private final SiliconflowImageModel imageModel = new SiliconflowImageModel(
  17 + new SiiconflowmageApi("sk-epsakfenqnyzoxhmbucsxlhkdqlcbnimslqoivkshalvdozz") // 密钥
  18 + );
  19 +
  20 + @Test
  21 + @Disabled
  22 + public void testCall() {
  23 + // 准备参数
  24 + SiliconflowImageOptions imageOptions = SiliconflowImageOptions.builder()
  25 + .model("Kwai-Kolors/Kolors")
  26 + .build();
  27 + ImagePrompt prompt = new ImagePrompt("万里长城", imageOptions);
  28 +
  29 + // 方法调用
  30 + ImageResponse response = imageModel.call(prompt);
  31 + // 打印结果
  32 + System.out.println(response);
  33 + }
  34 +
  35 +}
... ...