mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-27 09:33:55 +08:00
feature:角色配置能力部分实现
This commit is contained in:
+11
@@ -95,6 +95,17 @@ public class UserAgentController extends BaseController {
|
|||||||
return new Result<Agent>().ok(null);
|
return new Result<Agent>().ok(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{agentId}")
|
||||||
|
@Operation(summary = "获取智能体信息")
|
||||||
|
@RequiresPermissions("sys:role:normal")
|
||||||
|
public Result<Agent> getAgent(@PathVariable String agentId) {
|
||||||
|
if (StringUtils.isBlank(agentId)) {
|
||||||
|
log.error("智能体ID不能为空");
|
||||||
|
}
|
||||||
|
Agent agent = agentService.getById(agentId);
|
||||||
|
return new Result<Agent>().ok(agent);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@Operation(summary = "智能体列表")
|
@Operation(summary = "智能体列表")
|
||||||
@RequiresPermissions("sys:role:normal")
|
@RequiresPermissions("sys:role:normal")
|
||||||
|
|||||||
+134
@@ -0,0 +1,134 @@
|
|||||||
|
package xiaozhi.modules.agentTemplate.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.beanutils.BeanUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import xiaozhi.common.controller.BaseController;
|
||||||
|
import xiaozhi.common.user.UserDetail;
|
||||||
|
import xiaozhi.common.utils.Result;
|
||||||
|
import xiaozhi.modules.agent.domain.AgentTemplate;
|
||||||
|
import xiaozhi.modules.agent.service.AgentTemplateService;
|
||||||
|
import xiaozhi.modules.agent.vo.AgentTemplateVO;
|
||||||
|
import xiaozhi.modules.device.domain.Device;
|
||||||
|
import xiaozhi.modules.device.service.DeviceService;
|
||||||
|
import xiaozhi.modules.model.domain.ModelConfig;
|
||||||
|
import xiaozhi.modules.model.domain.TtsVoice;
|
||||||
|
import xiaozhi.modules.model.service.ModelConfigService;
|
||||||
|
import xiaozhi.modules.model.service.TtsVoiceService;
|
||||||
|
import xiaozhi.modules.security.user.SecurityUser;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Tag(name = "智能体模板管理")
|
||||||
|
@AllArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/user/agent/template")
|
||||||
|
public class UserAgentTemplateController extends BaseController {
|
||||||
|
private final AgentTemplateService agentTemplateService;
|
||||||
|
private final ModelConfigService modelConfigService;
|
||||||
|
private final TtsVoiceService ttsVoiceService;
|
||||||
|
private final DeviceService deviceService;
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
@Operation(summary = "添加智能体模板")
|
||||||
|
@RequiresPermissions("sys:role:normal")
|
||||||
|
public Result<AgentTemplate> addTemplate(@RequestBody AgentTemplate agentTemplate) {
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
if (StringUtils.isBlank(agentTemplate.getAgentName())) {
|
||||||
|
log.error("智能体模板名称不能为空");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
agentTemplate = new AgentTemplate();
|
||||||
|
agentTemplate.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||||
|
agentTemplate.setAgentName(agentTemplate.getAgentName());
|
||||||
|
agentTemplate.setCreator(user.getId());
|
||||||
|
agentTemplate.setCreatedAt(new Date());
|
||||||
|
agentTemplateService.save(agentTemplate);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("对象赋值异常", e);
|
||||||
|
}
|
||||||
|
return new Result<AgentTemplate>().ok(agentTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{templateId}")
|
||||||
|
@Operation(summary = "删除智能体模板")
|
||||||
|
@RequiresPermissions("sys:role:normal")
|
||||||
|
public Result<AgentTemplate> delTemplate(@PathVariable String templateId) {
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
if (StringUtils.isBlank(templateId)) {
|
||||||
|
log.error("智能体模板ID不能为空");
|
||||||
|
}
|
||||||
|
boolean bool = agentTemplateService.removeById(templateId);
|
||||||
|
if (!bool) {
|
||||||
|
return new Result<AgentTemplate>().error("删除失败");
|
||||||
|
}
|
||||||
|
return new Result<AgentTemplate>().ok(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
@Operation(summary = "智能体模板模板列表")
|
||||||
|
@RequiresPermissions("sys:role:normal")
|
||||||
|
public Result<List<AgentTemplate>> templateList() {
|
||||||
|
List<AgentTemplate> list = agentTemplateService.list();
|
||||||
|
return new Result<List<AgentTemplate>>().ok(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/vo")
|
||||||
|
@Operation(summary = "智能体模板模板列表")
|
||||||
|
@RequiresPermissions("sys:role:normal")
|
||||||
|
public Result<List<AgentTemplateVO>> templateVOList() {
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
List<AgentTemplate> templates = agentTemplateService.list();
|
||||||
|
List<AgentTemplateVO> list = new ArrayList<>();
|
||||||
|
this.convertAgentTemplateVOList(list, templates);
|
||||||
|
return new Result<List<AgentTemplateVO>>().ok(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将Agent对象列表转换为AgentTemplateVO对象列表
|
||||||
|
* 此方法遍历Agent对象列表,将每个Agent对象转换为AgentTemplateVO对象,并添加到AgentTemplateVO列表中
|
||||||
|
*
|
||||||
|
* @param agentVOList 转换后的AgentTemplateVO对象列表
|
||||||
|
* @param agentList 原始的Agent对象列表
|
||||||
|
*/
|
||||||
|
private void convertAgentTemplateVOList(List<AgentTemplateVO> agentVOList, List<AgentTemplate> agentList) {
|
||||||
|
// 遍历Agent对象列表
|
||||||
|
for (AgentTemplate agentTemplate : agentList) {
|
||||||
|
// 创建一个新的AgentTemplateVO对象
|
||||||
|
AgentTemplateVO agentTemplateVO = new AgentTemplateVO();
|
||||||
|
// 将当前Agent对象的属性值转换并设置到AgentTemplateVO对象中
|
||||||
|
this.convertAgentTemplateVO(agentTemplateVO, agentTemplate);
|
||||||
|
// 将转换后的AgentTemplateVO对象添加到AgentTemplateVO列表中
|
||||||
|
agentVOList.add(agentTemplateVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void convertAgentTemplateVO(AgentTemplateVO agentTemplateVO, AgentTemplate agentTemplate) {
|
||||||
|
try {
|
||||||
|
BeanUtils.copyProperties(agentTemplateVO, agentTemplate);
|
||||||
|
agentTemplateVO.setTtsModelName("未知");
|
||||||
|
TtsVoice ttsVoice = ttsVoiceService.getOne(new QueryWrapper<TtsVoice>().eq("id", agentTemplate.getTtsVoiceId()));
|
||||||
|
if (ObjectUtils.isNotNull(ttsVoice)) {
|
||||||
|
agentTemplateVO.setTtsModelName(ttsVoice.getName());
|
||||||
|
}
|
||||||
|
agentTemplateVO.setLlmModelName("未知");
|
||||||
|
ModelConfig modelConfig = modelConfigService.getOne(new QueryWrapper<ModelConfig>().eq("id", agentTemplate.getLlmModelId()));
|
||||||
|
if (ObjectUtils.isNotNull(modelConfig)) {
|
||||||
|
agentTemplateVO.setLlmModelName(modelConfig.getModelName());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("[convertAgentTemplateVO]对象转换报错", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package xiaozhi.modules.agent.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import xiaozhi.modules.agent.domain.Agent;
|
||||||
|
import xiaozhi.modules.agent.domain.AgentTemplate;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AgentTemplateVO extends AgentTemplate {
|
||||||
|
//角色音色
|
||||||
|
private String ttsModelName;
|
||||||
|
|
||||||
|
//角色模型
|
||||||
|
private String llmModelName;
|
||||||
|
}
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
package xiaozhi.modules.model.controller;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import xiaozhi.common.controller.BaseController;
|
||||||
|
import xiaozhi.common.redis.RedisUtils;
|
||||||
|
import xiaozhi.common.user.UserDetail;
|
||||||
|
import xiaozhi.common.utils.Result;
|
||||||
|
import xiaozhi.modules.device.constant.DeviceConstant;
|
||||||
|
import xiaozhi.modules.device.domain.Device;
|
||||||
|
import xiaozhi.modules.device.service.DeviceService;
|
||||||
|
import xiaozhi.modules.device.utils.CodeGeneratorUtil;
|
||||||
|
import xiaozhi.modules.device.vo.DeviceOtaVO;
|
||||||
|
import xiaozhi.modules.ota.domain.Ota;
|
||||||
|
import xiaozhi.modules.ota.service.OtaService;
|
||||||
|
import xiaozhi.modules.security.user.SecurityUser;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Tag(name = "模型数据管理")
|
||||||
|
@AllArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/model/")
|
||||||
|
public class ModelController extends BaseController {
|
||||||
|
private final DeviceService deviceService;
|
||||||
|
private final OtaService otaService;
|
||||||
|
@Resource
|
||||||
|
private RedisUtils redisUtils;
|
||||||
|
|
||||||
|
@CrossOrigin(originPatterns = "*", methods = {RequestMethod.GET, RequestMethod.POST})
|
||||||
|
@RequestMapping(path = "/", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
|
||||||
|
@Operation(summary = "设备OTA升级")
|
||||||
|
public String ota(@RequestHeader(required = false) HttpHeaders headers, @RequestBody(required = false) JSONObject jsonObject) {
|
||||||
|
log.info("OTA升级请求:header:{},body:{}", headers, jsonObject);
|
||||||
|
if (ObjectUtils.isNull(headers) || StringUtils.isBlank(headers.getFirst("device-id"))) {
|
||||||
|
log.error("设备ID不能为空");
|
||||||
|
return "{\"error\": \"Device ID is required\"}";
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceOtaVO otaVO = new DeviceOtaVO();
|
||||||
|
Device device = deviceService.getOne(new UpdateWrapper<Device>().eq("mac_address", headers.getFirst("device-id").toUpperCase()).eq("id", headers.getFirst("client-Id").replace("-", "")));
|
||||||
|
if (ObjectUtils.isNull(device)) {
|
||||||
|
// 从 Redis 中获取设备信息
|
||||||
|
Object redisValue = redisUtils.hGet(DeviceConstant.REDIS_KEY_PREFIX_DEVICE_ACTIVATION_MAC, headers.getFirst("device-id").toUpperCase());
|
||||||
|
if (ObjectUtils.isNull(redisValue)) {
|
||||||
|
String code = CodeGeneratorUtil.generateCode(6);
|
||||||
|
log.info("[gen]授权码已广播:{}", code);
|
||||||
|
otaVO.setActivation(new DeviceOtaVO.Activation(code, "youxlife.com\n" + code));
|
||||||
|
redisUtils.hSet(DeviceConstant.REDIS_KEY_PREFIX_DEVICE_ACTIVATION_MAC, headers.getFirst("device-id").toUpperCase(), code, RedisUtils.HOUR_ONE_EXPIRE);
|
||||||
|
redisUtils.hSet(DeviceConstant.REDIS_KEY_PREFIX_DEVICE_ACTIVATION_CODE, code, jsonObject, RedisUtils.HOUR_ONE_EXPIRE);
|
||||||
|
} else {
|
||||||
|
log.warn("[get]授权码已广播:{}", redisValue);
|
||||||
|
otaVO.setActivation(new DeviceOtaVO.Activation(redisValue.toString(), "youxlife.com\n" + redisValue));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (ObjectUtils.isNull(device) || device.getAutoUpdate() == 1) {
|
||||||
|
//{"version":"1.0.0","url":"http://https://youxlife.oss-cn-zhangjiakou.aliyuncs.com/v1.4.5.bin"}
|
||||||
|
String board = ObjectUtils.isNull(device)?headers.getFirst("user-agent").split("/")[0]:device.getBoard();
|
||||||
|
Ota ota = otaService.getOne(new UpdateWrapper<Ota>().eq("board", board).eq("is_enabled", 1));
|
||||||
|
if (ObjectUtils.isNull(ota)) {
|
||||||
|
log.warn("OTA升级信息未配置");
|
||||||
|
} else {
|
||||||
|
otaVO.setFirmware(new DeviceOtaVO.Firmware(ota.getAppVersion(), ota.getUrl()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
otaVO.setServer_time(new DeviceOtaVO.ServerTime(new Date().getTime(), 8 * 60));
|
||||||
|
return JSONUtil.toJsonStr(otaVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/sys/getOtalist")
|
||||||
|
@Operation(summary = "设备OTA列表")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<Page<Ota>> getOtalist(@RequestParam Integer pageNo, @RequestParam Integer pageSize) {
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
Page page = new Page<Ota>(pageNo, pageSize);
|
||||||
|
page = otaService.page(page);
|
||||||
|
return new Result<Page<Ota>>().ok(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/sys/save")
|
||||||
|
@Operation(summary = "添加设备OTA")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<Ota> save(@RequestBody Ota ota) {
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
ota.setCreator(user.getId());
|
||||||
|
ota.setCreateDate(new Date());
|
||||||
|
boolean bool = otaService.save(ota);
|
||||||
|
if (!bool) {
|
||||||
|
return new Result().error("设备OTA添加失败");
|
||||||
|
}
|
||||||
|
return new Result<Ota>().ok(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/sys/update")
|
||||||
|
@Operation(summary = "更新设备OTA")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<Ota> update(@RequestBody Ota ota) {
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
boolean bool = otaService.update(
|
||||||
|
new UpdateWrapper<Ota>().eq("id", ota.getId())
|
||||||
|
.set("board", ota.getBoard().trim().toLowerCase())
|
||||||
|
.set("app_version", ota.getAppVersion())
|
||||||
|
.set("url", ota.getUrl())
|
||||||
|
.set("is_enabled", ota.getIsEnabled())
|
||||||
|
.set("updater", user.getId())
|
||||||
|
.set("update_date", new Date())
|
||||||
|
);
|
||||||
|
if (!bool) {
|
||||||
|
return new Result().error("设备OTA更新失败");
|
||||||
|
}
|
||||||
|
return new Result<Ota>().ok(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/sys/toggleEnabled")
|
||||||
|
@Operation(summary = "切换设备OTA可用状态")
|
||||||
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
|
public Result<Ota> toggleEnabled(@RequestBody Ota ota) {
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
boolean bool = otaService.update(
|
||||||
|
new UpdateWrapper<Ota>().eq("id", ota.getId())
|
||||||
|
.set("is_enabled", ota.getIsEnabled())
|
||||||
|
.set("updater", user.getId())
|
||||||
|
.set("update_date", new Date())
|
||||||
|
);
|
||||||
|
if (!bool) {
|
||||||
|
return new Result().error("切换设备OTA可用状态失败");
|
||||||
|
}
|
||||||
|
return new Result<Ota>().ok(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -78,4 +78,16 @@ export default {
|
|||||||
// });
|
// });
|
||||||
}).send();
|
}).send();
|
||||||
},
|
},
|
||||||
|
//智能体模板列表
|
||||||
|
getAgentTemplateList(callback) {
|
||||||
|
RequestService.sendRequest().url(`${getServiceUrl()}/user/agent/template`)
|
||||||
|
.method('GET')
|
||||||
|
.success((res) => {
|
||||||
|
RequestService.clearRequestTime()
|
||||||
|
callback(res)
|
||||||
|
})
|
||||||
|
.fail((err) => {
|
||||||
|
console.error('获取智能体模板列表失败:', err);
|
||||||
|
}).send()
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
最近对话:{{ agent.lastConnectedAt }}
|
最近对话:{{ agent.lastConnectedAt }}
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex;justify-content: space-between;align-items: center;gap: 10px;">
|
<div style="display: flex;justify-content: space-between;align-items: center;gap: 10px;">
|
||||||
<div class="settings-btn" @click="$emit('configure', agent.id, agent.agentName)">
|
<div class="settings-btn" @click="$emit('configure', agent.id)">
|
||||||
配置角色
|
配置角色
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-btn" @click="$emit('asr', agent.id)">
|
<div class="settings-btn" @click="$emit('asr', agent.id)">
|
||||||
|
|||||||
@@ -87,9 +87,9 @@ export default {
|
|||||||
showAddDialog() {
|
showAddDialog() {
|
||||||
this.addAgentDialogVisible = true
|
this.addAgentDialogVisible = true
|
||||||
},
|
},
|
||||||
goToRoleConfig(agentId, agentName) {
|
goToRoleConfig(agentId) {
|
||||||
// 点击配置角色后跳转到角色配置页
|
// 点击配置角色后跳转到角色配置页
|
||||||
this.$router.push({path:'/role-config', query: {agentId: agentId, agentName: agentName}})
|
this.$router.push({path:'/role-config', query: {agentId: agentId}})
|
||||||
},
|
},
|
||||||
|
|
||||||
goToDevice(agentId) {
|
goToDevice(agentId) {
|
||||||
|
|||||||
@@ -18,25 +18,25 @@
|
|||||||
style="width: 37px;height: 37px;background: #5778ff;border-radius: 50%;display: flex;align-items: center;justify-content: center;">
|
style="width: 37px;height: 37px;background: #5778ff;border-radius: 50%;display: flex;align-items: center;justify-content: center;">
|
||||||
<img src="@/assets/home/setting-user.png" alt="" style="width: 19px;height: 19px;"/>
|
<img src="@/assets/home/setting-user.png" alt="" style="width: 19px;height: 19px;"/>
|
||||||
</div>
|
</div>
|
||||||
{{ agentName }} ({{ agentId }})
|
{{ form.agentName }} ({{ agentId }})
|
||||||
</div>
|
</div>
|
||||||
<div style="height: 1px;background: #e8f0ff;"/>
|
<div style="height: 1px;background: #e8f0ff;"/>
|
||||||
<div style="padding: 16px 24px;max-width: 792px;">
|
<div style="padding: 16px 24px;max-width: 792px;">
|
||||||
<el-form ref="form" :model="form" label-width="100px">
|
<el-form ref="form" :model="form" label-width="100px">
|
||||||
<el-form-item label="角色模版:">
|
<el-form-item label="角色模版:">
|
||||||
<div style="display: flex;gap: 8px;flex-wrap: wrap;">
|
<div style="display: flex;gap: 8px;flex-wrap: wrap;">
|
||||||
<div v-for="template in templates" :key="template" class="template-item" @click="selectTemplate(template)">
|
<div v-for="template in templates" :key="template.id" class="template-item" @click="selectTemplate(template)">
|
||||||
{{ template }}
|
{{ template.agentName }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="助手昵称:">
|
<el-form-item label="助手昵称:">
|
||||||
<el-input v-model="form.name"/>
|
<el-input v-model="form.agentCode"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="角色音色:">
|
<el-form-item label="角色音色:">
|
||||||
<div style="display: flex;gap: 8px;align-items: center;">
|
<div style="display: flex;gap: 8px;align-items: center;">
|
||||||
<div style="flex:1;">
|
<div style="flex:1;">
|
||||||
<el-select v-model="form.timbre" placeholder="请选择" style="width: 100%;">
|
<el-select v-model="form.ttsVoiceId" placeholder="请选择" style="width: 100%;">
|
||||||
<el-option v-for="item in options" :key="item.value" :label="item.label"
|
<el-option v-for="item in options" :key="item.value" :label="item.label"
|
||||||
:value="item.value">
|
:value="item.value">
|
||||||
</el-option>
|
</el-option>
|
||||||
@@ -49,10 +49,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="角色介绍:">
|
<el-form-item label="角色介绍:">
|
||||||
<el-input type="textarea" rows="5" resize="none" placeholder="请输入内容" v-model="form.introduction" maxlength="2000" show-word-limit/>
|
<el-input type="textarea" rows="5" resize="none" placeholder="请输入内容" v-model="form.systemPrompt" maxlength="2000" show-word-limit/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="记忆体:">
|
<el-form-item label="记忆体:">
|
||||||
<el-input type="textarea" rows="5" resize="none" placeholder="请输入内容" v-model="form.prompt" maxlength="1000" show-word-limit/>
|
<el-input type="textarea" rows="5" resize="none" placeholder="请输入内容" v-model="form.systemPrompt" maxlength="1000" show-word-limit/>
|
||||||
<div style="display: flex;gap: 8px;align-items: center;">
|
<div style="display: flex;gap: 8px;align-items: center;">
|
||||||
<div style="color: #979db1;font-size: 11px;">当前记忆(每次对话后重新生成)</div>
|
<div style="color: #979db1;font-size: 11px;">当前记忆(每次对话后重新生成)</div>
|
||||||
<div class="clear-btn">
|
<div class="clear-btn">
|
||||||
@@ -95,6 +95,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Api from '@/apis/api';
|
||||||
import HeaderBar from "@/components/HeaderBar.vue";
|
import HeaderBar from "@/components/HeaderBar.vue";
|
||||||
import Footer from "@/components/Footer.vue";
|
import Footer from "@/components/Footer.vue";
|
||||||
|
|
||||||
@@ -106,39 +107,58 @@ export default {
|
|||||||
agentId: this.$route.query.agentId,
|
agentId: this.$route.query.agentId,
|
||||||
agentName: this.$route.query.agentName,
|
agentName: this.$route.query.agentName,
|
||||||
form: {
|
form: {
|
||||||
name: "",
|
agentCode:"",
|
||||||
timbre: "",
|
agentName:"",
|
||||||
introduction: "",
|
asrModelId:"",
|
||||||
prompt: "",
|
intentModelId:"",
|
||||||
model: {
|
llmModelId:"",
|
||||||
tts: "",
|
memModelId:"",
|
||||||
vad: "",
|
systemPrompt:"",
|
||||||
asr: "",
|
ttsModelId:"",
|
||||||
llm: "",
|
ttsVoiceId:"",
|
||||||
memory:"",
|
vadModelId:"",
|
||||||
intent:""
|
model:{}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
options: [
|
options: [
|
||||||
{ value: '选项1', label: '黄金糕' },
|
{ value: '选项1', label: '黄金糕' },
|
||||||
{ value: '选项2', label: '双皮奶' }
|
{ value: '选项2', label: '双皮奶' }
|
||||||
],
|
],
|
||||||
models: [
|
models: [],
|
||||||
{ label: '大语言模型(LLM)', key: 'llm' },
|
//[
|
||||||
{ label: '语音转文本模型(ASR)', key: 'asr' },
|
// { label: '大语言模型(LLM)', key: 'llm' },
|
||||||
{ label: '语音活动检测模型(VAD)', key: 'vad' },
|
// { label: '语音转文本模型(ASR)', key: 'asr' },
|
||||||
{ label: '语音生成模型(TTS)', key: 'tts' },
|
// { label: '语音活动检测模型(VAD)', key: 'vad' },
|
||||||
{ label: '意图分类模型(Intent)', key: 'intent' },
|
// { label: '语音生成模型(TTS)', key: 'tts' },
|
||||||
{ label: '记忆增强模型(Memory)', key: 'memory' }
|
// { label: '意图分类模型(Intent)', key: 'intent' },
|
||||||
],
|
// { label: '记忆增强模型(Memory)', key: 'memory' }
|
||||||
|
// ],
|
||||||
templates: ['通用男声','通用女声','阳光男生','奶气萌娃']
|
templates: ['通用男声','通用女声','阳光男生','奶气萌娃']
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
// 获取智能体列表
|
||||||
|
this.fetchAgentTemplateList();
|
||||||
|
this.handleGetConfig();
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
fetchAgentTemplateList() {
|
||||||
|
// 获取智能体列表
|
||||||
|
Api.agent.getAgentTemplateList(({data}) => {
|
||||||
|
if (data.code === 0) {
|
||||||
|
this.templates = data.data
|
||||||
|
} else {
|
||||||
|
showDanger(data.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
handleGetConfig(){
|
handleGetConfig(){
|
||||||
api.agent.getAgentConfig(this.agentId, ({data}) => {
|
Api.agent.getAgentConfig(this.agentId, ({data}) => {
|
||||||
this.form = data
|
if (data.code === 0) {
|
||||||
|
this.form = data.data
|
||||||
|
} else {
|
||||||
|
showDanger(data.msg)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
saveConfig() {
|
saveConfig() {
|
||||||
|
|||||||
Reference in New Issue
Block a user