mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-26 00:53:54 +08:00
update:智控台音色克隆
This commit is contained in:
@@ -257,7 +257,7 @@ public interface Constant {
|
||||
/**
|
||||
* 版本号
|
||||
*/
|
||||
public static final String VERSION = "0.8.3";
|
||||
public static final String VERSION = "0.8.4";
|
||||
|
||||
/**
|
||||
* 无效固件URL
|
||||
|
||||
@@ -175,4 +175,17 @@ public interface ErrorCode {
|
||||
int DOWNLOAD_LINK_INVALID = 10137; // 下载链接无效
|
||||
int CHAT_ROLE_USER = 10138; // 用户角色
|
||||
int CHAT_ROLE_AGENT = 10139; // 智能体角色
|
||||
|
||||
// 声音克隆相关错误码
|
||||
int VOICE_CLONE_AUDIO_EMPTY = 10140; // 音频文件不能为空
|
||||
int VOICE_CLONE_NOT_AUDIO_FILE = 10141; // 只支持音频文件
|
||||
int VOICE_CLONE_AUDIO_TOO_LARGE = 10142; // 音频文件大小不能超过10MB
|
||||
int VOICE_CLONE_UPLOAD_FAILED = 10143; // 上传失败
|
||||
int VOICE_CLONE_RECORD_NOT_EXIST = 10144; // 声音克隆记录不存在
|
||||
int VOICE_RESOURCE_INFO_EMPTY = 10145; // 音色资源信息不能为空
|
||||
int VOICE_RESOURCE_PLATFORM_NAME_EMPTY = 10146; // 平台名称不能为空
|
||||
int VOICE_RESOURCE_ID_EMPTY = 10147; // 音色ID不能为空
|
||||
int VOICE_RESOURCE_ACCOUNT_EMPTY = 10148; // 归属账号不能为空
|
||||
int VOICE_RESOURCE_DELETE_ID_EMPTY = 10149; // 删除的音色资源ID不能为空
|
||||
int VOICE_RESOURCE_NO_PERMISSION = 10150; // 您没有权限操作该记录
|
||||
}
|
||||
|
||||
@@ -146,4 +146,10 @@ public class RedisKeys {
|
||||
return "agent:chat:history:" + uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取音色克隆音频ID的缓存key
|
||||
*/
|
||||
public static String getVoiceCloneAudioIdKey(String uuid) {
|
||||
return "voiceClone:audio:id:" + uuid;
|
||||
}
|
||||
}
|
||||
|
||||
-3
@@ -12,8 +12,6 @@ import java.util.UUID;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@@ -49,7 +47,6 @@ import xiaozhi.modules.security.user.SecurityUser;
|
||||
@RestController
|
||||
@RequestMapping("/agent/chat-history")
|
||||
public class AgentChatHistoryController {
|
||||
private static final Logger logger = LoggerFactory.getLogger(AgentChatHistoryController.class);
|
||||
private final AgentChatHistoryBizService agentChatHistoryBizService;
|
||||
private final AgentChatHistoryService agentChatHistoryService;
|
||||
private final AgentService agentService;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package xiaozhi.modules.model.dao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -15,4 +16,9 @@ public interface ModelConfigDao extends BaseDao<ModelConfigEntity> {
|
||||
* get model_code list
|
||||
*/
|
||||
List<String> getModelCodeList(@Param("modelType") String modelType, @Param("modelName") String modelName);
|
||||
|
||||
/**
|
||||
* 获取符合条件的TTS平台列表(id和modelName)
|
||||
*/
|
||||
List<Map<String, Object>> getTtsPlatformList();
|
||||
}
|
||||
|
||||
+9
-1
@@ -1,6 +1,7 @@
|
||||
package xiaozhi.modules.model.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import xiaozhi.common.page.PageData;
|
||||
import xiaozhi.common.service.BaseService;
|
||||
@@ -53,9 +54,16 @@ public interface ModelConfigService extends BaseService<ModelConfigEntity> {
|
||||
|
||||
/**
|
||||
* 设置默认模型
|
||||
*
|
||||
*
|
||||
* @param modelType 模型类型
|
||||
* @param isDefault 是否默认(1:是,0:否)
|
||||
*/
|
||||
void setDefaultModel(String modelType, int isDefault);
|
||||
|
||||
/**
|
||||
* 获取符合条件的TTS平台列表
|
||||
*
|
||||
* @return TTS平台列表(id和modelName)
|
||||
*/
|
||||
List<Map<String, Object>> getTtsPlatformList();
|
||||
}
|
||||
|
||||
+8
@@ -516,4 +516,12 @@ public class ModelConfigServiceImpl extends BaseServiceImpl<ModelConfigDao, Mode
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取符合条件的TTS平台列表
|
||||
*/
|
||||
@Override
|
||||
public List<Map<String, Object>> getTtsPlatformList() {
|
||||
return modelConfigDao.getTtsPlatformList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +91,7 @@ public class ShiroConfig {
|
||||
filterMap.put("/agent/chat-history/download/**", "anon");
|
||||
filterMap.put("/agent/saveMemory/**", "server");
|
||||
filterMap.put("/agent/play/**", "anon");
|
||||
filterMap.put("/voiceClone/play/**", "anon");
|
||||
filterMap.put("/**", "oauth2");
|
||||
shiroFilter.setFilterChainDefinitionMap(filterMap);
|
||||
|
||||
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
package xiaozhi.modules.voiceclone.controller;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import xiaozhi.common.constant.Constant;
|
||||
import xiaozhi.common.exception.ErrorCode;
|
||||
import xiaozhi.common.exception.RenException;
|
||||
import xiaozhi.common.page.PageData;
|
||||
import xiaozhi.common.redis.RedisKeys;
|
||||
import xiaozhi.common.redis.RedisUtils;
|
||||
import xiaozhi.common.user.UserDetail;
|
||||
import xiaozhi.common.utils.Result;
|
||||
import xiaozhi.common.validator.ValidatorUtils;
|
||||
import xiaozhi.modules.security.user.SecurityUser;
|
||||
import xiaozhi.modules.voiceclone.dto.VoiceCloneResponseDTO;
|
||||
import xiaozhi.modules.voiceclone.entity.VoiceCloneEntity;
|
||||
import xiaozhi.modules.voiceclone.service.VoiceCloneService;
|
||||
|
||||
@Tag(name = "音色资源管理", description = "音色资源开通相关接口")
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/voiceClone")
|
||||
public class VoiceCloneController {
|
||||
|
||||
private final VoiceCloneService voiceCloneService;
|
||||
private final RedisUtils redisUtils;
|
||||
|
||||
@GetMapping
|
||||
@Operation(summary = "分页查询音色资源")
|
||||
@Parameters({
|
||||
@Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
|
||||
@Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true)
|
||||
})
|
||||
@RequiresPermissions("sys:role:normal")
|
||||
public Result<PageData<VoiceCloneResponseDTO>> page(
|
||||
@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
|
||||
ValidatorUtils.validateEntity(params);
|
||||
UserDetail user = SecurityUser.getUser();
|
||||
params.put("userId", user.getId().toString());
|
||||
PageData<VoiceCloneResponseDTO> page = voiceCloneService.pageWithNames(params);
|
||||
return new Result<PageData<VoiceCloneResponseDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@PostMapping("/upload")
|
||||
@Operation(summary = "上传音频进行声音克隆")
|
||||
@Parameters({
|
||||
@Parameter(name = "id", description = "声音克隆记录ID", required = true),
|
||||
@Parameter(name = "voiceFile", description = "音频文件", required = true)
|
||||
})
|
||||
@RequiresPermissions("sys:role:normal")
|
||||
public Result<String> uploadVoice(
|
||||
@RequestParam("id") String id,
|
||||
@RequestParam("voiceFile") MultipartFile voiceFile) {
|
||||
try {
|
||||
// 验证文件
|
||||
if (voiceFile == null || voiceFile.isEmpty()) {
|
||||
return new Result<String>().error(ErrorCode.VOICE_CLONE_AUDIO_EMPTY);
|
||||
}
|
||||
|
||||
// 验证文件类型
|
||||
String contentType = voiceFile.getContentType();
|
||||
if (contentType == null || !contentType.startsWith("audio/")) {
|
||||
return new Result<String>().error(ErrorCode.VOICE_CLONE_NOT_AUDIO_FILE);
|
||||
}
|
||||
|
||||
// 验证文件大小 (最大10MB)
|
||||
if (voiceFile.getSize() > 10 * 1024 * 1024) {
|
||||
return new Result<String>().error(ErrorCode.VOICE_CLONE_AUDIO_TOO_LARGE);
|
||||
}
|
||||
// 检查权限
|
||||
checkPermission(id);
|
||||
// 调用服务层处理
|
||||
voiceCloneService.uploadVoice(id, voiceFile);
|
||||
|
||||
return new Result<String>();
|
||||
} catch (Exception e) {
|
||||
return new Result<String>().error(ErrorCode.VOICE_CLONE_UPLOAD_FAILED, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/updateName")
|
||||
@Operation(summary = "更新声音克隆名称")
|
||||
@RequiresPermissions("sys:role:normal")
|
||||
public Result<String> updateName(@RequestBody Map<String, String> params) {
|
||||
try {
|
||||
String id = params.get("id");
|
||||
String name = params.get("name");
|
||||
|
||||
if (id == null || id.isEmpty()) {
|
||||
return new Result<String>().error(ErrorCode.IDENTIFIER_NOT_NULL, "唯一标识不能为空");
|
||||
}
|
||||
if (name == null) {
|
||||
return new Result<String>().error(ErrorCode.NOT_NULL, "名称不能为空");
|
||||
}
|
||||
// 检查权限
|
||||
checkPermission(id);
|
||||
|
||||
voiceCloneService.updateName(id, name);
|
||||
return new Result<String>();
|
||||
} catch (Exception e) {
|
||||
return new Result<String>().error(ErrorCode.UPDATE_DATA_FAILED, "更新失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/audio/{id}")
|
||||
@Operation(summary = "获取音频下载ID")
|
||||
@RequiresPermissions("sys:role:normal")
|
||||
public Result<String> getAudioId(@PathVariable("id") String id) {
|
||||
// 检查权限
|
||||
checkPermission(id);
|
||||
byte[] audioData = voiceCloneService.getVoiceData(id);
|
||||
if (audioData == null) {
|
||||
return new Result<String>().error(ErrorCode.RESOURCE_NOT_FOUND, "音频不存在");
|
||||
}
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
redisUtils.set(RedisKeys.getVoiceCloneAudioIdKey(uuid), id);
|
||||
return new Result<String>().ok(uuid);
|
||||
}
|
||||
|
||||
@GetMapping("/play/{uuid}")
|
||||
@Operation(summary = "播放音频")
|
||||
public void playVoice(@PathVariable("uuid") String uuid, HttpServletResponse response) {
|
||||
try {
|
||||
String id = (String) redisUtils.get(RedisKeys.getVoiceCloneAudioIdKey(uuid));
|
||||
redisUtils.delete(RedisKeys.getVoiceCloneAudioIdKey(uuid));
|
||||
if (StringUtils.isBlank(id)) {
|
||||
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
// 获取音频数据
|
||||
byte[] voiceData = voiceCloneService.getVoiceData(id);
|
||||
|
||||
if (voiceData == null || voiceData.length == 0) {
|
||||
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
|
||||
// 设置响应头
|
||||
response.setContentType("audio/wav");
|
||||
response.setContentLength(voiceData.length);
|
||||
response.setHeader("Content-Disposition", "inline; filename=voice.wav");
|
||||
|
||||
// 写入音频数据
|
||||
response.getOutputStream().write(voiceData);
|
||||
response.getOutputStream().flush();
|
||||
} catch (Exception e) {
|
||||
log.error("播放音频失败", e);
|
||||
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/cloneAudio")
|
||||
@Operation(summary = "复刻音频")
|
||||
@RequiresPermissions("sys:role:normal")
|
||||
public Result<String> cloneAudio(@RequestBody Map<String, String> params) {
|
||||
String cloneId = params.get("cloneId");
|
||||
checkPermission(cloneId);
|
||||
return new Result<String>();
|
||||
}
|
||||
|
||||
private void checkPermission(String id) {
|
||||
VoiceCloneEntity voiceClone = voiceCloneService.selectById(id);
|
||||
if (voiceClone == null) {
|
||||
throw new RenException(ErrorCode.VOICE_CLONE_RECORD_NOT_EXIST);
|
||||
}
|
||||
if (!voiceClone.getUserId().equals(SecurityUser.getUser().getId())) {
|
||||
throw new RenException(ErrorCode.VOICE_RESOURCE_NO_PERMISSION);
|
||||
}
|
||||
}
|
||||
}
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
package xiaozhi.modules.voiceclone.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import xiaozhi.common.constant.Constant;
|
||||
import xiaozhi.common.exception.ErrorCode;
|
||||
import xiaozhi.common.page.PageData;
|
||||
import xiaozhi.common.utils.Result;
|
||||
import xiaozhi.common.validator.ValidatorUtils;
|
||||
import xiaozhi.modules.model.service.ModelConfigService;
|
||||
import xiaozhi.modules.voiceclone.dto.VoiceCloneDTO;
|
||||
import xiaozhi.modules.voiceclone.dto.VoiceCloneResponseDTO;
|
||||
import xiaozhi.modules.voiceclone.service.VoiceCloneService;
|
||||
|
||||
@Tag(name = "音色资源管理", description = "音色资源开通相关接口")
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/voiceResource")
|
||||
public class VoiceResourceController {
|
||||
|
||||
private final VoiceCloneService voiceCloneService;
|
||||
private final ModelConfigService modelConfigService;
|
||||
|
||||
@GetMapping
|
||||
@Operation(summary = "分页查询音色资源")
|
||||
@Parameters({
|
||||
@Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
|
||||
@Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true)
|
||||
})
|
||||
@RequiresPermissions("sys:role:superAdmin")
|
||||
public Result<PageData<VoiceCloneResponseDTO>> page(
|
||||
@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
|
||||
ValidatorUtils.validateEntity(params);
|
||||
PageData<VoiceCloneResponseDTO> page = voiceCloneService.pageWithNames(params);
|
||||
return new Result<PageData<VoiceCloneResponseDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("{id}")
|
||||
@Operation(summary = "获取音色资源详情")
|
||||
@RequiresPermissions("sys:role:superAdmin")
|
||||
public Result<VoiceCloneResponseDTO> get(@PathVariable("id") String id) {
|
||||
VoiceCloneResponseDTO data = voiceCloneService.getByIdWithNames(id);
|
||||
return new Result<VoiceCloneResponseDTO>().ok(data);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Operation(summary = "新增音色资源")
|
||||
@RequiresPermissions("sys:role:superAdmin")
|
||||
public Result<Void> save(@RequestBody VoiceCloneDTO dto) {
|
||||
if (dto == null) {
|
||||
return new Result<Void>().error(ErrorCode.VOICE_RESOURCE_INFO_EMPTY);
|
||||
}
|
||||
if (dto.getModelId() == null || dto.getModelId().isEmpty()) {
|
||||
return new Result<Void>().error(ErrorCode.VOICE_RESOURCE_PLATFORM_NAME_EMPTY);
|
||||
}
|
||||
if (dto.getVoiceIds() == null || dto.getVoiceIds().isEmpty()) {
|
||||
return new Result<Void>().error(ErrorCode.VOICE_RESOURCE_ID_EMPTY);
|
||||
}
|
||||
if (dto.getUserId() == null) {
|
||||
return new Result<Void>().error(ErrorCode.VOICE_RESOURCE_ACCOUNT_EMPTY);
|
||||
}
|
||||
try {
|
||||
voiceCloneService.save(dto);
|
||||
return new Result<Void>();
|
||||
} catch (RuntimeException e) {
|
||||
return new Result<Void>().error(ErrorCode.ADD_DATA_FAILED, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@Operation(summary = "删除音色资源")
|
||||
@RequiresPermissions("sys:role:superAdmin")
|
||||
public Result<Void> delete(@PathVariable("id") String[] ids) {
|
||||
if (ids == null || ids.length == 0) {
|
||||
return new Result<Void>().error(ErrorCode.VOICE_RESOURCE_DELETE_ID_EMPTY);
|
||||
}
|
||||
voiceCloneService.delete(ids);
|
||||
return new Result<Void>();
|
||||
}
|
||||
|
||||
@GetMapping("/user/{userId}")
|
||||
@Operation(summary = "根据用户ID获取音色资源列表")
|
||||
@RequiresPermissions("sys:role:normal")
|
||||
public Result<List<VoiceCloneResponseDTO>> getByUserId(@PathVariable("userId") Long userId) {
|
||||
List<VoiceCloneResponseDTO> list = voiceCloneService.getByUserIdWithNames(userId);
|
||||
return new Result<List<VoiceCloneResponseDTO>>().ok(list);
|
||||
}
|
||||
|
||||
@GetMapping("/ttsPlatforms")
|
||||
@Operation(summary = "获取TTS平台列表")
|
||||
@RequiresPermissions("sys:role:superAdmin")
|
||||
public Result<List<Map<String, Object>>> getTtsPlatformList() {
|
||||
List<Map<String, Object>> list = modelConfigService.getTtsPlatformList();
|
||||
return new Result<List<Map<String, Object>>>().ok(list);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package xiaozhi.modules.voiceclone.dao;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
import xiaozhi.modules.voiceclone.entity.VoiceCloneEntity;
|
||||
|
||||
/**
|
||||
* 声音克隆
|
||||
*/
|
||||
@Mapper
|
||||
public interface VoiceCloneDao extends BaseMapper<VoiceCloneEntity> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package xiaozhi.modules.voiceclone.dto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "声音克隆DTO")
|
||||
public class VoiceCloneDTO {
|
||||
|
||||
@Schema(description = "模型ID")
|
||||
private String modelId;
|
||||
|
||||
@Schema(description = "音色ID列表")
|
||||
private List<String> voiceIds;
|
||||
|
||||
@Schema(description = "用户ID")
|
||||
private Long userId;
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
package xiaozhi.modules.voiceclone.dto;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 声音克隆响应DTO
|
||||
* 用于向前端展示声音克隆信息,包含模型名称和用户名称
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "声音克隆响应DTO")
|
||||
public class VoiceCloneResponseDTO {
|
||||
|
||||
@Schema(description = "唯一标识")
|
||||
private String id;
|
||||
|
||||
@Schema(description = "声音名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "模型id")
|
||||
private String modelId;
|
||||
|
||||
@Schema(description = "模型名称")
|
||||
private String modelName;
|
||||
|
||||
@Schema(description = "声音id")
|
||||
private String voiceId;
|
||||
|
||||
@Schema(description = "用户ID(关联用户表)")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "用户名称")
|
||||
private String userName;
|
||||
|
||||
@Schema(description = "训练状态:0待训练 1训练中 2训练成功 3训练失败")
|
||||
private Integer trainStatus;
|
||||
|
||||
@Schema(description = "训练错误原因")
|
||||
private String trainError;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private Date createDate;
|
||||
|
||||
@Schema(description = "是否有音频数据")
|
||||
private Boolean hasVoice;
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
package xiaozhi.modules.voiceclone.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ai_voice_clone")
|
||||
@Schema(description = "声音克隆")
|
||||
public class VoiceCloneEntity {
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
@Schema(description = "唯一标识")
|
||||
private String id;
|
||||
|
||||
@Schema(description = "声音名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "模型id")
|
||||
private String modelId;
|
||||
|
||||
@Schema(description = "声音id")
|
||||
private String voiceId;
|
||||
|
||||
@Schema(description = "用户 ID(关联用户表)")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "声音")
|
||||
private byte[] voice;
|
||||
|
||||
@Schema(description = "训练状态:0待训练 1训练中 2训练成功 3训练失败")
|
||||
private Integer trainStatus;
|
||||
|
||||
@Schema(description = "训练错误原因")
|
||||
private String trainError;
|
||||
|
||||
@Schema(description = "创建者")
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Long creator;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createDate;
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
package xiaozhi.modules.voiceclone.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import xiaozhi.common.page.PageData;
|
||||
import xiaozhi.common.service.BaseService;
|
||||
import xiaozhi.modules.voiceclone.dto.VoiceCloneDTO;
|
||||
import xiaozhi.modules.voiceclone.dto.VoiceCloneResponseDTO;
|
||||
import xiaozhi.modules.voiceclone.entity.VoiceCloneEntity;
|
||||
|
||||
/**
|
||||
* 声音克隆管理
|
||||
*/
|
||||
public interface VoiceCloneService extends BaseService<VoiceCloneEntity> {
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
PageData<VoiceCloneEntity> page(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 保存声音克隆
|
||||
*/
|
||||
void save(VoiceCloneDTO dto);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
void delete(String[] ids);
|
||||
|
||||
/**
|
||||
* 根据用户ID查询声音克隆列表
|
||||
*/
|
||||
List<VoiceCloneEntity> getByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 分页查询带模型名称和用户名称的声音克隆列表
|
||||
*/
|
||||
PageData<VoiceCloneResponseDTO> pageWithNames(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 根据ID查询带模型名称和用户名称的声音克隆信息
|
||||
*/
|
||||
VoiceCloneResponseDTO getByIdWithNames(String id);
|
||||
|
||||
/**
|
||||
* 根据用户ID查询带模型名称的声音克隆列表
|
||||
*/
|
||||
List<VoiceCloneResponseDTO> getByUserIdWithNames(Long userId);
|
||||
|
||||
/**
|
||||
* 上传音频文件
|
||||
*/
|
||||
void uploadVoice(String id, MultipartFile voiceFile) throws Exception;
|
||||
|
||||
/**
|
||||
* 更新声音克隆名称
|
||||
*/
|
||||
void updateName(String id, String name);
|
||||
|
||||
/**
|
||||
* 获取音频数据
|
||||
*/
|
||||
byte[] getVoiceData(String id);
|
||||
}
|
||||
+210
@@ -0,0 +1,210 @@
|
||||
package xiaozhi.modules.voiceclone.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import xiaozhi.common.page.PageData;
|
||||
import xiaozhi.common.service.impl.BaseServiceImpl;
|
||||
import xiaozhi.common.utils.ConvertUtils;
|
||||
import xiaozhi.common.utils.DateUtils;
|
||||
import xiaozhi.common.exception.ErrorCode;
|
||||
import xiaozhi.common.exception.RenException;
|
||||
import xiaozhi.modules.model.service.ModelConfigService;
|
||||
import xiaozhi.modules.sys.service.SysUserService;
|
||||
import xiaozhi.modules.voiceclone.dao.VoiceCloneDao;
|
||||
import xiaozhi.modules.voiceclone.dto.VoiceCloneDTO;
|
||||
import xiaozhi.modules.voiceclone.dto.VoiceCloneResponseDTO;
|
||||
import xiaozhi.modules.voiceclone.entity.VoiceCloneEntity;
|
||||
import xiaozhi.modules.voiceclone.service.VoiceCloneService;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class VoiceCloneServiceImpl extends BaseServiceImpl<VoiceCloneDao, VoiceCloneEntity>
|
||||
implements VoiceCloneService {
|
||||
|
||||
private final ModelConfigService modelConfigService;
|
||||
private final SysUserService sysUserService;
|
||||
|
||||
@Override
|
||||
public PageData<VoiceCloneEntity> page(Map<String, Object> params) {
|
||||
IPage<VoiceCloneEntity> page = baseDao.selectPage(
|
||||
getPage(params, "create_date", true),
|
||||
getWrapper(params));
|
||||
|
||||
return new PageData<>(page.getRecords(), page.getTotal());
|
||||
}
|
||||
|
||||
private QueryWrapper<VoiceCloneEntity> getWrapper(Map<String, Object> params) {
|
||||
String name = (String) params.get("name");
|
||||
String userId = (String) params.get("userId");
|
||||
|
||||
QueryWrapper<VoiceCloneEntity> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq(StringUtils.isNotBlank(userId), "user_id", userId);
|
||||
if (StringUtils.isNotBlank(name)) {
|
||||
wrapper.and(w -> w.like("name", name)
|
||||
.or().eq("voice_id", name));
|
||||
}
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(VoiceCloneDTO dto) {
|
||||
// 遍历选择的音色ID,为每个音色ID创建一条记录
|
||||
int index = 0;
|
||||
String namePrefix = DateUtils.format(new java.util.Date(), "MMddHHmm");
|
||||
for (String voiceId : dto.getVoiceIds()) {
|
||||
index++;
|
||||
VoiceCloneEntity entity = new VoiceCloneEntity();
|
||||
entity.setModelId(dto.getModelId());
|
||||
entity.setVoiceId(voiceId);
|
||||
entity.setName(namePrefix + "_" + index);
|
||||
entity.setUserId(dto.getUserId());
|
||||
entity.setTrainStatus(0); // 默认训练中
|
||||
|
||||
baseDao.insert(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String[] ids) {
|
||||
baseDao.deleteBatchIds(Arrays.asList(ids));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VoiceCloneEntity> getByUserId(Long userId) {
|
||||
QueryWrapper<VoiceCloneEntity> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("user_id", userId);
|
||||
wrapper.orderByDesc("created_at");
|
||||
return baseDao.selectList(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageData<VoiceCloneResponseDTO> pageWithNames(Map<String, Object> params) {
|
||||
// 先查询分页数据
|
||||
IPage<VoiceCloneEntity> page = baseDao.selectPage(
|
||||
getPage(params, "create_date", true),
|
||||
getWrapper(params));
|
||||
|
||||
// 将实体列表转换为DTO列表
|
||||
List<VoiceCloneResponseDTO> dtoList = convertToResponseDTOList(page.getRecords());
|
||||
|
||||
return new PageData<>(dtoList, page.getTotal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoiceCloneResponseDTO getByIdWithNames(String id) {
|
||||
VoiceCloneEntity entity = baseDao.selectById(id);
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
VoiceCloneResponseDTO dto = ConvertUtils.sourceToTarget(entity, VoiceCloneResponseDTO.class);
|
||||
|
||||
// 设置模型名称
|
||||
if (StringUtils.isNotBlank(entity.getModelId())) {
|
||||
dto.setModelName(modelConfigService.getModelNameById(entity.getModelId()));
|
||||
}
|
||||
|
||||
// 设置用户名称
|
||||
if (entity.getUserId() != null) {
|
||||
dto.setUserName(sysUserService.getByUserId(entity.getUserId()).getUsername());
|
||||
}
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VoiceCloneResponseDTO> getByUserIdWithNames(Long userId) {
|
||||
List<VoiceCloneEntity> entityList = getByUserId(userId);
|
||||
return convertToResponseDTOList(entityList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将VoiceCloneEntity列表转换为VoiceCloneResponseDTO列表
|
||||
*/
|
||||
private List<VoiceCloneResponseDTO> convertToResponseDTOList(List<VoiceCloneEntity> entityList) {
|
||||
if (entityList == null || entityList.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
List<VoiceCloneResponseDTO> dtoList = new ArrayList<>(entityList.size());
|
||||
|
||||
// 转换每个实体为DTO
|
||||
for (VoiceCloneEntity entity : entityList) {
|
||||
VoiceCloneResponseDTO dto = ConvertUtils.sourceToTarget(entity, VoiceCloneResponseDTO.class);
|
||||
|
||||
// 设置模型名称
|
||||
if (StringUtils.isNotBlank(entity.getModelId())) {
|
||||
dto.setModelName(modelConfigService.getModelNameById(entity.getModelId()));
|
||||
}
|
||||
|
||||
// 设置用户名称
|
||||
if (entity.getUserId() != null) {
|
||||
dto.setUserName(sysUserService.getByUserId(entity.getUserId()).getUsername());
|
||||
}
|
||||
|
||||
// 设置是否有音频数据
|
||||
dto.setHasVoice(entity.getVoice() != null);
|
||||
|
||||
dtoList.add(dto);
|
||||
}
|
||||
|
||||
return dtoList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void uploadVoice(String id, MultipartFile voiceFile) throws Exception {
|
||||
// 查询声音克隆记录
|
||||
VoiceCloneEntity entity = baseDao.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new RenException(ErrorCode.VOICE_CLONE_RECORD_NOT_EXIST);
|
||||
}
|
||||
|
||||
// 读取音频文件并转为字节数组
|
||||
byte[] voiceData = voiceFile.getBytes();
|
||||
|
||||
// 更新voice字段
|
||||
entity.setVoice(voiceData);
|
||||
// 更新训练状态为待训练
|
||||
entity.setTrainStatus(0);
|
||||
|
||||
// 保存到数据库
|
||||
baseDao.updateById(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateName(String id, String name) {
|
||||
// 查询声音克隆记录
|
||||
VoiceCloneEntity entity = baseDao.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new RenException(ErrorCode.VOICE_CLONE_RECORD_NOT_EXIST);
|
||||
}
|
||||
|
||||
// 更新名称
|
||||
entity.setName(name);
|
||||
baseDao.updateById(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getVoiceData(String id) {
|
||||
VoiceCloneEntity entity = baseDao.selectById(id);
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
return entity.getVoice();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
-- 声音克隆表
|
||||
DROP TABLE IF EXISTS `ai_voice_clone`;
|
||||
CREATE TABLE `ai_voice_clone` (
|
||||
`id` VARCHAR(32) NOT NULL COMMENT '唯一标识',
|
||||
`name` VARCHAR(64) COMMENT '声音名称',
|
||||
`model_id` VARCHAR(32) COMMENT '模型id',
|
||||
`voice_id` VARCHAR(32) COMMENT '声音id',
|
||||
`user_id` BIGINT COMMENT '用户 ID(关联用户表)',
|
||||
`voice` LONGBLOB COMMENT '声音',
|
||||
`train_status` TINYINT(1) DEFAULT 0 COMMENT '训练状态:0待训练 1训练中 2训练成功 3训练失败',
|
||||
`train_error` VARCHAR(255) COMMENT '训练错误原因',
|
||||
`creator` BIGINT COMMENT '创建者 ID',
|
||||
`create_date` DATETIME COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='声音克隆表';
|
||||
@@ -388,3 +388,10 @@ databaseChangeLog:
|
||||
- sqlFile:
|
||||
encoding: utf8
|
||||
path: classpath:db/changelog/202509220958.sql
|
||||
- changeSet:
|
||||
id: 202510071521
|
||||
author: hrz
|
||||
changes:
|
||||
- sqlFile:
|
||||
encoding: utf8
|
||||
path: classpath:db/changelog/202510071521.sql
|
||||
|
||||
@@ -1,146 +1,157 @@
|
||||
#简体中文
|
||||
500=服务器内部异常
|
||||
401=未授权
|
||||
403=拒绝访问,没有权限
|
||||
#\u7B80\u4F53\u4E2D\u6587
|
||||
500=\u670D\u52A1\u5668\u5185\u90E8\u5F02\u5E38
|
||||
401=\u672A\u6388\u6743
|
||||
403=\u62D2\u7EDD\u8BBF\u95EE\uFF0C\u6CA1\u6709\u6743\u9650
|
||||
|
||||
10001={0}不能为空
|
||||
10002=数据库中已存在该记录
|
||||
10003=获取参数失败
|
||||
10004=账号或密码错误
|
||||
10005=账号已被停用
|
||||
10006=唯一标识不能为空
|
||||
10007=验证码不正确
|
||||
10008=先删除子菜单或按钮
|
||||
10009=原密码不正确
|
||||
10010=账号或密码不正确,您还有可以尝试{0}次
|
||||
10001={0}\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10002=\u6570\u636E\u5E93\u4E2D\u5DF2\u5B58\u5728\u8BE5\u8BB0\u5F55
|
||||
10003=\u83B7\u53D6\u53C2\u6570\u5931\u8D25
|
||||
10004=\u8D26\u53F7\u6216\u5BC6\u7801\u9519\u8BEF
|
||||
10005=\u8D26\u53F7\u5DF2\u88AB\u505C\u7528
|
||||
10006=\u552F\u4E00\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10007=\u9A8C\u8BC1\u7801\u4E0D\u6B63\u786E
|
||||
10008=\u5148\u5220\u9664\u5B50\u83DC\u5355\u6216\u6309\u94AE
|
||||
10009=\u539F\u5BC6\u7801\u4E0D\u6B63\u786E
|
||||
10010=\u8D26\u53F7\u6216\u5BC6\u7801\u4E0D\u6B63\u786E,\u60A8\u8FD8\u6709\u53EF\u4EE5\u5C1D\u8BD5{0}\u6B21
|
||||
|
||||
10011=上级部门选择错误
|
||||
10012=上级菜单不能为自身
|
||||
10013=数据权限接口,只能是Map类型参数
|
||||
10014=请先删除下级部门
|
||||
10015=请先删除部门下的用户
|
||||
10016=部署失败,没有流程
|
||||
10017=模型图不正确,请检查
|
||||
10018=导出失败,模型ID为{0}
|
||||
10011=\u4E0A\u7EA7\u90E8\u95E8\u9009\u62E9\u9519\u8BEF
|
||||
10012=\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u4E3A\u81EA\u8EAB
|
||||
10013=\u6570\u636E\u6743\u9650\u63A5\u53E3\uFF0C\u53EA\u80FD\u662FMap\u7C7B\u578B\u53C2\u6570
|
||||
10014=\u8BF7\u5148\u5220\u9664\u4E0B\u7EA7\u90E8\u95E8
|
||||
10015=\u8BF7\u5148\u5220\u9664\u90E8\u95E8\u4E0B\u7684\u7528\u6237
|
||||
10016=\u90E8\u7F72\u5931\u8D25\uFF0C\u6CA1\u6709\u6D41\u7A0B
|
||||
10017=\u6A21\u578B\u56FE\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5
|
||||
10018=\u5BFC\u51FA\u5931\u8D25\uFF0C\u6A21\u578BID\u4E3A{0}
|
||||
|
||||
10019=请上传文件
|
||||
10020=token不能为空
|
||||
10021=token失效,请重新登录
|
||||
10022=账号已被锁定
|
||||
10023=请上传zip、bar、bpmn、bpmn20.xml格式文件
|
||||
10019=\u8BF7\u4E0A\u4F20\u6587\u4EF6
|
||||
10020=token\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10021=token\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
|
||||
10022=\u8D26\u53F7\u5DF2\u88AB\u9501\u5B9A
|
||||
10023=\u8BF7\u4E0A\u4F20zip\u3001bar\u3001bpmn\u3001bpmn20.xml\u683C\u5F0F\u6587\u4EF6
|
||||
|
||||
10024=上传文件失败{0}
|
||||
10025=发送短信失败{0}
|
||||
10026=邮件模板不存在
|
||||
10024=\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25{0}
|
||||
10025=\u53D1\u9001\u77ED\u4FE1\u5931\u8D25{0}
|
||||
10026=\u90AE\u4EF6\u6A21\u677F\u4E0D\u5B58\u5728
|
||||
|
||||
10027=Redis服务异常
|
||||
10028=定时任务失败
|
||||
10029=不能包含非法字符
|
||||
10030=密码长度不足{0}位
|
||||
10031=密码必须同时包含数字、大小写字母和特殊字符组成
|
||||
10032=删除本数据异常
|
||||
10033=设备验证码错误
|
||||
10027=Redis\u670D\u52A1\u5F02\u5E38
|
||||
10028=\u5B9A\u65F6\u4EFB\u52A1\u5931\u8D25
|
||||
10029=\u4E0D\u80FD\u5305\u542B\u975E\u6CD5\u5B57\u7B26
|
||||
10030=\u5BC6\u7801\u957F\u5EA6\u4E0D\u8DB3{0}\u4F4D
|
||||
10031=\u5BC6\u7801\u5FC5\u987B\u540C\u65F6\u5305\u542B\u6570\u5B57\u3001\u5927\u5C0F\u5199\u5B57\u6BCD\u548C\u7279\u6B8A\u5B57\u7B26\u7EC4\u6210
|
||||
10032=\u5220\u9664\u672C\u6570\u636E\u5F02\u5E38
|
||||
10033=\u8BBE\u5907\u9A8C\u8BC1\u7801\u9519\u8BEF
|
||||
|
||||
10034=参数值不能为空
|
||||
10035=参数类型不能为空
|
||||
10036=不支持的参数类型
|
||||
10037=参数值必须是有效的数字
|
||||
10038=参数值必须是true或false
|
||||
10039=参数值必须是有效的JSON数组格式
|
||||
10040=参数值必须是有效的JSON格式
|
||||
10034=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10035=\u53C2\u6570\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10036=\u4E0D\u652F\u6301\u7684\u53C2\u6570\u7C7B\u578B
|
||||
10037=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684\u6570\u5B57
|
||||
10038=\u53C2\u6570\u503C\u5FC5\u987B\u662Ftrue\u6216false
|
||||
10039=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684JSON\u6570\u7EC4\u683C\u5F0F
|
||||
10040=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684JSON\u683C\u5F0F
|
||||
|
||||
10041=设备未找到
|
||||
10041=\u8BBE\u5907\u672A\u627E\u5230
|
||||
10042={0}
|
||||
10043=删除数据失败
|
||||
10044=用户未登录
|
||||
10045=WebSocket连接失败或连接超时
|
||||
10046=保存声纹错误,请联系管理员
|
||||
10047=每日发送次数已达上限
|
||||
10048=旧密码输入错误
|
||||
10049=设置的LLM不是openai和ollama
|
||||
10050=token生成失败
|
||||
10051=资源不存在
|
||||
10052=默认智能体未找到
|
||||
10053=智能体未找到
|
||||
10054=声纹接口未配置,请先在参数配置中配置声纹接口地址(server.voice_print)
|
||||
10055=短信发送失败
|
||||
10056=短信连接建立失败
|
||||
10057=智能体的声纹创建失败
|
||||
10058=智能体的对应声纹更新失败
|
||||
10059=智能体的对应声纹删除失败
|
||||
10060=发送太频繁,请{0}秒后再试
|
||||
10061=激活码不能为空
|
||||
10062=激活码错误
|
||||
10063=设备已激活
|
||||
10064=该模型为默认模型,请先设置其他模型为默认模型
|
||||
10065=新增数据失败
|
||||
10066=修改数据失败
|
||||
10067=图形验证码错误
|
||||
10068=没有开启手机注册,没法使用短信验证码功能
|
||||
10069=用户名不是手机号码,请重新输入
|
||||
10070=此手机号码已经注册过
|
||||
10071=输入的手机号码未注册
|
||||
10072=当前不允许普通用户注册
|
||||
10073=没有开启手机注册,没法使用找回密码功能
|
||||
10074=输入的手机号码格式不正确
|
||||
10075=输入的手机验证码错误
|
||||
10076=字典类型不存在
|
||||
10077=字典类型编码重复
|
||||
10078=读取资源失败
|
||||
10079=LLM大模型和Intent意图识别,选择参数不匹配
|
||||
10080=此声音声纹对应的人({0})已经注册,请选择其他声音注册
|
||||
10081=删除声纹出现错误
|
||||
10082=此次修改不允许,此声音已经注册为声纹了({0})
|
||||
10083=修改声纹错误,请联系管理员
|
||||
10084=声纹接口地址存在错误,请进入参数管理修改声纹接口地址
|
||||
10085=音频数据不属于这个智能体
|
||||
10086=音频数据是空的请检查上传数据
|
||||
10087=声纹保存失败,请求不成功
|
||||
10088=声纹保存失败,请求处理失败
|
||||
10089=声纹注销失败,请求不成功
|
||||
10090=声纹注销失败,请求处理失败
|
||||
10091=供应器不存在
|
||||
10092=设置的LLM不存在
|
||||
10093=该模型配置已被智能体{0}引用,无法删除
|
||||
10094=该LLM模型已被意图识别配置引用,无法删除
|
||||
10095=无效服务端操作
|
||||
10096=未配置服务端WebSocket地址
|
||||
10097=目标WebSocket地址不存在
|
||||
10098=WebSocket地址列表不能为空
|
||||
10099=WebSocket地址不能使用localhost或127.0.0.1
|
||||
10100=WebSocket地址格式不正确
|
||||
10101=WebSocket连接测试失败
|
||||
10102=OTA地址不能为空
|
||||
10103=OTA地址不能使用localhost或127.0.0.1
|
||||
10104=OTA地址必须以http或https开头
|
||||
10105=OTA地址必须以/ota/结尾
|
||||
10106=OTA接口访问失败
|
||||
10107=OTA接口返回内容格式不正确
|
||||
10108=OTA接口验证失败
|
||||
10109=MCP地址不能为空
|
||||
10110=MCP地址不能使用localhost或127.0.0.1
|
||||
10111=不是正确的MCP地址
|
||||
10112=MCP接口访问失败
|
||||
10113=MCP接口返回内容格式不正确
|
||||
10114=MCP接口验证失败
|
||||
10115=声纹接口地址不能为空
|
||||
10116=声纹接口地址不能使用localhost或127.0.0.1
|
||||
10117=不是正确的声纹接口地址
|
||||
10118=声纹接口地址必须以http或https开头
|
||||
10119=声纹接口访问失败
|
||||
10120=声纹接口返回内容格式不正确
|
||||
10121=声纹接口验证失败
|
||||
10122=mqtt密钥不能为空
|
||||
10123=您的mqtt密钥长度不安全,字符数需要至少8个字符且必须同时包含大小写字母
|
||||
10124=您的mqtt密钥长度不安全,mqtt密钥必须同时包含大小写字母
|
||||
10125=您的mqtt密钥包含弱密码
|
||||
10128=字典标签重复
|
||||
10129=modelType和provideCode不能为空
|
||||
10132=没有权限查看该智能体的聊天记录
|
||||
10133=会话ID不能为空
|
||||
10134=智能体ID不能为空
|
||||
10135=聊天记录下载失败
|
||||
10136=下载链接已过期或无效
|
||||
10137=下载链接无效
|
||||
10138=用户
|
||||
10139=智体
|
||||
10043=\u5220\u9664\u6570\u636E\u5931\u8D25
|
||||
10044=\u7528\u6237\u672A\u767B\u5F55
|
||||
10045=WebSocket\u8FDE\u63A5\u5931\u8D25\u6216\u8FDE\u63A5\u8D85\u65F6
|
||||
10046=\u4FDD\u5B58\u58F0\u7EB9\u9519\u8BEF\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
|
||||
10047=\u6BCF\u65E5\u53D1\u9001\u6B21\u6570\u5DF2\u8FBE\u4E0A\u9650
|
||||
10048=\u65E7\u5BC6\u7801\u8F93\u5165\u9519\u8BEF
|
||||
10049=\u8BBE\u7F6E\u7684LLM\u4E0D\u662Fopenai\u548Collama
|
||||
10050=token\u751F\u6210\u5931\u8D25
|
||||
10051=\u8D44\u6E90\u4E0D\u5B58\u5728
|
||||
10052=\u9ED8\u8BA4\u667A\u80FD\u4F53\u672A\u627E\u5230
|
||||
10053=\u667A\u80FD\u4F53\u672A\u627E\u5230
|
||||
10054=\u58F0\u7EB9\u63A5\u53E3\u672A\u914D\u7F6E\uFF0C\u8BF7\u5148\u5728\u53C2\u6570\u914D\u7F6E\u4E2D\u914D\u7F6E\u58F0\u7EB9\u63A5\u53E3\u5730\u5740(server.voice_print)
|
||||
10055=\u77ED\u4FE1\u53D1\u9001\u5931\u8D25
|
||||
10056=\u77ED\u4FE1\u8FDE\u63A5\u5EFA\u7ACB\u5931\u8D25
|
||||
10057=\u667A\u80FD\u4F53\u7684\u58F0\u7EB9\u521B\u5EFA\u5931\u8D25
|
||||
10058=\u667A\u80FD\u4F53\u7684\u5BF9\u5E94\u58F0\u7EB9\u66F4\u65B0\u5931\u8D25
|
||||
10059=\u667A\u80FD\u4F53\u7684\u5BF9\u5E94\u58F0\u7EB9\u5220\u9664\u5931\u8D25
|
||||
10060=\u53D1\u9001\u592A\u9891\u7E41\uFF0C\u8BF7{0}\u79D2\u540E\u518D\u8BD5
|
||||
10061=\u6FC0\u6D3B\u7801\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10062=\u6FC0\u6D3B\u7801\u9519\u8BEF
|
||||
10063=\u8BBE\u5907\u5DF2\u6FC0\u6D3B
|
||||
10064=\u8BE5\u6A21\u578B\u4E3A\u9ED8\u8BA4\u6A21\u578B\uFF0C\u8BF7\u5148\u8BBE\u7F6E\u5176\u4ED6\u6A21\u578B\u4E3A\u9ED8\u8BA4\u6A21\u578B
|
||||
10065=\u65B0\u589E\u6570\u636E\u5931\u8D25
|
||||
10066=\u4FEE\u6539\u6570\u636E\u5931\u8D25
|
||||
10067=\u56FE\u5F62\u9A8C\u8BC1\u7801\u9519\u8BEF
|
||||
10068=\u6CA1\u6709\u5F00\u542F\u624B\u673A\u6CE8\u518C\uFF0C\u6CA1\u6CD5\u4F7F\u7528\u77ED\u4FE1\u9A8C\u8BC1\u7801\u529F\u80FD
|
||||
10069=\u7528\u6237\u540D\u4E0D\u662F\u624B\u673A\u53F7\u7801\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165
|
||||
10070=\u6B64\u624B\u673A\u53F7\u7801\u5DF2\u7ECF\u6CE8\u518C\u8FC7
|
||||
10071=\u8F93\u5165\u7684\u624B\u673A\u53F7\u7801\u672A\u6CE8\u518C
|
||||
10072=\u5F53\u524D\u4E0D\u5141\u8BB8\u666E\u901A\u7528\u6237\u6CE8\u518C
|
||||
10073=\u6CA1\u6709\u5F00\u542F\u624B\u673A\u6CE8\u518C\uFF0C\u6CA1\u6CD5\u4F7F\u7528\u627E\u56DE\u5BC6\u7801\u529F\u80FD
|
||||
10074=\u8F93\u5165\u7684\u624B\u673A\u53F7\u7801\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10075=\u8F93\u5165\u7684\u624B\u673A\u9A8C\u8BC1\u7801\u9519\u8BEF
|
||||
10076=\u5B57\u5178\u7C7B\u578B\u4E0D\u5B58\u5728
|
||||
10077=\u5B57\u5178\u7C7B\u578B\u7F16\u7801\u91CD\u590D
|
||||
10078=\u8BFB\u53D6\u8D44\u6E90\u5931\u8D25
|
||||
10079=LLM\u5927\u6A21\u578B\u548CIntent\u610F\u56FE\u8BC6\u522B\uFF0C\u9009\u62E9\u53C2\u6570\u4E0D\u5339\u914D
|
||||
10080=\u6B64\u58F0\u97F3\u58F0\u7EB9\u5BF9\u5E94\u7684\u4EBA\uFF08{0}\uFF09\u5DF2\u7ECF\u6CE8\u518C\uFF0C\u8BF7\u9009\u62E9\u5176\u4ED6\u58F0\u97F3\u6CE8\u518C
|
||||
10081=\u5220\u9664\u58F0\u7EB9\u51FA\u73B0\u9519\u8BEF
|
||||
10082=\u6B64\u6B21\u4FEE\u6539\u4E0D\u5141\u8BB8\uFF0C\u6B64\u58F0\u97F3\u5DF2\u7ECF\u6CE8\u518C\u4E3A\u58F0\u7EB9\u4E86\uFF08{0}\uFF09
|
||||
10083=\u4FEE\u6539\u58F0\u7EB9\u9519\u8BEF\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
|
||||
10084=\u58F0\u7EB9\u63A5\u53E3\u5730\u5740\u5B58\u5728\u9519\u8BEF\uFF0C\u8BF7\u8FDB\u5165\u53C2\u6570\u7BA1\u7406\u4FEE\u6539\u58F0\u7EB9\u63A5\u53E3\u5730\u5740
|
||||
10085=\u97F3\u9891\u6570\u636E\u4E0D\u5C5E\u4E8E\u8FD9\u4E2A\u667A\u80FD\u4F53
|
||||
10086=\u97F3\u9891\u6570\u636E\u662F\u7A7A\u7684\u8BF7\u68C0\u67E5\u4E0A\u4F20\u6570\u636E
|
||||
10087=\u58F0\u7EB9\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u6C42\u4E0D\u6210\u529F
|
||||
10088=\u58F0\u7EB9\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u6C42\u5904\u7406\u5931\u8D25
|
||||
10089=\u58F0\u7EB9\u6CE8\u9500\u5931\u8D25\uFF0C\u8BF7\u6C42\u4E0D\u6210\u529F
|
||||
10090=\u58F0\u7EB9\u6CE8\u9500\u5931\u8D25\uFF0C\u8BF7\u6C42\u5904\u7406\u5931\u8D25
|
||||
10091=\u4F9B\u5E94\u5668\u4E0D\u5B58\u5728
|
||||
10092=\u8BBE\u7F6E\u7684LLM\u4E0D\u5B58\u5728
|
||||
10093=\u8BE5\u6A21\u578B\u914D\u7F6E\u5DF2\u88AB\u667A\u80FD\u4F53{0}\u5F15\u7528\uFF0C\u65E0\u6CD5\u5220\u9664
|
||||
10094=\u8BE5LLM\u6A21\u578B\u5DF2\u88AB\u610F\u56FE\u8BC6\u522B\u914D\u7F6E\u5F15\u7528\uFF0C\u65E0\u6CD5\u5220\u9664
|
||||
10095=\u65E0\u6548\u670D\u52A1\u7AEF\u64CD\u4F5C
|
||||
10096=\u672A\u914D\u7F6E\u670D\u52A1\u7AEFWebSocket\u5730\u5740
|
||||
10097=\u76EE\u6807WebSocket\u5730\u5740\u4E0D\u5B58\u5728
|
||||
10098=WebSocket\u5730\u5740\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10099=WebSocket\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10100=WebSocket\u5730\u5740\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10101=WebSocket\u8FDE\u63A5\u6D4B\u8BD5\u5931\u8D25
|
||||
10102=OTA\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10103=OTA\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10104=OTA\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934
|
||||
10105=OTA\u5730\u5740\u5FC5\u987B\u4EE5/ota/\u7ED3\u5C3E
|
||||
10106=OTA\u63A5\u53E3\u8BBF\u95EE\u5931\u8D25
|
||||
10107=OTA\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10108=OTA\u63A5\u53E3\u9A8C\u8BC1\u5931\u8D25
|
||||
10109=MCP\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10110=MCP\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10111=\u4E0D\u662F\u6B63\u786E\u7684MCP\u5730\u5740
|
||||
10112=MCP\u63A5\u53E3\u8BBF\u95EE\u5931\u8D25
|
||||
10113=MCP\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10114=MCP\u63A5\u53E3\u9A8C\u8BC1\u5931\u8D25
|
||||
10115=\u58F0\u7EB9\u63A5\u53E3\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10116=\u58F0\u7EB9\u63A5\u53E3\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10117=\u4E0D\u662F\u6B63\u786E\u7684\u58F0\u7EB9\u63A5\u53E3\u5730\u5740
|
||||
10118=\u58F0\u7EB9\u63A5\u53E3\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934
|
||||
10119=\u58F0\u7EB9\u63A5\u53E3\u8BBF\u95EE\u5931\u8D25
|
||||
10120=\u58F0\u7EB9\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10121=\u58F0\u7EB9\u63A5\u53E3\u9A8C\u8BC1\u5931\u8D25
|
||||
10122=mqtt\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10123=\u60A8\u7684mqtt\u5BC6\u94A5\u957F\u5EA6\u4E0D\u5B89\u5168\uFF0C\u5B57\u7B26\u6570\u9700\u8981\u81F3\u5C118\u4E2A\u5B57\u7B26\u4E14\u5FC5\u987B\u540C\u65F6\u5305\u542B\u5927\u5C0F\u5199\u5B57\u6BCD
|
||||
10124=\u60A8\u7684mqtt\u5BC6\u94A5\u957F\u5EA6\u4E0D\u5B89\u5168\uFF0Cmqtt\u5BC6\u94A5\u5FC5\u987B\u540C\u65F6\u5305\u542B\u5927\u5C0F\u5199\u5B57\u6BCD
|
||||
10125=\u60A8\u7684mqtt\u5BC6\u94A5\u5305\u542B\u5F31\u5BC6\u7801
|
||||
10128=\u5B57\u5178\u6807\u7B7E\u91CD\u590D
|
||||
10129=modelType\u548CprovideCode\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10132=\u6CA1\u6709\u6743\u9650\u67E5\u770B\u8BE5\u667A\u80FD\u4F53\u7684\u804A\u5929\u8BB0\u5F55
|
||||
10133=\u4F1A\u8BDDID\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10134=\u667A\u80FD\u4F53ID\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10135=\u804A\u5929\u8BB0\u5F55\u4E0B\u8F7D\u5931\u8D25
|
||||
10136=\u4E0B\u8F7D\u94FE\u63A5\u5DF2\u8FC7\u671F\u6216\u65E0\u6548
|
||||
10137=\u4E0B\u8F7D\u94FE\u63A5\u65E0\u6548
|
||||
10138=\u7528\u6237
|
||||
10139=\u667A\u4F53
|
||||
10140=\u97F3\u9891\u6587\u4EF6\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10141=\u53EA\u652F\u6301\u97F3\u9891\u6587\u4EF6
|
||||
10142=\u97F3\u9891\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC710MB
|
||||
10143=\u4E0A\u4F20\u5931\u8D25
|
||||
10144=\u58F0\u97F3\u514B\u9686\u8BB0\u5F55\u4E0D\u5B58\u5728
|
||||
10145=\u97F3\u8272\u8D44\u6E90\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10146=\u5E73\u53F0\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10147=\u97F3\u8272ID\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10148=\u5F52\u5C5E\u8D26\u53F7\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10149=\u5220\u9664\u7684\u97F3\u8272\u8D44\u6E90ID\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10150=\u60A8\u6CA1\u6709\u6743\u9650\u64CD\u4F5C\u8BE5\u8BB0\u5F55
|
||||
@@ -145,4 +145,15 @@
|
||||
10136=Download link expired or invalid
|
||||
10137=Download link invalid
|
||||
10138=User
|
||||
10139=Agent
|
||||
10139=Agent
|
||||
10140=Audio file cannot be empty
|
||||
10141=Only audio files are supported
|
||||
10142=Audio file size cannot exceed 10MB
|
||||
10143=Upload failed
|
||||
10144=Voice clone record does not exist
|
||||
10145=Voice resource information cannot be empty
|
||||
10146=TTS platform name cannot be empty
|
||||
10147=Voice ID cannot be empty
|
||||
10148=Owner account cannot be empty
|
||||
10149=Voice resource ID to delete cannot be empty
|
||||
10150=You do not have permission to operate this record
|
||||
@@ -1,148 +1,159 @@
|
||||
#简体中文
|
||||
500=服务器内部异常
|
||||
401=未授权
|
||||
403=拒绝访问,没有权限
|
||||
#\u7B80\u4F53\u4E2D\u6587
|
||||
500=\u670D\u52A1\u5668\u5185\u90E8\u5F02\u5E38
|
||||
401=\u672A\u6388\u6743
|
||||
403=\u62D2\u7EDD\u8BBF\u95EE\uFF0C\u6CA1\u6709\u6743\u9650
|
||||
|
||||
10001={0}不能为空
|
||||
10002=数据库中已存在该记录
|
||||
10003=获取参数失败
|
||||
10004=账号或密码错误
|
||||
10005=账号已被停用
|
||||
10006=唯一标识不能为空
|
||||
10007=验证码不正确
|
||||
10008=先删除子菜单或按钮
|
||||
10009=原密码不正确
|
||||
10010=账号或密码不正确,您还有可以尝试{0}次
|
||||
10001={0}\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10002=\u6570\u636E\u5E93\u4E2D\u5DF2\u5B58\u5728\u8BE5\u8BB0\u5F55
|
||||
10003=\u83B7\u53D6\u53C2\u6570\u5931\u8D25
|
||||
10004=\u8D26\u53F7\u6216\u5BC6\u7801\u9519\u8BEF
|
||||
10005=\u8D26\u53F7\u5DF2\u88AB\u505C\u7528
|
||||
10006=\u552F\u4E00\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10007=\u9A8C\u8BC1\u7801\u4E0D\u6B63\u786E
|
||||
10008=\u5148\u5220\u9664\u5B50\u83DC\u5355\u6216\u6309\u94AE
|
||||
10009=\u539F\u5BC6\u7801\u4E0D\u6B63\u786E
|
||||
10010=\u8D26\u53F7\u6216\u5BC6\u7801\u4E0D\u6B63\u786E,\u60A8\u8FD8\u6709\u53EF\u4EE5\u5C1D\u8BD5{0}\u6B21
|
||||
|
||||
10011=上级部门选择错误
|
||||
10012=上级菜单不能为自身
|
||||
10013=数据权限接口,只能是Map类型参数
|
||||
10014=请先删除下级部门
|
||||
10015=请先删除部门下的用户
|
||||
10016=部署失败,没有流程
|
||||
10017=模型图不正确,请检查
|
||||
10018=导出失败,模型ID为{0}
|
||||
10011=\u4E0A\u7EA7\u90E8\u95E8\u9009\u62E9\u9519\u8BEF
|
||||
10012=\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u4E3A\u81EA\u8EAB
|
||||
10013=\u6570\u636E\u6743\u9650\u63A5\u53E3\uFF0C\u53EA\u80FD\u662FMap\u7C7B\u578B\u53C2\u6570
|
||||
10014=\u8BF7\u5148\u5220\u9664\u4E0B\u7EA7\u90E8\u95E8
|
||||
10015=\u8BF7\u5148\u5220\u9664\u90E8\u95E8\u4E0B\u7684\u7528\u6237
|
||||
10016=\u90E8\u7F72\u5931\u8D25\uFF0C\u6CA1\u6709\u6D41\u7A0B
|
||||
10017=\u6A21\u578B\u56FE\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5
|
||||
10018=\u5BFC\u51FA\u5931\u8D25\uFF0C\u6A21\u578BID\u4E3A{0}
|
||||
|
||||
10019=请上传文件
|
||||
10020=token不能为空
|
||||
10021=token失效,请重新登录
|
||||
10022=账号已被锁定
|
||||
10023=请上传zip、bar、bpmn、bpmn20.xml格式文件
|
||||
10019=\u8BF7\u4E0A\u4F20\u6587\u4EF6
|
||||
10020=token\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10021=token\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
|
||||
10022=\u8D26\u53F7\u5DF2\u88AB\u9501\u5B9A
|
||||
10023=\u8BF7\u4E0A\u4F20zip\u3001bar\u3001bpmn\u3001bpmn20.xml\u683C\u5F0F\u6587\u4EF6
|
||||
|
||||
10024=上传文件失败{0}
|
||||
10025=发送短信失败{0}
|
||||
10026=邮件模板不存在
|
||||
10024=\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25{0}
|
||||
10025=\u53D1\u9001\u77ED\u4FE1\u5931\u8D25{0}
|
||||
10026=\u90AE\u4EF6\u6A21\u677F\u4E0D\u5B58\u5728
|
||||
|
||||
10027=Redis服务异常
|
||||
10028=定时任务失败
|
||||
10029=不能包含非法字符
|
||||
10030=密码长度不足{0}位
|
||||
10031=密码必须同时包含数字、大小写字母和特殊字符组成
|
||||
10032=删除本数据异常
|
||||
10033=设备验证码错误
|
||||
10027=Redis\u670D\u52A1\u5F02\u5E38
|
||||
10028=\u5B9A\u65F6\u4EFB\u52A1\u5931\u8D25
|
||||
10029=\u4E0D\u80FD\u5305\u542B\u975E\u6CD5\u5B57\u7B26
|
||||
10030=\u5BC6\u7801\u957F\u5EA6\u4E0D\u8DB3{0}\u4F4D
|
||||
10031=\u5BC6\u7801\u5FC5\u987B\u540C\u65F6\u5305\u542B\u6570\u5B57\u3001\u5927\u5C0F\u5199\u5B57\u6BCD\u548C\u7279\u6B8A\u5B57\u7B26\u7EC4\u6210
|
||||
10032=\u5220\u9664\u672C\u6570\u636E\u5F02\u5E38
|
||||
10033=\u8BBE\u5907\u9A8C\u8BC1\u7801\u9519\u8BEF
|
||||
|
||||
10034=参数值不能为空
|
||||
10035=参数类型不能为空
|
||||
10036=不支持的参数类型
|
||||
10037=参数值必须是有效的数字
|
||||
10038=参数值必须是true或false
|
||||
10039=参数值必须是有效的JSON数组格式
|
||||
10040=参数值必须是有效的JSON格式
|
||||
10034=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10035=\u53C2\u6570\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10036=\u4E0D\u652F\u6301\u7684\u53C2\u6570\u7C7B\u578B
|
||||
10037=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684\u6570\u5B57
|
||||
10038=\u53C2\u6570\u503C\u5FC5\u987B\u662Ftrue\u6216false
|
||||
10039=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684JSON\u6570\u7EC4\u683C\u5F0F
|
||||
10040=\u53C2\u6570\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684JSON\u683C\u5F0F
|
||||
|
||||
10041=设备未找到
|
||||
10041=\u8BBE\u5907\u672A\u627E\u5230
|
||||
10042={0}
|
||||
10043=删除数据失败
|
||||
10044=用户未登录
|
||||
10045=WebSocket连接失败或连接超时
|
||||
10046=保存声纹错误,请联系管理员
|
||||
10047=每日发送次数已达上限
|
||||
10048=旧密码输入错误
|
||||
10049=设置的LLM不是openai和ollama
|
||||
10050=token生成失败
|
||||
10051=资源不存在
|
||||
10052=默认智能体未找到
|
||||
10053=智能体未找到
|
||||
10054=声纹接口未配置,请先在参数配置中配置声纹接口地址(server.voice_print)
|
||||
10055=短信发送失败
|
||||
10056=短信连接建立失败
|
||||
10057=智能体的声纹创建失败
|
||||
10058=智能体的对应声纹更新失败
|
||||
10059=智能体的对应声纹删除失败
|
||||
10060=发送太频繁,请{0}秒后再试
|
||||
10061=激活码不能为空
|
||||
10062=激活码错误
|
||||
10063=设备已激活
|
||||
10064=该模型为默认模型,请先设置其他模型为默认模型
|
||||
10065=新增数据失败
|
||||
10066=修改数据失败
|
||||
10067=图形验证码错误
|
||||
10068=没有开启手机注册,没法使用短信验证码功能
|
||||
10069=用户名不是手机号码,请重新输入
|
||||
10070=此手机号码已经注册过
|
||||
10071=输入的手机号码未注册
|
||||
10072=当前不允许普通用户注册
|
||||
10073=没有开启手机注册,没法使用找回密码功能
|
||||
10074=输入的手机号码格式不正确
|
||||
10075=输入的手机验证码错误
|
||||
10076=字典类型不存在
|
||||
10077=字典类型编码重复
|
||||
10078=读取资源失败
|
||||
10079=LLM大模型和Intent意图识别,选择参数不匹配
|
||||
10080=此声音声纹对应的人({0})已经注册,请选择其他声音注册
|
||||
10081=删除声纹出现错误
|
||||
10082=此次修改不允许,此声音已经注册为声纹了({0})
|
||||
10083=修改声纹错误,请联系管理员
|
||||
10084=声纹接口地址存在错误,请进入参数管理修改声纹接口地址
|
||||
10085=音频数据不属于这个智能体
|
||||
10086=音频数据是空的请检查上传数据
|
||||
10087=声纹保存失败,请求不成功
|
||||
10088=声纹保存失败,请求处理失败
|
||||
10089=声纹注销失败,请求不成功
|
||||
10090=声纹注销失败,请求处理失败
|
||||
10091=供应器不存在
|
||||
10092=设置的LLM不存在
|
||||
10093=该模型配置已被智能体{0}引用,无法删除
|
||||
10094=该LLM模型已被意图识别配置引用,无法删除
|
||||
10095=无效服务端操作
|
||||
10096=未配置服务端WebSocket地址
|
||||
10097=目标WebSocket地址不存在
|
||||
10098=WebSocket地址列表不能为空
|
||||
10099=WebSocket地址不能使用localhost或127.0.0.1
|
||||
10100=WebSocket地址格式不正确
|
||||
10101=WebSocket连接测试失败
|
||||
10102=OTA地址不能为空
|
||||
10103=OTA地址不能使用localhost或127.0.0.1
|
||||
10104=OTA地址必须以http或https开头
|
||||
10105=OTA地址必须以/ota/结尾
|
||||
10106=OTA接口访问失败
|
||||
10107=OTA接口返回内容格式不正确
|
||||
10108=OTA接口验证失败
|
||||
10109=MCP地址不能为空
|
||||
10110=MCP地址不能使用localhost或127.0.0.1
|
||||
10111=不是正确的MCP地址
|
||||
10112=MCP接口访问失败
|
||||
10113=MCP接口返回内容格式不正确
|
||||
10114=MCP接口验证失败
|
||||
10115=声纹接口地址不能为空
|
||||
10116=声纹接口地址不能使用localhost或127.0.0.1
|
||||
10117=不是正确的声纹接口地址
|
||||
10118=声纹接口地址必须以http或https开头
|
||||
10119=声纹接口访问失败
|
||||
10120=声纹接口返回内容格式不正确
|
||||
10121=声纹接口验证失败
|
||||
10122=mqtt密钥不能为空
|
||||
10123=您的mqtt密钥长度不安全,字符数需要至少8个字符且必须同时包含大小写字母
|
||||
10124=您的mqtt密钥长度不安全,mqtt密钥必须同时包含大小写字母
|
||||
10125=您的mqtt密钥包含弱密码
|
||||
10128=字典标签重复
|
||||
10129=SM2密钥未配置
|
||||
10130=SM2解密失败
|
||||
10131=modelType和provideCode不能为空
|
||||
10132=没有权限查看该智能体的聊天记录
|
||||
10133=会话ID不能为空
|
||||
10134=智能体ID不能为空
|
||||
10135=聊天记录下载失败
|
||||
10136=下载链接已过期或无效
|
||||
10137=下载链接无效
|
||||
10138=用户
|
||||
10139=智体
|
||||
10043=\u5220\u9664\u6570\u636E\u5931\u8D25
|
||||
10044=\u7528\u6237\u672A\u767B\u5F55
|
||||
10045=WebSocket\u8FDE\u63A5\u5931\u8D25\u6216\u8FDE\u63A5\u8D85\u65F6
|
||||
10046=\u4FDD\u5B58\u58F0\u7EB9\u9519\u8BEF\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
|
||||
10047=\u6BCF\u65E5\u53D1\u9001\u6B21\u6570\u5DF2\u8FBE\u4E0A\u9650
|
||||
10048=\u65E7\u5BC6\u7801\u8F93\u5165\u9519\u8BEF
|
||||
10049=\u8BBE\u7F6E\u7684LLM\u4E0D\u662Fopenai\u548Collama
|
||||
10050=token\u751F\u6210\u5931\u8D25
|
||||
10051=\u8D44\u6E90\u4E0D\u5B58\u5728
|
||||
10052=\u9ED8\u8BA4\u667A\u80FD\u4F53\u672A\u627E\u5230
|
||||
10053=\u667A\u80FD\u4F53\u672A\u627E\u5230
|
||||
10054=\u58F0\u7EB9\u63A5\u53E3\u672A\u914D\u7F6E\uFF0C\u8BF7\u5148\u5728\u53C2\u6570\u914D\u7F6E\u4E2D\u914D\u7F6E\u58F0\u7EB9\u63A5\u53E3\u5730\u5740(server.voice_print)
|
||||
10055=\u77ED\u4FE1\u53D1\u9001\u5931\u8D25
|
||||
10056=\u77ED\u4FE1\u8FDE\u63A5\u5EFA\u7ACB\u5931\u8D25
|
||||
10057=\u667A\u80FD\u4F53\u7684\u58F0\u7EB9\u521B\u5EFA\u5931\u8D25
|
||||
10058=\u667A\u80FD\u4F53\u7684\u5BF9\u5E94\u58F0\u7EB9\u66F4\u65B0\u5931\u8D25
|
||||
10059=\u667A\u80FD\u4F53\u7684\u5BF9\u5E94\u58F0\u7EB9\u5220\u9664\u5931\u8D25
|
||||
10060=\u53D1\u9001\u592A\u9891\u7E41\uFF0C\u8BF7{0}\u79D2\u540E\u518D\u8BD5
|
||||
10061=\u6FC0\u6D3B\u7801\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10062=\u6FC0\u6D3B\u7801\u9519\u8BEF
|
||||
10063=\u8BBE\u5907\u5DF2\u6FC0\u6D3B
|
||||
10064=\u8BE5\u6A21\u578B\u4E3A\u9ED8\u8BA4\u6A21\u578B\uFF0C\u8BF7\u5148\u8BBE\u7F6E\u5176\u4ED6\u6A21\u578B\u4E3A\u9ED8\u8BA4\u6A21\u578B
|
||||
10065=\u65B0\u589E\u6570\u636E\u5931\u8D25
|
||||
10066=\u4FEE\u6539\u6570\u636E\u5931\u8D25
|
||||
10067=\u56FE\u5F62\u9A8C\u8BC1\u7801\u9519\u8BEF
|
||||
10068=\u6CA1\u6709\u5F00\u542F\u624B\u673A\u6CE8\u518C\uFF0C\u6CA1\u6CD5\u4F7F\u7528\u77ED\u4FE1\u9A8C\u8BC1\u7801\u529F\u80FD
|
||||
10069=\u7528\u6237\u540D\u4E0D\u662F\u624B\u673A\u53F7\u7801\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165
|
||||
10070=\u6B64\u624B\u673A\u53F7\u7801\u5DF2\u7ECF\u6CE8\u518C\u8FC7
|
||||
10071=\u8F93\u5165\u7684\u624B\u673A\u53F7\u7801\u672A\u6CE8\u518C
|
||||
10072=\u5F53\u524D\u4E0D\u5141\u8BB8\u666E\u901A\u7528\u6237\u6CE8\u518C
|
||||
10073=\u6CA1\u6709\u5F00\u542F\u624B\u673A\u6CE8\u518C\uFF0C\u6CA1\u6CD5\u4F7F\u7528\u627E\u56DE\u5BC6\u7801\u529F\u80FD
|
||||
10074=\u8F93\u5165\u7684\u624B\u673A\u53F7\u7801\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10075=\u8F93\u5165\u7684\u624B\u673A\u9A8C\u8BC1\u7801\u9519\u8BEF
|
||||
10076=\u5B57\u5178\u7C7B\u578B\u4E0D\u5B58\u5728
|
||||
10077=\u5B57\u5178\u7C7B\u578B\u7F16\u7801\u91CD\u590D
|
||||
10078=\u8BFB\u53D6\u8D44\u6E90\u5931\u8D25
|
||||
10079=LLM\u5927\u6A21\u578B\u548CIntent\u610F\u56FE\u8BC6\u522B\uFF0C\u9009\u62E9\u53C2\u6570\u4E0D\u5339\u914D
|
||||
10080=\u6B64\u58F0\u97F3\u58F0\u7EB9\u5BF9\u5E94\u7684\u4EBA\uFF08{0}\uFF09\u5DF2\u7ECF\u6CE8\u518C\uFF0C\u8BF7\u9009\u62E9\u5176\u4ED6\u58F0\u97F3\u6CE8\u518C
|
||||
10081=\u5220\u9664\u58F0\u7EB9\u51FA\u73B0\u9519\u8BEF
|
||||
10082=\u6B64\u6B21\u4FEE\u6539\u4E0D\u5141\u8BB8\uFF0C\u6B64\u58F0\u97F3\u5DF2\u7ECF\u6CE8\u518C\u4E3A\u58F0\u7EB9\u4E86\uFF08{0}\uFF09
|
||||
10083=\u4FEE\u6539\u58F0\u7EB9\u9519\u8BEF\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
|
||||
10084=\u58F0\u7EB9\u63A5\u53E3\u5730\u5740\u5B58\u5728\u9519\u8BEF\uFF0C\u8BF7\u8FDB\u5165\u53C2\u6570\u7BA1\u7406\u4FEE\u6539\u58F0\u7EB9\u63A5\u53E3\u5730\u5740
|
||||
10085=\u97F3\u9891\u6570\u636E\u4E0D\u5C5E\u4E8E\u8FD9\u4E2A\u667A\u80FD\u4F53
|
||||
10086=\u97F3\u9891\u6570\u636E\u662F\u7A7A\u7684\u8BF7\u68C0\u67E5\u4E0A\u4F20\u6570\u636E
|
||||
10087=\u58F0\u7EB9\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u6C42\u4E0D\u6210\u529F
|
||||
10088=\u58F0\u7EB9\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u6C42\u5904\u7406\u5931\u8D25
|
||||
10089=\u58F0\u7EB9\u6CE8\u9500\u5931\u8D25\uFF0C\u8BF7\u6C42\u4E0D\u6210\u529F
|
||||
10090=\u58F0\u7EB9\u6CE8\u9500\u5931\u8D25\uFF0C\u8BF7\u6C42\u5904\u7406\u5931\u8D25
|
||||
10091=\u4F9B\u5E94\u5668\u4E0D\u5B58\u5728
|
||||
10092=\u8BBE\u7F6E\u7684LLM\u4E0D\u5B58\u5728
|
||||
10093=\u8BE5\u6A21\u578B\u914D\u7F6E\u5DF2\u88AB\u667A\u80FD\u4F53{0}\u5F15\u7528\uFF0C\u65E0\u6CD5\u5220\u9664
|
||||
10094=\u8BE5LLM\u6A21\u578B\u5DF2\u88AB\u610F\u56FE\u8BC6\u522B\u914D\u7F6E\u5F15\u7528\uFF0C\u65E0\u6CD5\u5220\u9664
|
||||
10095=\u65E0\u6548\u670D\u52A1\u7AEF\u64CD\u4F5C
|
||||
10096=\u672A\u914D\u7F6E\u670D\u52A1\u7AEFWebSocket\u5730\u5740
|
||||
10097=\u76EE\u6807WebSocket\u5730\u5740\u4E0D\u5B58\u5728
|
||||
10098=WebSocket\u5730\u5740\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10099=WebSocket\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10100=WebSocket\u5730\u5740\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10101=WebSocket\u8FDE\u63A5\u6D4B\u8BD5\u5931\u8D25
|
||||
10102=OTA\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10103=OTA\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10104=OTA\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934
|
||||
10105=OTA\u5730\u5740\u5FC5\u987B\u4EE5/ota/\u7ED3\u5C3E
|
||||
10106=OTA\u63A5\u53E3\u8BBF\u95EE\u5931\u8D25
|
||||
10107=OTA\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10108=OTA\u63A5\u53E3\u9A8C\u8BC1\u5931\u8D25
|
||||
10109=MCP\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10110=MCP\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10111=\u4E0D\u662F\u6B63\u786E\u7684MCP\u5730\u5740
|
||||
10112=MCP\u63A5\u53E3\u8BBF\u95EE\u5931\u8D25
|
||||
10113=MCP\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10114=MCP\u63A5\u53E3\u9A8C\u8BC1\u5931\u8D25
|
||||
10115=\u58F0\u7EB9\u63A5\u53E3\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10116=\u58F0\u7EB9\u63A5\u53E3\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10117=\u4E0D\u662F\u6B63\u786E\u7684\u58F0\u7EB9\u63A5\u53E3\u5730\u5740
|
||||
10118=\u58F0\u7EB9\u63A5\u53E3\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934
|
||||
10119=\u58F0\u7EB9\u63A5\u53E3\u8BBF\u95EE\u5931\u8D25
|
||||
10120=\u58F0\u7EB9\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u683C\u5F0F\u4E0D\u6B63\u786E
|
||||
10121=\u58F0\u7EB9\u63A5\u53E3\u9A8C\u8BC1\u5931\u8D25
|
||||
10122=mqtt\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10123=\u60A8\u7684mqtt\u5BC6\u94A5\u957F\u5EA6\u4E0D\u5B89\u5168\uFF0C\u5B57\u7B26\u6570\u9700\u8981\u81F3\u5C118\u4E2A\u5B57\u7B26\u4E14\u5FC5\u987B\u540C\u65F6\u5305\u542B\u5927\u5C0F\u5199\u5B57\u6BCD
|
||||
10124=\u60A8\u7684mqtt\u5BC6\u94A5\u957F\u5EA6\u4E0D\u5B89\u5168\uFF0Cmqtt\u5BC6\u94A5\u5FC5\u987B\u540C\u65F6\u5305\u542B\u5927\u5C0F\u5199\u5B57\u6BCD
|
||||
10125=\u60A8\u7684mqtt\u5BC6\u94A5\u5305\u542B\u5F31\u5BC6\u7801
|
||||
10128=\u5B57\u5178\u6807\u7B7E\u91CD\u590D
|
||||
10129=SM2\u5BC6\u94A5\u672A\u914D\u7F6E
|
||||
10130=SM2\u89E3\u5BC6\u5931\u8D25
|
||||
10131=modelType\u548CprovideCode\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10132=\u6CA1\u6709\u6743\u9650\u67E5\u770B\u8BE5\u667A\u80FD\u4F53\u7684\u804A\u5929\u8BB0\u5F55
|
||||
10133=\u4F1A\u8BDDID\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10134=\u667A\u80FD\u4F53ID\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10135=\u804A\u5929\u8BB0\u5F55\u4E0B\u8F7D\u5931\u8D25
|
||||
10136=\u4E0B\u8F7D\u94FE\u63A5\u5DF2\u8FC7\u671F\u6216\u65E0\u6548
|
||||
10137=\u4E0B\u8F7D\u94FE\u63A5\u65E0\u6548
|
||||
10138=\u7528\u6237
|
||||
10139=\u667A\u4F53
|
||||
10140=\u97F3\u9891\u6587\u4EF6\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10141=\u53EA\u652F\u6301\u97F3\u9891\u6587\u4EF6
|
||||
10142=\u97F3\u9891\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC710MB
|
||||
10143=\u4E0A\u4F20\u5931\u8D25
|
||||
10144=\u58F0\u97F3\u514B\u9686\u8BB0\u5F55\u4E0D\u5B58\u5728
|
||||
10145=\u97F3\u8272\u8D44\u6E90\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10146=\u5E73\u53F0\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10147=\u97F3\u8272ID\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10148=\u5F52\u5C5E\u8D26\u53F7\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10149=\u5220\u9664\u7684\u97F3\u8272\u8D44\u6E90ID\u4E0D\u80FD\u4E3A\u7A7A
|
||||
10150=\u60A8\u6CA1\u6709\u6743\u9650\u64CD\u4F5C\u8BE5\u8BB0\u5F55
|
||||
@@ -1,148 +1,159 @@
|
||||
#繁體中文
|
||||
500=服務器內部異常
|
||||
401=未授權
|
||||
403=拒絕訪問,沒有权限
|
||||
#\u7E41\u9AD4\u4E2D\u6587
|
||||
500=\u670D\u52D9\u5668\u5167\u90E8\u7570\u5E38
|
||||
401=\u672A\u6388\u6B0A
|
||||
403=\u62D2\u7D55\u8A2A\u554F\uFF0C\u6C92\u6709\u6743\u9650
|
||||
|
||||
10001={0}不能為空
|
||||
10002=數據庫中已存在該記錄
|
||||
10003=獲取參數失敗
|
||||
10004=賬號或密碼錯誤
|
||||
10005=賬號已被停用
|
||||
10006=唯一標識不能為空
|
||||
10007=驗證碼不正確
|
||||
10008=先刪除子菜單或按鈕
|
||||
10009=原密碼不正確
|
||||
10010=帳號或密碼不正確,您還有可以嘗試{0}次
|
||||
10001={0}\u4E0D\u80FD\u70BA\u7A7A
|
||||
10002=\u6578\u64DA\u5EAB\u4E2D\u5DF2\u5B58\u5728\u8A72\u8A18\u9304
|
||||
10003=\u7372\u53D6\u53C3\u6578\u5931\u6557
|
||||
10004=\u8CEC\u865F\u6216\u5BC6\u78BC\u932F\u8AA4
|
||||
10005=\u8CEC\u865F\u5DF2\u88AB\u505C\u7528
|
||||
10006=\u552F\u4E00\u6A19\u8B58\u4E0D\u80FD\u70BA\u7A7A
|
||||
10007=\u9A57\u8B49\u78BC\u4E0D\u6B63\u78BA
|
||||
10008=\u5148\u522A\u9664\u5B50\u83DC\u55AE\u6216\u6309\u9215
|
||||
10009=\u539F\u5BC6\u78BC\u4E0D\u6B63\u78BA
|
||||
10010=\u5E33\u865F\u6216\u5BC6\u78BC\u4E0D\u6B63\u78BA,\u60A8\u9084\u6709\u53EF\u4EE5\u5617\u8A66{0}\u6B21
|
||||
|
||||
10011=上級部門選擇錯誤
|
||||
10012=上級菜單不能為自身
|
||||
10013=數據權限接口,只能是Map類型參數
|
||||
10014=請先刪除下級部門
|
||||
10015=請先刪除部門下的用戶
|
||||
10016=部署失敗,沒有流程
|
||||
10017=模型圖不正確,請檢查
|
||||
10018=導出失敗,模型ID為{0}
|
||||
10011=\u4E0A\u7D1A\u90E8\u9580\u9078\u64C7\u932F\u8AA4
|
||||
10012=\u4E0A\u7D1A\u83DC\u55AE\u4E0D\u80FD\u70BA\u81EA\u8EAB
|
||||
10013=\u6578\u64DA\u6B0A\u9650\u63A5\u53E3\uFF0C\u53EA\u80FD\u662FMap\u985E\u578B\u53C3\u6578
|
||||
10014=\u8ACB\u5148\u522A\u9664\u4E0B\u7D1A\u90E8\u9580
|
||||
10015=\u8ACB\u5148\u522A\u9664\u90E8\u9580\u4E0B\u7684\u7528\u6236
|
||||
10016=\u90E8\u7F72\u5931\u6557\uFF0C\u6C92\u6709\u6D41\u7A0B
|
||||
10017=\u6A21\u578B\u5716\u4E0D\u6B63\u78BA\uFF0C\u8ACB\u6AA2\u67E5
|
||||
10018=\u5C0E\u51FA\u5931\u6557\uFF0C\u6A21\u578BID\u70BA{0}
|
||||
|
||||
10019=請上傳文件
|
||||
10020=token不能為空
|
||||
10021=token失效,請重新登錄
|
||||
10022=賬號已被鎖定
|
||||
10023=請上傳zip、bar、bpmn、bpmn20.xml格式文件
|
||||
10019=\u8ACB\u4E0A\u50B3\u6587\u4EF6
|
||||
10020=token\u4E0D\u80FD\u70BA\u7A7A
|
||||
10021=token\u5931\u6548\uFF0C\u8ACB\u91CD\u65B0\u767B\u9304
|
||||
10022=\u8CEC\u865F\u5DF2\u88AB\u9396\u5B9A
|
||||
10023=\u8ACB\u4E0A\u50B3zip\u3001bar\u3001bpmn\u3001bpmn20.xml\u683C\u5F0F\u6587\u4EF6
|
||||
|
||||
10024=上傳文件失敗{0}
|
||||
10025=發送短信失敗{0}
|
||||
10026=郵件模板不存在
|
||||
10024=\u4E0A\u50B3\u6587\u4EF6\u5931\u6557{0}
|
||||
10025=\u767C\u9001\u77ED\u4FE1\u5931\u6557{0}
|
||||
10026=\u90F5\u4EF6\u6A21\u677F\u4E0D\u5B58\u5728
|
||||
|
||||
10027=Redis服務異常
|
||||
10028=定時任務失敗
|
||||
10029=不能包含非法字符
|
||||
10030=密碼長度不足{0}位
|
||||
10031=密碼必須同時包含數字、大小寫字母和特殊字符組成
|
||||
10032=刪除本數據異常
|
||||
10033=設備驗證碼錯誤
|
||||
10027=Redis\u670D\u52D9\u7570\u5E38
|
||||
10028=\u5B9A\u6642\u4EFB\u52D9\u5931\u6557
|
||||
10029=\u4E0D\u80FD\u5305\u542B\u975E\u6CD5\u5B57\u7B26
|
||||
10030=\u5BC6\u78BC\u9577\u5EA6\u4E0D\u8DB3{0}\u4F4D
|
||||
10031=\u5BC6\u78BC\u5FC5\u9808\u540C\u6642\u5305\u542B\u6578\u5B57\u3001\u5927\u5C0F\u5BEB\u5B57\u6BCD\u548C\u7279\u6B8A\u5B57\u7B26\u7D44\u6210
|
||||
10032=\u522A\u9664\u672C\u6578\u64DA\u7570\u5E38
|
||||
10033=\u8A2D\u5099\u9A57\u8B49\u78BC\u932F\u8AA4
|
||||
|
||||
10034=參數值不能為空
|
||||
10035=參數類型不能為空
|
||||
10036=不支持的參數類型
|
||||
10037=參數值必須是有效的數字
|
||||
10038=參數值必須是true或false
|
||||
10039=參數值必須是有效的JSON數組格式
|
||||
10040=參數值必須是有效的JSON格式
|
||||
10034=\u53C3\u6578\u503C\u4E0D\u80FD\u70BA\u7A7A
|
||||
10035=\u53C3\u6578\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A
|
||||
10036=\u4E0D\u652F\u6301\u7684\u53C3\u6578\u985E\u578B
|
||||
10037=\u53C3\u6578\u503C\u5FC5\u9808\u662F\u6709\u6548\u7684\u6578\u5B57
|
||||
10038=\u53C3\u6578\u503C\u5FC5\u9808\u662Ftrue\u6216false
|
||||
10039=\u53C3\u6578\u503C\u5FC5\u9808\u662F\u6709\u6548\u7684JSON\u6578\u7D44\u683C\u5F0F
|
||||
10040=\u53C3\u6578\u503C\u5FC5\u9808\u662F\u6709\u6548\u7684JSON\u683C\u5F0F
|
||||
|
||||
10041=設備未找到
|
||||
10041=\u8A2D\u5099\u672A\u627E\u5230
|
||||
10042={0}
|
||||
10043=刪除數據失敗
|
||||
10044=用戶未登錄
|
||||
10045=WebSocket連接失敗或連接超時
|
||||
10046=保存聲紋錯誤,請聯繫管理員
|
||||
10047=每日發送次數已達上限
|
||||
10048=舊密碼輸入錯誤
|
||||
10049=設置的LLM不是openai和ollama
|
||||
10050=token生成失敗
|
||||
10051=資源不存在
|
||||
10052=默認智能體未找到
|
||||
10053=智能體未找到
|
||||
10054=聲紋接口未配置,請先在參數配置中配置聲紋接口地址(server.voice_print)
|
||||
10055=短信發送失敗
|
||||
10056=短信連接建立失敗
|
||||
10057=智能體的聲紋創建失敗
|
||||
10058=智能體的對應聲紋更新失敗
|
||||
10059=智能體的對應聲紋刪除失敗
|
||||
10060=發送太頻繁,請{0}秒後再試
|
||||
10061=激活碼不能為空
|
||||
10062=激活碼錯誤
|
||||
10063=設備已激活
|
||||
10064=該模型為預設模型,請先設置其他模型為預設模型
|
||||
10065=新增數據失敗
|
||||
10066=更新數據失敗
|
||||
10067=圖形驗證碼錯誤
|
||||
10068=未開啟手機註冊,無法使用短信驗證碼功能
|
||||
10069=用戶名不是手機號碼,請重新輸入
|
||||
10070=該手機號碼已註冊
|
||||
10071=輸入的手機號碼未註冊
|
||||
10072=目前不允許普通用戶註冊
|
||||
10073=未開啟手機註冊,無法使用密碼找回功能
|
||||
10074=輸入的手機號碼格式不正確
|
||||
10075=輸入的短信驗證碼不正確
|
||||
10076=字典類型不存在
|
||||
10077=字典類型編碼重複
|
||||
10078=讀取資源失敗
|
||||
10079=LLM模型與意圖識別、參數選擇不匹配
|
||||
10080=此聲紋屬於已註冊的{0},請選擇其他聲音
|
||||
10081=刪除聲紋時發生錯誤
|
||||
10082=不允許修改,此聲音已註冊為聲紋({0})
|
||||
10083=修改聲紋錯誤,請聯繫管理員
|
||||
10084=聲紋接口地址錯誤,請前往參數管理修改聲紋接口地址
|
||||
10085=音頻數據不屬於此智能體
|
||||
10086=音頻數據為空,請檢查上傳數據
|
||||
10087=聲紋註冊失敗,請求未成功
|
||||
10088=聲紋註冊失敗,請求處理失敗
|
||||
10089=聲紋註銷失敗,請求未成功
|
||||
10090=聲紋註銷失敗,請求處理失敗
|
||||
10091=模型提供商不存在
|
||||
10092=配置的LLM不存在
|
||||
10093=此模型配置被智能體{0}引用,無法刪除
|
||||
10094=此LLM模型被意圖識別配置引用,無法刪除
|
||||
10095=無效的服務器操作
|
||||
10096=未配置服務器WebSocket地址
|
||||
10097=目標WebSocket地址不存在
|
||||
10098=WebSocket地址列表不能為空
|
||||
10099=WebSocket地址不能使用localhost或127.0.0.1
|
||||
10100=WebSocket地址格式不正確
|
||||
10101=WebSocket連接測試失敗
|
||||
10102=OTA地址不能為空
|
||||
10103=OTA地址不能使用localhost或127.0.0.1
|
||||
10104=OTA地址必須以http或https開頭
|
||||
10105=OTA地址必須以/ota/結尾
|
||||
10106=OTA接口訪問失敗
|
||||
10107=OTA接口返回內容格式不正確
|
||||
10108=OTA接口驗證失敗
|
||||
10109=MCP地址不能為空
|
||||
10110=MCP地址不能使用localhost或127.0.0.1
|
||||
10111=不是有效的MCP地址
|
||||
10112=MCP接口訪問失敗
|
||||
10113=MCP接口返回內容格式不正確
|
||||
10114=MCP接口驗證失敗
|
||||
10115=聲紋接口地址不能為空
|
||||
10116=聲紋接口地址不能使用localhost或127.0.0.1
|
||||
10117=不是有效的聲紋接口地址
|
||||
10118=聲紋接口地址必須以http或https開頭
|
||||
10119=聲紋接口訪問失敗
|
||||
10120=聲紋接口返回內容格式不正確
|
||||
10121=聲紋接口驗證失敗
|
||||
10122=MQTT密鑰不能為空
|
||||
10123=您的MQTT密鑰不安全,需至少8個字符且必須同時包含大小寫字母
|
||||
10124=您的MQTT密鑰不安全,MQTT密鑰必須同時包含大小寫字母
|
||||
10125=您的MQTT密鑰包含弱密碼
|
||||
10128=字典標籤重複
|
||||
10129=SM2密鑰未配置
|
||||
10130=SM2解密失敗
|
||||
10131=modelType和provideCode不能為空
|
||||
10132=沒有權限查看該智能體的聊天記錄
|
||||
10133=會話ID不能為空
|
||||
10134=智能體ID不能為空
|
||||
10135=聊天記錄下載失敗
|
||||
10136=下載鏈接已過期或無效
|
||||
10137=下載鏈接無效
|
||||
10138=用戶
|
||||
10139=智體
|
||||
10043=\u522A\u9664\u6578\u64DA\u5931\u6557
|
||||
10044=\u7528\u6236\u672A\u767B\u9304
|
||||
10045=WebSocket\u9023\u63A5\u5931\u6557\u6216\u9023\u63A5\u8D85\u6642
|
||||
10046=\u4FDD\u5B58\u8072\u7D0B\u932F\u8AA4\uFF0C\u8ACB\u806F\u7E6B\u7BA1\u7406\u54E1
|
||||
10047=\u6BCF\u65E5\u767C\u9001\u6B21\u6578\u5DF2\u9054\u4E0A\u9650
|
||||
10048=\u820A\u5BC6\u78BC\u8F38\u5165\u932F\u8AA4
|
||||
10049=\u8A2D\u7F6E\u7684LLM\u4E0D\u662Fopenai\u548Collama
|
||||
10050=token\u751F\u6210\u5931\u6557
|
||||
10051=\u8CC7\u6E90\u4E0D\u5B58\u5728
|
||||
10052=\u9ED8\u8A8D\u667A\u80FD\u9AD4\u672A\u627E\u5230
|
||||
10053=\u667A\u80FD\u9AD4\u672A\u627E\u5230
|
||||
10054=\u8072\u7D0B\u63A5\u53E3\u672A\u914D\u7F6E\uFF0C\u8ACB\u5148\u5728\u53C3\u6578\u914D\u7F6E\u4E2D\u914D\u7F6E\u8072\u7D0B\u63A5\u53E3\u5730\u5740(server.voice_print)
|
||||
10055=\u77ED\u4FE1\u767C\u9001\u5931\u6557
|
||||
10056=\u77ED\u4FE1\u9023\u63A5\u5EFA\u7ACB\u5931\u6557
|
||||
10057=\u667A\u80FD\u9AD4\u7684\u8072\u7D0B\u5275\u5EFA\u5931\u6557
|
||||
10058=\u667A\u80FD\u9AD4\u7684\u5C0D\u61C9\u8072\u7D0B\u66F4\u65B0\u5931\u6557
|
||||
10059=\u667A\u80FD\u9AD4\u7684\u5C0D\u61C9\u8072\u7D0B\u522A\u9664\u5931\u6557
|
||||
10060=\u767C\u9001\u592A\u983B\u7E41\uFF0C\u8ACB{0}\u79D2\u5F8C\u518D\u8A66
|
||||
10061=\u6FC0\u6D3B\u78BC\u4E0D\u80FD\u70BA\u7A7A
|
||||
10062=\u6FC0\u6D3B\u78BC\u932F\u8AA4
|
||||
10063=\u8A2D\u5099\u5DF2\u6FC0\u6D3B
|
||||
10064=\u8A72\u6A21\u578B\u70BA\u9810\u8A2D\u6A21\u578B\uFF0C\u8ACB\u5148\u8A2D\u7F6E\u5176\u4ED6\u6A21\u578B\u70BA\u9810\u8A2D\u6A21\u578B
|
||||
10065=\u65B0\u589E\u6578\u64DA\u5931\u6557
|
||||
10066=\u66F4\u65B0\u6578\u64DA\u5931\u6557
|
||||
10067=\u5716\u5F62\u9A57\u8B49\u78BC\u932F\u8AA4
|
||||
10068=\u672A\u958B\u555F\u624B\u6A5F\u8A3B\u518A\uFF0C\u7121\u6CD5\u4F7F\u7528\u77ED\u4FE1\u9A57\u8B49\u78BC\u529F\u80FD
|
||||
10069=\u7528\u6236\u540D\u4E0D\u662F\u624B\u6A5F\u865F\u78BC\uFF0C\u8ACB\u91CD\u65B0\u8F38\u5165
|
||||
10070=\u8A72\u624B\u6A5F\u865F\u78BC\u5DF2\u8A3B\u518A
|
||||
10071=\u8F38\u5165\u7684\u624B\u6A5F\u865F\u78BC\u672A\u8A3B\u518A
|
||||
10072=\u76EE\u524D\u4E0D\u5141\u8A31\u666E\u901A\u7528\u6236\u8A3B\u518A
|
||||
10073=\u672A\u958B\u555F\u624B\u6A5F\u8A3B\u518A\uFF0C\u7121\u6CD5\u4F7F\u7528\u5BC6\u78BC\u627E\u56DE\u529F\u80FD
|
||||
10074=\u8F38\u5165\u7684\u624B\u6A5F\u865F\u78BC\u683C\u5F0F\u4E0D\u6B63\u78BA
|
||||
10075=\u8F38\u5165\u7684\u77ED\u4FE1\u9A57\u8B49\u78BC\u4E0D\u6B63\u78BA
|
||||
10076=\u5B57\u5178\u985E\u578B\u4E0D\u5B58\u5728
|
||||
10077=\u5B57\u5178\u985E\u578B\u7DE8\u78BC\u91CD\u8907
|
||||
10078=\u8B80\u53D6\u8CC7\u6E90\u5931\u6557
|
||||
10079=LLM\u6A21\u578B\u8207\u610F\u5716\u8B58\u5225\u3001\u53C3\u6578\u9078\u64C7\u4E0D\u5339\u914D
|
||||
10080=\u6B64\u8072\u7D0B\u5C6C\u65BC\u5DF2\u8A3B\u518A\u7684{0}\uFF0C\u8ACB\u9078\u64C7\u5176\u4ED6\u8072\u97F3
|
||||
10081=\u522A\u9664\u8072\u7D0B\u6642\u767C\u751F\u932F\u8AA4
|
||||
10082=\u4E0D\u5141\u8A31\u4FEE\u6539\uFF0C\u6B64\u8072\u97F3\u5DF2\u8A3B\u518A\u70BA\u8072\u7D0B({0})
|
||||
10083=\u4FEE\u6539\u8072\u7D0B\u932F\u8AA4\uFF0C\u8ACB\u806F\u7E6B\u7BA1\u7406\u54E1
|
||||
10084=\u8072\u7D0B\u63A5\u53E3\u5730\u5740\u932F\u8AA4\uFF0C\u8ACB\u524D\u5F80\u53C3\u6578\u7BA1\u7406\u4FEE\u6539\u8072\u7D0B\u63A5\u53E3\u5730\u5740
|
||||
10085=\u97F3\u983B\u6578\u64DA\u4E0D\u5C6C\u65BC\u6B64\u667A\u80FD\u9AD4
|
||||
10086=\u97F3\u983B\u6578\u64DA\u70BA\u7A7A\uFF0C\u8ACB\u6AA2\u67E5\u4E0A\u50B3\u6578\u64DA
|
||||
10087=\u8072\u7D0B\u8A3B\u518A\u5931\u6557\uFF0C\u8ACB\u6C42\u672A\u6210\u529F
|
||||
10088=\u8072\u7D0B\u8A3B\u518A\u5931\u6557\uFF0C\u8ACB\u6C42\u8655\u7406\u5931\u6557
|
||||
10089=\u8072\u7D0B\u8A3B\u92B7\u5931\u6557\uFF0C\u8ACB\u6C42\u672A\u6210\u529F
|
||||
10090=\u8072\u7D0B\u8A3B\u92B7\u5931\u6557\uFF0C\u8ACB\u6C42\u8655\u7406\u5931\u6557
|
||||
10091=\u6A21\u578B\u63D0\u4F9B\u5546\u4E0D\u5B58\u5728
|
||||
10092=\u914D\u7F6E\u7684LLM\u4E0D\u5B58\u5728
|
||||
10093=\u6B64\u6A21\u578B\u914D\u7F6E\u88AB\u667A\u80FD\u9AD4{0}\u5F15\u7528\uFF0C\u7121\u6CD5\u522A\u9664
|
||||
10094=\u6B64LLM\u6A21\u578B\u88AB\u610F\u5716\u8B58\u5225\u914D\u7F6E\u5F15\u7528\uFF0C\u7121\u6CD5\u522A\u9664
|
||||
10095=\u7121\u6548\u7684\u670D\u52D9\u5668\u64CD\u4F5C
|
||||
10096=\u672A\u914D\u7F6E\u670D\u52D9\u5668WebSocket\u5730\u5740
|
||||
10097=\u76EE\u6A19WebSocket\u5730\u5740\u4E0D\u5B58\u5728
|
||||
10098=WebSocket\u5730\u5740\u5217\u8868\u4E0D\u80FD\u70BA\u7A7A
|
||||
10099=WebSocket\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10100=WebSocket\u5730\u5740\u683C\u5F0F\u4E0D\u6B63\u78BA
|
||||
10101=WebSocket\u9023\u63A5\u6E2C\u8A66\u5931\u6557
|
||||
10102=OTA\u5730\u5740\u4E0D\u80FD\u70BA\u7A7A
|
||||
10103=OTA\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10104=OTA\u5730\u5740\u5FC5\u9808\u4EE5http\u6216https\u958B\u982D
|
||||
10105=OTA\u5730\u5740\u5FC5\u9808\u4EE5/ota/\u7D50\u5C3E
|
||||
10106=OTA\u63A5\u53E3\u8A2A\u554F\u5931\u6557
|
||||
10107=OTA\u63A5\u53E3\u8FD4\u56DE\u5167\u5BB9\u683C\u5F0F\u4E0D\u6B63\u78BA
|
||||
10108=OTA\u63A5\u53E3\u9A57\u8B49\u5931\u6557
|
||||
10109=MCP\u5730\u5740\u4E0D\u80FD\u70BA\u7A7A
|
||||
10110=MCP\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10111=\u4E0D\u662F\u6709\u6548\u7684MCP\u5730\u5740
|
||||
10112=MCP\u63A5\u53E3\u8A2A\u554F\u5931\u6557
|
||||
10113=MCP\u63A5\u53E3\u8FD4\u56DE\u5167\u5BB9\u683C\u5F0F\u4E0D\u6B63\u78BA
|
||||
10114=MCP\u63A5\u53E3\u9A57\u8B49\u5931\u6557
|
||||
10115=\u8072\u7D0B\u63A5\u53E3\u5730\u5740\u4E0D\u80FD\u70BA\u7A7A
|
||||
10116=\u8072\u7D0B\u63A5\u53E3\u5730\u5740\u4E0D\u80FD\u4F7F\u7528localhost\u6216127.0.0.1
|
||||
10117=\u4E0D\u662F\u6709\u6548\u7684\u8072\u7D0B\u63A5\u53E3\u5730\u5740
|
||||
10118=\u8072\u7D0B\u63A5\u53E3\u5730\u5740\u5FC5\u9808\u4EE5http\u6216https\u958B\u982D
|
||||
10119=\u8072\u7D0B\u63A5\u53E3\u8A2A\u554F\u5931\u6557
|
||||
10120=\u8072\u7D0B\u63A5\u53E3\u8FD4\u56DE\u5167\u5BB9\u683C\u5F0F\u4E0D\u6B63\u78BA
|
||||
10121=\u8072\u7D0B\u63A5\u53E3\u9A57\u8B49\u5931\u6557
|
||||
10122=MQTT\u5BC6\u9470\u4E0D\u80FD\u70BA\u7A7A
|
||||
10123=\u60A8\u7684MQTT\u5BC6\u9470\u4E0D\u5B89\u5168\uFF0C\u9700\u81F3\u5C118\u500B\u5B57\u7B26\u4E14\u5FC5\u9808\u540C\u6642\u5305\u542B\u5927\u5C0F\u5BEB\u5B57\u6BCD
|
||||
10124=\u60A8\u7684MQTT\u5BC6\u9470\u4E0D\u5B89\u5168\uFF0CMQTT\u5BC6\u9470\u5FC5\u9808\u540C\u6642\u5305\u542B\u5927\u5C0F\u5BEB\u5B57\u6BCD
|
||||
10125=\u60A8\u7684MQTT\u5BC6\u9470\u5305\u542B\u5F31\u5BC6\u78BC
|
||||
10128=\u5B57\u5178\u6A19\u7C64\u91CD\u8907
|
||||
10129=SM2\u5BC6\u9470\u672A\u914D\u7F6E
|
||||
10130=SM2\u89E3\u5BC6\u5931\u6557
|
||||
10131=modelType\u548CprovideCode\u4E0D\u80FD\u70BA\u7A7A
|
||||
10132=\u6C92\u6709\u6B0A\u9650\u67E5\u770B\u8A72\u667A\u80FD\u9AD4\u7684\u804A\u5929\u8A18\u9304
|
||||
10133=\u6703\u8A71ID\u4E0D\u80FD\u70BA\u7A7A
|
||||
10134=\u667A\u80FD\u9AD4ID\u4E0D\u80FD\u70BA\u7A7A
|
||||
10135=\u804A\u5929\u8A18\u9304\u4E0B\u8F09\u5931\u6557
|
||||
10136=\u4E0B\u8F09\u93C8\u63A5\u5DF2\u904E\u671F\u6216\u7121\u6548
|
||||
10137=\u4E0B\u8F09\u93C8\u63A5\u7121\u6548
|
||||
10138=\u7528\u6236
|
||||
10139=\u667A\u9AD4
|
||||
10140=\u97F3\u983B\u6587\u4EF6\u4E0D\u80FD\u70BA\u7A7A
|
||||
10141=\u53EA\u652F\u6301\u97F3\u983B\u6587\u4EF6
|
||||
10142=\u97F3\u983B\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u904E10MB
|
||||
10143=\u4E0A\u50B3\u5931\u6557
|
||||
10144=\u8072\u97F3\u514B\u9686\u8A18\u9304\u4E0D\u5B58\u5728
|
||||
10145=\u97F3\u8272\u8CC7\u6E90\u4FE1\u606F\u4E0D\u80FD\u70BA\u7A7A
|
||||
10146=\u5E73\u53F0\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A
|
||||
10147=\u97F3\u8272ID\u4E0D\u80FD\u70BA\u7A7A
|
||||
10148=\u6B78\u5C6C\u5E33\u865F\u4E0D\u80FD\u70BA\u7A7A
|
||||
10149=\u522A\u9664\u7684\u97F3\u8272\u8CC7\u6E90ID\u4E0D\u80FD\u70BA\u7A7A
|
||||
10150=\u60A8\u6C92\u6709\u6B0A\u9650\u64CD\u4F5C\u8A72\u8A18\u9304
|
||||
@@ -23,4 +23,11 @@
|
||||
select model_name from ai_model_config where model_type = #{modelType}
|
||||
<if test="modelName != null">and model_name = #{modelName}</if>
|
||||
</select>
|
||||
|
||||
<!-- 获取符合条件的TTS平台列表 -->
|
||||
<select id="getTtsPlatformList" resultType="map">
|
||||
select id, model_name as modelName from ai_model_config
|
||||
where model_type = 'TTS'
|
||||
and JSON_EXTRACT(config_json, '$.type') = 'huoshan_double_stream'
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user