diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/config/OpenAiConfigProperties.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/config/OpenAiConfigProperties.java index 2efda125..d7cb79d4 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/config/OpenAiConfigProperties.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/config/OpenAiConfigProperties.java @@ -43,9 +43,13 @@ public class OpenAiConfigProperties { private Double speed = 1.0; /** Limit Duration time unit seconds default 1 day */ - private int rateLimitDuration = 24 * 60 * 60; + //private int duration = 24 * 60 * 60; + private int duration = 60; /** Maximum number of visits in a specified time unit seconds */ - private int rateLimitMaxCount = 10; + private int nonMaxCount = 1; + + /** Maximum number of visits in a specified time unit seconds */ + private int basicMaxCount = 50; } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/ChatGptController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/ChatGptController.java index 142fd1e2..3f07c7a7 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/ChatGptController.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/ChatGptController.java @@ -48,6 +48,7 @@ public class ChatGptController { @PostMapping("/chat/completions") public R chatCompletions(@Valid @RequestBody ImContent imContent) { SecurityUtils.openInterfaceTemporaryLoginSession(imContent.getSendUserId()); + iImContentService.rateLimitRequestHandler(); return R.ok(iImContentService.chatCompletions(imContent)); } @@ -56,6 +57,7 @@ public class ChatGptController { @PostMapping("/audio/transcriptions") public R audioTranscriptions(@Valid @ModelAttribute ImContent imContent, @RequestPart(value = "file", required = false) MultipartFile file) { SecurityUtils.openInterfaceTemporaryLoginSession(imContent.getSendUserId()); + iImContentService.rateLimitRequestHandler(); return R.ok(iImContentService.audioTranscriptions(imContent, file)); } @@ -64,6 +66,7 @@ public class ChatGptController { @PostMapping("/audio/speech") public R audioSpeech(@Valid @RequestBody ImContent imContent) { SecurityUtils.openInterfaceTemporaryLoginSession(imContent.getSendUserId()); + iImContentService.rateLimitRequestHandler(); return R.ok(iImContentService.audioSpeech(imContent)); } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/IImContentService.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/IImContentService.java index 27de57ee..bd48bb57 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/IImContentService.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/IImContentService.java @@ -47,4 +47,8 @@ public interface IImContentService extends IService { */ OssFile audioSpeech(ImContent imContent); + + /** 速率限制请求处理, 流量过大可用 sentinel 配置流控管理 */ + void rateLimitRequestHandler(); + } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java index 8e3b51ba..471422f8 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java @@ -8,9 +8,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.cloud.kicc.common.core.exception.CheckedException; +import com.cloud.kicc.common.data.entity.KiccUser; import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.system.api.entity.ImContent; import com.cloud.kicc.system.api.entity.OssFile; +import com.cloud.kicc.system.api.enums.SubscriberEnum; import com.cloud.kicc.system.config.OpenAiConfigProperties; import com.cloud.kicc.system.mapper.ImContentMapper; import com.cloud.kicc.system.service.FileService; @@ -219,32 +221,23 @@ public class ImContentServiceImpl extends ServiceImpllambdaQuery() .eq(ImContent::getSendUserId, SecurityUtils.getCasUser().getId()) - .between(ImContent::getSendTime, startTimestamp, LocalDateTime.now().atZone(chinaZoneId))); - + .between(ImContent::getSendTime, startTimestamp, LocalDateTime.now().atZone(chinaZoneId).toEpochSecond())); // 检查是否大于发送次数 - - -// NON("0", "非订阅"), -// -// BASIC("1", "基础订阅"), - - // 限制当前非订阅用户只能用10次 - // 限制当前基础订阅用户只能用10次 - // 高级订阅不受限制 - - - - + if (StrUtil.equals(SecurityUtils.getUser().getSubscriber(), SubscriberEnum.NON.getValue()) && maxCount > openAiConfigProperties.getNonMaxCount()) { + throw new CheckedException("普通订阅用户已超出当前最大速率限制,请过一会在试试!"); + } + if (StrUtil.equals(SecurityUtils.getUser().getSubscriber(), SubscriberEnum.BASIC.getValue()) && maxCount > openAiConfigProperties.getBasicMaxCount()) { + throw new CheckedException("基础订阅用户已超出当前最大速率限制,请过一会在试试!"); + } } }