| Autor | SHA1 | Zpráva | Datum |
|---|---|---|---|
|
|
7c85819923 |
修改
1、修改提示词框架 |
před 1 rokem |
|
|
865a2a6219 |
修改
1、修改提示词框架 |
před 1 rokem |
|
|
ffe1be639d |
yinruoxi
feature:
1.新增:提示词模版化功能。
|
před 1 rokem |
| @@ -31,9 +31,9 @@ public interface RemoteIntentService { | |||
| @PostMapping("/intent/inner/generateContextTask") | |||
| public AjaxResult generateContextTask(); | |||
| @PostMapping("/intent/inner/syncHotspot") | |||
| @PostMapping("/intent/syncHotspot") | |||
| public AjaxResult syncHotspot(); | |||
| @PostMapping("/intent/inner/collectHotspot") | |||
| @PostMapping("/intent/collectHotspot") | |||
| public AjaxResult collectHotspot(@RequestBody List<HotspotVo> hotspotVo); | |||
| } | |||
| @@ -38,15 +38,13 @@ import com.xueyi.nlt.nlt.domain.LlmContext; | |||
| import com.xueyi.nlt.nlt.domain.LlmParam; | |||
| import com.xueyi.nlt.nlt.domain.LlmResponse; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmIntentDto; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmSensitiveWordDto; | |||
| import com.xueyi.nlt.nlt.domain.po.DmRegularPo; | |||
| import com.xueyi.nlt.nlt.domain.query.DmIntentQuery; | |||
| import com.xueyi.nlt.nlt.domain.vo.*; | |||
| import com.xueyi.nlt.nlt.mapper.DmRegularMapper; | |||
| import com.xueyi.nlt.nlt.service.IDmHotspotService; | |||
| import com.xueyi.nlt.nlt.service.IDmIntentService; | |||
| import com.xueyi.nlt.nlt.service.ISensitiveService; | |||
| import com.xueyi.nlt.nlt.service.ISysLlmService; | |||
| import com.xueyi.nlt.nlt.service.*; | |||
| import com.xueyi.nlt.nlt.service.impl.DmSensitiveWordServiceImpl; | |||
| import com.xueyi.nlt.nlt.template.*; | |||
| import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto; | |||
| @@ -1122,25 +1120,6 @@ public class DmIntentController extends BaseController<DmIntentQuery, DmIntentDt | |||
| return AjaxResult.error(res); | |||
| } | |||
| @PostMapping("/api/testforwelcome") | |||
| public AjaxResult test(){ | |||
| LocalDateTime dateTime = LocalDateTime.now(); | |||
| String date = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); | |||
| JSONObject jo = generativeWelcomeTemplate.handle("1", ""); | |||
| JSONArray ja = jo.getJSONArray("data"); | |||
| Long timeStamp = System.currentTimeMillis(); | |||
| JSONObject timeJson = new JSONObject(); | |||
| timeJson.put("timestamp", timeStamp); | |||
| ja.add(timeJson); | |||
| log.info(ja.toJSONString()); | |||
| redisTemplate2.opsForHash().put("group:task" + ":generate", date, AjaxResult.success(ja).toJson().toJSONString()); | |||
| Map<Object, Object> devices = redisTemplate2.opsForHash().entries("group:dgman:device:"); | |||
| for(Object devId:devices.keySet()){ | |||
| mqttTemplate.sendToMqtt("/" + activeProfile + "/" + "digital_man" + "/" + devId.toString() + "/" + "notify" + "/" + "generate-welcome", true, AjaxResult.success(ja).toJson().toJSONString()); | |||
| } | |||
| return AjaxResult.success(); | |||
| } | |||
| @PostMapping("/inner/generateContextTask") | |||
| @ResponseBody | |||
| public AjaxResult generateContextTask() { | |||
| @@ -1166,38 +1145,43 @@ public class DmIntentController extends BaseController<DmIntentQuery, DmIntentDt | |||
| log.error("生成任务失败:{}",e.getMessage()); | |||
| return AjaxResult.error("生成任务失败"); | |||
| } | |||
| return success(); | |||
| return AjaxResult.success(); | |||
| } | |||
| @PostMapping("/inner/syncHotspot") | |||
| @PostMapping("/syncHotspot") | |||
| @ResponseBody | |||
| public AjaxResult syncHotspot(){ | |||
| return dmHotspotService.syncHotspot(); | |||
| } | |||
| @PostMapping("/inner/collectHotspot") | |||
| @ResponseBody | |||
| public AjaxResult collectHotspot(@RequestBody List<HotspotVo> hotspotVo){ | |||
| return dmHotspotService.collectHotspot(hotspotVo); | |||
| Integer result = dmHotspotService.syncHotspot(); | |||
| if(result.equals(0)){ | |||
| return AjaxResult.success("同步成功"); | |||
| }else { | |||
| return AjaxResult.error("同步失败"); | |||
| } | |||
| } | |||
| @PostMapping("/api/updateHotspot") | |||
| @PostMapping("/collectHotspot") | |||
| @ResponseBody | |||
| public AjaxResult updateHotspot(@RequestBody JSONObject hotspotData){ | |||
| if(hotspotData == null||hotspotData.isEmpty()||!hotspotData.containsKey("data")){ | |||
| return AjaxResult.error("上传热点新闻失败"); | |||
| public AjaxResult collectHotspot(){ | |||
| Integer result = dmHotspotService.collectHotspot(); | |||
| if(result.equals(0)){ | |||
| return AjaxResult.success("热点收集成功"); | |||
| }else { | |||
| return AjaxResult.error("热点收集失败"); | |||
| } | |||
| log.info(hotspotData.getString("data")); | |||
| List<HotspotVo> hotspotVoList = hotspotData.getList("data",HotspotVo.class); | |||
| return dmHotspotService.collectHotspot(hotspotVoList); | |||
| } | |||
| @PostMapping("/api/testForHotspot") | |||
| public AjaxResult testForHotspot(){ | |||
| return dmHotspotService.syncHotspot(); | |||
| @PostMapping("/api/test") | |||
| @ResponseBody | |||
| public String collectHotspotApi(@RequestBody String query){ | |||
| String result = dmHotspotService.generateHotspotPrompt(query); | |||
| JSONObject a = freeChatTemplate.handle("-1", query); | |||
| JSONObject b = freeChatTemplate.handle("-1", query, true); | |||
| JSONArray c = new JSONArray(); | |||
| c.add(a); | |||
| c.add(b); | |||
| return c.toJSONString(); | |||
| } | |||
| interface Auth { | |||
| /** 系统 - 意图管理 | |||
| 管理 - 列表 */ | |||
| @@ -0,0 +1,144 @@ | |||
| package com.xueyi.nlt.nlt.controller; | |||
| import cn.hutool.core.util.IdUtil; | |||
| import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.validate.V_A; | |||
| import com.xueyi.common.core.web.validate.V_E; | |||
| import com.xueyi.common.log.annotation.Log; | |||
| import com.xueyi.common.log.enums.BusinessType; | |||
| import com.xueyi.common.security.annotation.Logical; | |||
| import com.xueyi.common.security.annotation.RequiresPermissions; | |||
| import com.xueyi.common.web.entity.controller.BaseController; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.domain.query.DmPromptQuery; | |||
| import com.xueyi.nlt.nlt.service.IDmPromptService; | |||
| import org.springframework.cloud.commons.util.IdUtils; | |||
| import org.springframework.validation.annotation.Validated; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| /** | |||
| * 提示词管理管理 业务处理 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @RestController | |||
| @RequestMapping("/prompt") | |||
| public class DmPromptController extends BaseController<DmPromptQuery, DmPromptDto, IDmPromptService> { | |||
| /** 定义节点名称 */ | |||
| @Override | |||
| protected String getNodeName() { | |||
| return "提示词管理" ; | |||
| } | |||
| /** | |||
| * 查询提示词管理列表 | |||
| */ | |||
| @Override | |||
| @GetMapping("/list") | |||
| @RequiresPermissions(Auth.DM_PROMPT_LIST) | |||
| public AjaxResult list(DmPromptQuery prompt) { | |||
| return super.list(prompt); | |||
| } | |||
| /** | |||
| * 查询提示词管理详细 | |||
| */ | |||
| @Override | |||
| @GetMapping(value = "/{id}") | |||
| @RequiresPermissions(Auth.DM_PROMPT_SINGLE) | |||
| public AjaxResult getInfo(@PathVariable Serializable id) { | |||
| return super.getInfo(id); | |||
| } | |||
| /** | |||
| * 提示词管理导出 | |||
| */ | |||
| @Override | |||
| @PostMapping("/export") | |||
| @RequiresPermissions(Auth.DM_PROMPT_EXPORT) | |||
| @Log(title = "提示词管理管理", businessType = BusinessType.EXPORT) | |||
| public void export(HttpServletResponse response, DmPromptQuery prompt) { | |||
| super.export(response, prompt); | |||
| } | |||
| /** | |||
| * 提示词管理新增 | |||
| */ | |||
| @Override | |||
| @PostMapping | |||
| @RequiresPermissions(Auth.DM_PROMPT_ADD) | |||
| @Log(title = "提示词管理管理", businessType = BusinessType.INSERT) | |||
| public AjaxResult add(@Validated({V_A.class}) @RequestBody DmPromptDto prompt) { | |||
| return super.add(prompt); | |||
| } | |||
| /** | |||
| * 提示词管理修改 | |||
| */ | |||
| @Override | |||
| @PutMapping | |||
| @RequiresPermissions(Auth.DM_PROMPT_EDIT) | |||
| @Log(title = "提示词管理管理", businessType = BusinessType.UPDATE) | |||
| public AjaxResult edit(@Validated({V_E.class}) @RequestBody DmPromptDto prompt) { | |||
| return super.edit(prompt); | |||
| } | |||
| /** | |||
| * 提示词管理修改状态 | |||
| */ | |||
| @Override | |||
| @PutMapping("/status") | |||
| @RequiresPermissions(value = {Auth.DM_PROMPT_EDIT, Auth.DM_PROMPT_ES}, logical = Logical.OR) | |||
| @Log(title = "提示词管理管理", businessType = BusinessType.UPDATE_STATUS) | |||
| public AjaxResult editStatus(@RequestBody DmPromptDto prompt) { | |||
| return super.editStatus(prompt); | |||
| } | |||
| /** | |||
| * 提示词管理批量删除 | |||
| */ | |||
| @Override | |||
| @DeleteMapping("/batch/{idList}") | |||
| @RequiresPermissions(Auth.DM_PROMPT_DEL) | |||
| @Log(title = "提示词管理管理", businessType = BusinessType.DELETE) | |||
| public AjaxResult batchRemove(@PathVariable List<Long> idList) { | |||
| return super.batchRemove(idList); | |||
| } | |||
| /** | |||
| * 获取提示词管理选择框列表 | |||
| */ | |||
| @Override | |||
| @GetMapping("/option") | |||
| public AjaxResult option() { | |||
| return super.option(); | |||
| } | |||
| interface Auth { | |||
| /** 系统 - 提示词管理管理 - 列表 */ | |||
| String DM_PROMPT_LIST = "nlt:prompt:list"; | |||
| /** 系统 - 提示词管理管理 - 详情 */ | |||
| String DM_PROMPT_SINGLE = "nlt:prompt:single"; | |||
| /** 系统 - 提示词管理管理 - 新增 */ | |||
| String DM_PROMPT_ADD = "nlt:prompt:add"; | |||
| /** 系统 - 提示词管理管理 - 修改 */ | |||
| String DM_PROMPT_EDIT = "nlt:prompt:edit"; | |||
| /** 系统 - 提示词管理管理 - 修改状态 */ | |||
| String DM_PROMPT_ES = "nlt:prompt:es"; | |||
| /** 系统 - 提示词管理管理 - 删除 */ | |||
| String DM_PROMPT_DEL = "nlt:prompt:delete"; | |||
| /** 系统 - 提示词管理管理 - 导出 */ | |||
| String DM_PROMPT_EXPORT = "nlt:prompt:export"; | |||
| /** 系统 - 提示词管理管理 - 缓存 */ | |||
| String DM_PROMPT_CACHE = "nlt:prompt:cache"; | |||
| } | |||
| public static void main(String[] args) { | |||
| System.out.println(IdUtil.getSnowflakeNextId()); | |||
| } | |||
| } | |||
| @@ -0,0 +1,54 @@ | |||
| package com.xueyi.nlt.nlt.domain.dto; | |||
| import com.alibaba.fastjson2.JSONArray; | |||
| import com.xueyi.nlt.nlt.domain.merge.DmPromptParamMerge; | |||
| import com.xueyi.nlt.nlt.domain.po.DmPromptPo; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import java.io.Serial; | |||
| import java.util.List; | |||
| /** | |||
| * 提示词管理 数据传输对象 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class DmPromptDto extends DmPromptPo { | |||
| @Serial | |||
| private static final long serialVersionUID = 1L; | |||
| protected List<DmPromptParamMerge> paramList; | |||
| /** | |||
| * 拼接获取好的提示词 | |||
| */ | |||
| public String getPrompt(List<String> params) { | |||
| StringBuilder prompt = new StringBuilder(); | |||
| prompt.append(this.getPrefix()); | |||
| if (params != null && paramList != null && paramList.size() == params.size()) { | |||
| for (int i = 0; i < paramList.size(); i++) { | |||
| if(params.get(i) != null && !"".equals(params.get(i))){ | |||
| prompt.append(formatStr(paramList.get(i).getPrefix()) + formatStr(params.get(i)) + formatStr(paramList.get(i).getSuffix())); | |||
| } | |||
| } | |||
| } | |||
| prompt.append(this.getSuffix()); | |||
| return prompt.toString(); | |||
| } | |||
| /** | |||
| * 格式化字符串 | |||
| * @param str | |||
| * @return | |||
| */ | |||
| private String formatStr(String str) { | |||
| if (str == null) { | |||
| return ""; | |||
| } | |||
| return str; | |||
| } | |||
| } | |||
| @@ -0,0 +1,41 @@ | |||
| package com.xueyi.nlt.nlt.domain.merge; | |||
| import com.baomidou.mybatisplus.annotation.*; | |||
| import com.xueyi.common.core.web.entity.base.BasisEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serial; | |||
| /** | |||
| * 提示词-参数关系 持久化对象 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Data | |||
| @NoArgsConstructor | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @TableName("dm_prompt_param_merge") | |||
| public class DmPromptParamMerge extends BasisEntity { | |||
| @Serial | |||
| private static final long serialVersionUID = 1L; | |||
| /** id */ | |||
| @TableId | |||
| protected Long id; | |||
| /** 提示词id */ | |||
| protected Long promptId; | |||
| /** 前置词 */ | |||
| protected String prefix; | |||
| /** 后置词 */ | |||
| protected String suffix; | |||
| /** 排序顺序 */ | |||
| protected Integer orders; | |||
| } | |||
| @@ -0,0 +1,17 @@ | |||
| package com.xueyi.nlt.nlt.domain.model; | |||
| import com.xueyi.common.core.web.entity.model.BaseConverter; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.domain.po.DmPromptPo; | |||
| import com.xueyi.nlt.nlt.domain.query.DmPromptQuery; | |||
| import org.mapstruct.Mapper; | |||
| import org.mapstruct.MappingConstants; | |||
| /** | |||
| * 提示词管理 对象映射器 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Mapper(componentModel = MappingConstants.ComponentModel.SPRING) | |||
| public interface DmPromptConverter extends BaseConverter<DmPromptQuery, DmPromptDto, DmPromptPo> { | |||
| } | |||
| @@ -0,0 +1,51 @@ | |||
| package com.xueyi.nlt.nlt.domain.po; | |||
| import com.xueyi.common.core.web.entity.base.BaseEntity; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.common.core.annotation.Excel; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import java.io.Serial; | |||
| import java.io.StringReader; | |||
| /** | |||
| * 提示词管理 持久化对象 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @TableName("dm_prompt") | |||
| public class DmPromptPo extends BaseEntity { | |||
| @Serial | |||
| private static final long serialVersionUID = 1L; | |||
| /** 前置词 */ | |||
| @Excel(name = "前置词") | |||
| protected String prefix; | |||
| /** 后置词 */ | |||
| @Excel(name = "后置词") | |||
| protected String suffix; | |||
| /** 状态(0:使用;1:停用) */ | |||
| @Excel(name = "状态", readConverterExp = "0=:使用;1:停用") | |||
| protected String status; | |||
| /** 备注 */ | |||
| @Excel(name = "备注") | |||
| protected String remark; | |||
| /** 角色 */ | |||
| @Excel(name = "角色") | |||
| protected String role; | |||
| /** 错误消息 */ | |||
| @Excel(name = "错误消息") | |||
| protected String errMsg; | |||
| } | |||
| @@ -0,0 +1,20 @@ | |||
| package com.xueyi.nlt.nlt.domain.query; | |||
| import com.xueyi.nlt.nlt.domain.po.DmPromptPo; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import java.io.Serial; | |||
| /** | |||
| * 提示词管理 数据查询对象 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper = true) | |||
| public class DmPromptQuery extends DmPromptPo { | |||
| @Serial | |||
| private static final long serialVersionUID = 1L; | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| package com.xueyi.nlt.nlt.manager; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.domain.query.DmPromptQuery; | |||
| import com.xueyi.common.web.entity.manager.IBaseManager; | |||
| /** | |||
| * 提示词管理管理 数据封装层 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| public interface IDmPromptManager extends IBaseManager<DmPromptQuery, DmPromptDto> { | |||
| /** | |||
| * 根据提示词模板名称查询提示词管理对象 | 数据权限 | |||
| * | |||
| * @param name 提示词模板名称 | |||
| * @return 提示词对象 | |||
| */ | |||
| DmPromptDto selectByName(String name); | |||
| } | |||
| @@ -0,0 +1,58 @@ | |||
| package com.xueyi.nlt.nlt.manager.impl; | |||
| import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
| import com.xueyi.nlt.nlt.domain.merge.DmPromptParamMerge; | |||
| import com.xueyi.nlt.nlt.domain.po.DmIntentPo; | |||
| import com.xueyi.nlt.nlt.domain.po.DmPromptPo; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.domain.query.DmPromptQuery; | |||
| import com.xueyi.nlt.nlt.domain.model.DmPromptConverter; | |||
| import com.xueyi.nlt.nlt.mapper.DmIntentMapper; | |||
| import com.xueyi.nlt.nlt.mapper.DmPromptMapper; | |||
| import com.xueyi.common.web.entity.manager.impl.BaseManagerImpl; | |||
| import com.xueyi.nlt.nlt.manager.IDmPromptManager; | |||
| import com.xueyi.nlt.nlt.mapper.merge.DmPromptParamMergeMapper; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Component; | |||
| import java.sql.Wrapper; | |||
| /** | |||
| * 提示词管理管理 数据封装层处理 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Component | |||
| public class DmPromptManager extends BaseManagerImpl<DmPromptQuery, DmPromptDto, DmPromptPo, DmPromptMapper, DmPromptConverter> implements IDmPromptManager { | |||
| @Autowired | |||
| DmPromptParamMergeMapper dmPromptParamMergeMapper; | |||
| @Autowired | |||
| DmIntentMapper dmIntentMapper; | |||
| /** | |||
| * 根据提示词模板名称查询提示词管理对象 | 数据权限 | |||
| * | |||
| * @param name 提示词模板名称 | |||
| * @return 提示词对象 | |||
| */ | |||
| @Override | |||
| public DmPromptDto selectByName(String name) { | |||
| DmPromptQuery prompt = new DmPromptQuery(); | |||
| prompt.setName(name); | |||
| // 根据name字段查询dto | |||
| DmPromptPo po = baseMapper.selectOne(Wrappers.<DmPromptPo>query().lambda().eq(DmPromptPo::getName, name)); | |||
| if (po != null) { | |||
| // 转化成dto对象 | |||
| DmPromptDto dto = baseConverter.mapperDto(po); | |||
| // 根据order顺序获取DmPromptParamMerge对象列表 | |||
| dto.setParamList(dmPromptParamMergeMapper.selectList(Wrappers.<DmPromptParamMerge>query().lambda().eq(DmPromptParamMerge::getPromptId, dto.getId()).orderByAsc(DmPromptParamMerge::getOrders))); | |||
| return dto; | |||
| } else { | |||
| return null; | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package com.xueyi.nlt.nlt.mapper; | |||
| import com.xueyi.nlt.nlt.domain.query.DmPromptQuery; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.domain.po.DmPromptPo; | |||
| import com.xueyi.common.web.entity.mapper.BaseMapper; | |||
| import com.xueyi.common.datasource.annotation.Master; | |||
| /** | |||
| * 提示词管理管理 数据层 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Master | |||
| public interface DmPromptMapper extends BaseMapper<DmPromptQuery, DmPromptDto, DmPromptPo> { | |||
| } | |||
| @@ -0,0 +1,14 @@ | |||
| package com.xueyi.nlt.nlt.mapper.merge; | |||
| import com.xueyi.common.datasource.annotation.Master; | |||
| import com.xueyi.common.web.entity.mapper.BasicMapper; | |||
| import com.xueyi.nlt.nlt.domain.merge.DmPromptParamMerge; | |||
| /** | |||
| * 提示词-参数关系 数据层 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Master | |||
| public interface DmPromptParamMergeMapper extends BasicMapper<DmPromptParamMerge> { | |||
| } | |||
| @@ -7,7 +7,15 @@ import java.util.List; | |||
| public interface IDmHotspotService { | |||
| public AjaxResult syncHotspot(); | |||
| //向数字人下发热点 | |||
| public Integer syncHotspot(); | |||
| public AjaxResult collectHotspot(List<HotspotVo> hotspotVo); | |||
| //生成热点 | |||
| public Integer collectHotspot(); | |||
| //查询热点 | |||
| public String retrievalHotspot(String content); | |||
| //生成相应的提示词 | |||
| public String generateHotspotPrompt(String content); | |||
| } | |||
| @@ -0,0 +1,14 @@ | |||
| package com.xueyi.nlt.nlt.service; | |||
| import com.xueyi.nlt.nlt.domain.query.DmPromptQuery; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.common.web.entity.service.IBaseService; | |||
| /** | |||
| * 提示词管理管理 服务层 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| public interface IDmPromptService extends IBaseService<DmPromptQuery, DmPromptDto> { | |||
| DmPromptDto selectByName(String name); | |||
| } | |||
| @@ -5,7 +5,11 @@ import com.alibaba.fastjson2.JSONObject; | |||
| import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.mqtt.connection.MqttTemplate; | |||
| import com.xueyi.nlt.api.nlt.domain.vo.HotspotVo; | |||
| import com.xueyi.nlt.api.nlt.domain.vo.KnowledgeVo; | |||
| import com.xueyi.nlt.api.nlt.feign.RemoteQAService; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.service.IDmHotspotService; | |||
| import com.xueyi.nlt.nlt.service.IDmPromptService; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| @@ -16,6 +20,7 @@ import org.springframework.stereotype.Service; | |||
| import java.time.LocalDateTime; | |||
| import java.time.format.DateTimeFormatter; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| @@ -31,11 +36,17 @@ public class DmHotspotServiceImpl implements IDmHotspotService { | |||
| @Autowired | |||
| MqttTemplate mqttTemplate; | |||
| @Autowired | |||
| private RemoteQAService remoteQAService; | |||
| @Autowired | |||
| private IDmPromptService dmPromptService; | |||
| @Value("${spring.profiles.active}") | |||
| private String activeProfile; | |||
| @Override | |||
| public AjaxResult syncHotspot() { | |||
| public Integer syncHotspot() { | |||
| LocalDateTime dateTime = LocalDateTime.now(); | |||
| String date = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); | |||
| String result = (String) redisTemplate.opsForHash().get("group:task:hotspot", date); | |||
| @@ -46,16 +57,48 @@ public class DmHotspotServiceImpl implements IDmHotspotService { | |||
| for(Object devId:devices.keySet()){ | |||
| mqttTemplate.sendToMqtt("/" + activeProfile + "/" + "digital_man" + "/" + devId.toString() + "/" + "notify" + "/" + "generate-hotspot", true, AjaxResult.success(resultArray).toJson().toJSONString()); | |||
| } | |||
| return AjaxResult.success(); | |||
| return 0; | |||
| } | |||
| @Override | |||
| public AjaxResult collectHotspot(List<HotspotVo> hotspotVoList) { | |||
| LocalDateTime dateTime = LocalDateTime.now(); | |||
| String date = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); | |||
| Long timestamp = System.currentTimeMillis(); | |||
| hotspotVoList.stream().forEach(hotspotVo -> hotspotVo.setTimestamp(timestamp)); | |||
| redisTemplate.opsForHash().put("group:task:hotspot", date, JSONArray.from(hotspotVoList).toJSONString()); | |||
| return AjaxResult.success(); | |||
| public Integer collectHotspot() { | |||
| //Todo 通过智谱大模型收集热点,并保存到redis中。 | |||
| return 0; | |||
| } | |||
| @Override | |||
| public String retrievalHotspot(String content) { | |||
| KnowledgeVo vo = new KnowledgeVo(); | |||
| String result = ""; | |||
| vo.setQuestion(content); | |||
| AjaxResult hotspotResult = remoteQAService.searchHotspot(vo); | |||
| log.info("hotspotResult:{}",hotspotResult); | |||
| if(hotspotResult.get("data") == null){ | |||
| return ""; | |||
| } | |||
| try{ | |||
| List<HotspotVo> voList = hotspotResult.toJson().getList("data", HotspotVo.class); | |||
| StringBuilder prompt = new StringBuilder(); | |||
| for(HotspotVo hotspotVo:voList){ | |||
| prompt.append(hotspotVo.getContent()); | |||
| prompt.append("\n"); | |||
| } | |||
| result = prompt.toString(); | |||
| }catch (Exception e){ | |||
| log.error("查询热点词失败",e); | |||
| return ""; | |||
| } | |||
| log.info("result:{}",result); | |||
| return result; | |||
| } | |||
| @Override | |||
| public String generateHotspotPrompt(String content) { | |||
| String result = retrievalHotspot(content); | |||
| DmPromptDto dmPromptDto = dmPromptService.selectByName("hotspot-chat"); | |||
| List<String> promptList = new ArrayList<>(); | |||
| promptList.add(result); | |||
| promptList.add(content); | |||
| return dmPromptDto.getPrompt(promptList); | |||
| } | |||
| } | |||
| @@ -0,0 +1,45 @@ | |||
| package com.xueyi.nlt.nlt.service.impl; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.domain.query.DmPromptQuery; | |||
| import com.xueyi.nlt.nlt.service.IDmPromptService; | |||
| import com.xueyi.nlt.nlt.manager.IDmPromptManager; | |||
| import com.xueyi.common.web.entity.service.impl.BaseServiceImpl; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.List; | |||
| /** | |||
| * 提示词管理管理 服务层处理 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Service | |||
| public class DmPromptServiceImpl extends BaseServiceImpl<DmPromptQuery, DmPromptDto, IDmPromptManager> implements IDmPromptService { | |||
| /** | |||
| * 查询提示词管理对象列表 | 数据权限 | |||
| * | |||
| * @param prompt 提示词管理对象 | |||
| * @return 提示词管理对象集合 | |||
| */ | |||
| @Override | |||
| //@DataScope(userAlias = "createBy", mapperScope = {"DmPromptMapper"}) | |||
| public List<DmPromptDto> selectListScope(DmPromptQuery prompt) { | |||
| return baseManager.selectList(prompt); | |||
| } | |||
| /** | |||
| * 根据提示词模板名称查询提示词管理对象 | 数据权限 | |||
| * | |||
| * @param name 提示词模板名称 | |||
| * @return 提示词对象 | |||
| */ | |||
| @Override | |||
| public DmPromptDto selectByName(String name) { | |||
| return baseManager.selectByName(name); | |||
| } | |||
| } | |||
| @@ -11,6 +11,9 @@ import com.xueyi.nlt.nlt.context.TerminalSecurityContextHolder; | |||
| import com.xueyi.nlt.nlt.domain.LlmContext; | |||
| import com.xueyi.nlt.nlt.domain.LlmParam; | |||
| import com.xueyi.nlt.nlt.domain.LlmResponse; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.service.IDmHotspotService; | |||
| import com.xueyi.nlt.nlt.service.IDmPromptService; | |||
| import com.xueyi.nlt.nlt.service.ISysLlmService; | |||
| import com.yomahub.tlog.core.annotation.TLogAspect; | |||
| import org.slf4j.Logger; | |||
| @@ -36,9 +39,15 @@ public class FreeChatTemplate implements BaseTemplate{ | |||
| @Autowired | |||
| private RedisTemplate<String,String> redisTemplate; | |||
| @Autowired | |||
| private IDmPromptService dmPromptService; | |||
| @Autowired | |||
| private RemoteQAService remoteQAService; | |||
| @Autowired | |||
| private IDmHotspotService dmHotspotService; | |||
| private Map<String,String> correctWordsMap = new HashMap<>(); | |||
| // 中航信领导来访临时对策 | |||
| @@ -60,10 +69,13 @@ public class FreeChatTemplate implements BaseTemplate{ | |||
| redisTemplate.opsForList().leftPop(redisKey,2); | |||
| } | |||
| size = redisTemplate.opsForList().size(redisKey); | |||
| // 获取prompt对象 | |||
| DmPromptDto promptDto = dmPromptService.selectByName("free-chat"); | |||
| List<String> context = new ArrayList<>(); | |||
| context.add("你是缔智元公司的前台,你叫小智,你是一位数字人。"); | |||
| context.add(promptDto.getRole()); | |||
| context.addAll(redisTemplate.opsForList().range(redisKey,size-6,size)); | |||
| content = generatePrompts(content); | |||
| content = promptDto.getPrefix() + content + promptDto.getSuffix(); | |||
| context.add(content); | |||
| //webSocketClient.sendMsg(context); | |||
| @@ -104,8 +116,11 @@ public class FreeChatTemplate implements BaseTemplate{ | |||
| redisTemplate.opsForList().leftPop(redisKey,2); | |||
| } | |||
| size = redisTemplate.opsForList().size(redisKey); | |||
| // 获取prompt对象 | |||
| DmPromptDto promptDto = dmPromptService.selectByName("hotspot-chat"); | |||
| List<String> context = new ArrayList<>(); | |||
| context.add("你是缔智元公司的前台,你叫小智,你是一位数字人,你们公司在北京,你的职能是负责做会议预定和访客预约。"); | |||
| context.add(promptDto.getRole()); | |||
| // 中航信领导来访临时对策 | |||
| // 判断如果content包含correctWordsMap中的key,则替换为value | |||
| for (String key : correctWordsMap.keySet()) { | |||
| @@ -115,7 +130,7 @@ public class FreeChatTemplate implements BaseTemplate{ | |||
| } | |||
| //context.addAll(redisTemplate.opsForList().range(redisKey,size-2,size)); | |||
| content = generatePrompts(content); | |||
| content = dmHotspotService.generateHotspotPrompt(content); | |||
| context.add(content); | |||
| //使用stream去除context列表中所有字符串中的引号 | |||
| context = context.stream().map(s -> s.replaceAll("\"", "")).collect(java.util.stream.Collectors.toList()); | |||
| @@ -140,38 +155,12 @@ public class FreeChatTemplate implements BaseTemplate{ | |||
| return null; | |||
| } | |||
| private String addHotspot(String content) { | |||
| KnowledgeVo vo = new KnowledgeVo(); | |||
| String result = ""; | |||
| vo.setQuestion(content); | |||
| AjaxResult hotspotResult = remoteQAService.searchHotspot(vo); | |||
| log.info("hotspotResult:{}",hotspotResult); | |||
| if(hotspotResult.get("data") == null){ | |||
| return result; | |||
| } | |||
| try{ | |||
| List<String> hotspotList = (List<String>) hotspotResult.get("data"); | |||
| for(String hotspot : hotspotList){ | |||
| result = result + hotspot + "\n"; | |||
| if(result.length() >= 1000){ | |||
| break; | |||
| } | |||
| } | |||
| //去除末尾的换行符 | |||
| }catch (Exception e){ | |||
| log.error("查询热点词失败",e); | |||
| return result; | |||
| } | |||
| return result; | |||
| } | |||
| private String generatePrompts(String content){ | |||
| String msg = addHotspot(content); | |||
| String msg = content; | |||
| if(msg.equals("")){ | |||
| return "请用简短的话回答下面的问题:" + content; | |||
| } | |||
| String result = "请根据下面的信息:'''\n" + msg + "\n'''请用简短的话回答下面的问题:" + content; | |||
| String result = "根据下面的信息:'''\n" + msg + "\n'''请用简短的话回答下面的问题:" + content; | |||
| return result; | |||
| } | |||
| } | |||
| @@ -7,6 +7,8 @@ import com.xueyi.nlt.netty.client.WebSocketClientManager; | |||
| import com.xueyi.nlt.nlt.domain.LlmContext; | |||
| import com.xueyi.nlt.nlt.domain.LlmParam; | |||
| import com.xueyi.nlt.nlt.domain.LlmResponse; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.service.IDmPromptService; | |||
| import com.xueyi.nlt.nlt.service.ISysLlmService; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| @@ -14,6 +16,9 @@ import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| @Service("generative-knowledge") | |||
| public class GenerativeKnowledgeTemplate implements BaseTemplate{ | |||
| @@ -25,17 +30,26 @@ public class GenerativeKnowledgeTemplate implements BaseTemplate{ | |||
| @Autowired | |||
| private ISysLlmService sysLlmService; | |||
| @Autowired | |||
| private IDmPromptService dmPromptService; | |||
| @Autowired | |||
| private RedisTemplate<String,String> redisTemplate; | |||
| @Override | |||
| public JSONObject handle(String devId, String content) { | |||
| JSONObject jsonObject = new JSONObject(); | |||
| DmPromptDto promptDto = dmPromptService.selectByName("generative-knowledge"); | |||
| // 根据content内容调用模版并返回结果 | |||
| String prefix = "你的任务是[针对给定的文段提出" + (content.length() /100 + 1 ) + "个问题并回答]。文段为:[\""; | |||
| String suffix = "\"]。输出为一个JSON数组[{}],每个元素是一个JSON:{“question”:,”answer”:}。不要给出任何解释说明。"; | |||
| log.info(prefix + content + suffix); | |||
| LlmContext llmContext = new LlmContext(prefix + content + suffix); | |||
| List<String> paramList = new ArrayList<>(); | |||
| paramList.add(String.valueOf(content.length() /100 + 1)); | |||
| paramList.add(content); | |||
| String prompt = promptDto.getPrompt(paramList); | |||
| // String prefix = "你的任务是[针对给定的文段提出" + (content.length() /100 + 1 ) + "个问题并回答]。文段为:[\""; | |||
| // String suffix = "\"]。输出为一个JSON数组[{}],每个元素是一个JSON:{“question”:,”answer”:}。不要给出任何解释说明。"; | |||
| // log.info(prefix + content + suffix); | |||
| LlmContext llmContext = new LlmContext(prompt); | |||
| llmContext.setDevId(devId); | |||
| LlmParam llmParam = new LlmParam(); | |||
| LlmResponse response = sysLlmService.chat(llmContext,llmParam); | |||
| @@ -12,7 +12,9 @@ import com.xueyi.nlt.nlt.constant.PromptsConstants; | |||
| import com.xueyi.nlt.nlt.domain.LlmContext; | |||
| import com.xueyi.nlt.nlt.domain.LlmParam; | |||
| import com.xueyi.nlt.nlt.domain.LlmResponse; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.domain.vo.WelcomeLabelVo; | |||
| import com.xueyi.nlt.nlt.service.IDmPromptService; | |||
| import com.xueyi.nlt.nlt.service.ISysLlmService; | |||
| import com.xueyi.system.api.holiday.domain.po.DmHolidayPo; | |||
| import com.xueyi.system.api.holiday.feign.FeignHolidayService; | |||
| @@ -53,7 +55,7 @@ public class GenerativeWelcomeTemplate implements BaseTemplate{ | |||
| private RemoteSolarService remoteSolarService; | |||
| @Autowired | |||
| private RedisTemplate<String,String> redisTemplate; | |||
| private IDmPromptService dmPromptService; | |||
| @Override | |||
| public JSONObject handle(String devId, String content) { | |||
| @@ -88,10 +90,10 @@ public class GenerativeWelcomeTemplate implements BaseTemplate{ | |||
| holiday = po.getName(); | |||
| } | |||
| List<WelcomeLabelVo> resultList = new ArrayList<>(); | |||
| String prefix = "假设你是公司前台,"; | |||
| String suffix = "请根据以上信息生成简短的话对他打招呼。生成十句打招呼内容,输出为一个JSON数组[{}],每个元素是一个JSON:{“content”:}。不要给出任何解释说明,不要带人名。"; | |||
| DmPromptDto promptDto = dmPromptService.selectByName("generative-welcome"); | |||
| //按照时间生成特殊招呼语 | |||
| for(String time:timeType.keySet()) { | |||
| String timeString = getTimeTypeFormat(timeType.getString(time)); | |||
| WelcomeLabelVo labelVo = new WelcomeLabelVo(); | |||
| labelVo.setLabelName(time); | |||
| List<WelcomeLabelVo> welcomeLabelVoList = new ArrayList<>(); | |||
| @@ -100,8 +102,14 @@ public class GenerativeWelcomeTemplate implements BaseTemplate{ | |||
| if(StringUtils.isNotBlank(holiday) || StringUtils.isNotBlank(term)){ | |||
| WelcomeLabelVo festivalWelcomeLabelVo = new WelcomeLabelVo(); | |||
| festivalWelcomeLabelVo.setLabelName("festival"); | |||
| log.info(prefix + getFestivalFormat(holiday) + getSolarTermFormat(term) + timeString + "看到员工时," + suffix); | |||
| LlmContext llmContext = new LlmContext(prefix + getFestivalFormat(holiday) + getSolarTermFormat(term) + timeString + "看到员工时," + suffix); | |||
| List<String> paramList = new ArrayList<>(); | |||
| paramList.add(holiday); | |||
| paramList.add(term); | |||
| paramList.add(timeType.getString(time)); | |||
| paramList.add("员工"); | |||
| String prompt = promptDto.getPrompt(paramList); | |||
| log.info(prompt); | |||
| LlmContext llmContext = new LlmContext(prompt); | |||
| llmContext.setDevId(devId); | |||
| LlmParam llmParam = new LlmParam(); | |||
| LlmResponse response = sysLlmService.chat(llmContext, llmParam); | |||
| @@ -118,9 +126,14 @@ public class GenerativeWelcomeTemplate implements BaseTemplate{ | |||
| for (String people : peopleType.keySet()) { | |||
| WelcomeLabelVo welcomeLabelVo = new WelcomeLabelVo(); | |||
| welcomeLabelVo.setLabelName(people); | |||
| String peopleString = getPeopleTypeFormat(peopleType.getString(people)); | |||
| log.info(prefix + timeString + peopleString + suffix); | |||
| LlmContext llmContext = new LlmContext(prefix + timeString + peopleString + suffix); | |||
| List<String> paramList = new ArrayList<>(); | |||
| paramList.add(""); | |||
| paramList.add(""); | |||
| paramList.add(timeType.getString(time)); | |||
| paramList.add(peopleType.getString(people)); | |||
| String prompt = promptDto.getPrompt(paramList); | |||
| log.info(prompt); | |||
| LlmContext llmContext = new LlmContext(prompt); | |||
| llmContext.setDevId(devId); | |||
| LlmParam llmParam = new LlmParam(); | |||
| LlmResponse response = sysLlmService.chat(llmContext, llmParam); | |||
| @@ -8,6 +8,8 @@ import com.xueyi.nlt.nlt.context.TerminalSecurityContextHolder; | |||
| import com.xueyi.nlt.nlt.domain.LlmContext; | |||
| import com.xueyi.nlt.nlt.domain.LlmParam; | |||
| import com.xueyi.nlt.nlt.domain.LlmResponse; | |||
| import com.xueyi.nlt.nlt.domain.dto.DmPromptDto; | |||
| import com.xueyi.nlt.nlt.service.IDmPromptService; | |||
| import com.xueyi.nlt.nlt.service.ISysLlmService; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| @@ -26,6 +28,8 @@ public class MovieChatTemplate implements BaseTemplate{ | |||
| @Autowired | |||
| WebSocketClientManager webSocketClientManager; | |||
| @Autowired | |||
| IDmPromptService dmPromptService; | |||
| @Autowired | |||
| ISysLlmService sysLlmService; | |||
| @@ -35,11 +39,8 @@ public class MovieChatTemplate implements BaseTemplate{ | |||
| @Override | |||
| public JSONObject handle(String devId, String content) { | |||
| // 判断content如果小于5五个字,返回msg:对不起,能否再描述清除一些。 | |||
| if(content.length() < 5){ | |||
| JSONObject resultJson = new JSONObject(); | |||
| resultJson.put("msg","对不起,能否再描述清楚一些。"); | |||
| return resultJson; | |||
| } | |||
| DmPromptDto promptDto = dmPromptService.selectByName("movie-chat"); | |||
| Long operatorId = TerminalSecurityContextHolder.getOperatorId(); | |||
| String redisKey = "group:nlp:" + SecurityContextHolder.getLocalMap().get("enterprise_id") + ":" + operatorId; | |||
| // 根据content内容调用模版并返回结果 | |||
| @@ -50,7 +51,7 @@ public class MovieChatTemplate implements BaseTemplate{ | |||
| } | |||
| size = redisTemplate.opsForList().size(redisKey); | |||
| List<String> context = new ArrayList<>(); | |||
| context.add("你是一位电影领域的专家。你来自于缔智元公司。你的名字叫小智"); | |||
| context.add(promptDto.getRole()); | |||
| context.addAll(redisTemplate.opsForList().range(redisKey,size-6,size)); | |||
| context.add(content); | |||
| @@ -67,7 +68,7 @@ public class MovieChatTemplate implements BaseTemplate{ | |||
| if(!StringUtils.isEmpty(result)){ | |||
| if (result.equals("-1")) { | |||
| result = "这个问题超出了我的能力,您可以提出更多关于公司相关问题。"; | |||
| result = promptDto.getErrMsg(); | |||
| } else { | |||
| redisTemplate.opsForList().rightPush(redisKey,content); | |||
| redisTemplate.opsForList().rightPush(redisKey,result); | |||
| @@ -128,6 +128,16 @@ public class DmQAndAController extends BaseController<DmQAndAQuery, DmQAndADto, | |||
| return super.success(); | |||
| } | |||
| /** | |||
| * 企业知识库问答批量删除(大模型) | |||
| */ | |||
| @DeleteMapping("/batch/llm/{idList}") | |||
| @RequiresPermissions(Auth.DM_Q_AND_A_DEL) | |||
| @Log(title = "企业知识库问答管理", businessType = BusinessType.DELETE) | |||
| public AjaxResult batchLlmRemove(@PathVariable List<String> idList) { | |||
| return AjaxResult.success(baseService.deleteLlmByIds(idList)); | |||
| } | |||
| /** | |||
| * 企业知识库问答修改 | |||
| */ | |||
| @@ -22,4 +22,6 @@ public class DmQAndADto extends DmQAndAPo { | |||
| private String creator; | |||
| private String fileId; | |||
| } | |||
| @@ -4,6 +4,8 @@ import com.xueyi.system.digitalmans.domain.query.DmQAndAQuery; | |||
| import com.xueyi.system.digitalmans.domain.dto.DmQAndADto; | |||
| import com.xueyi.common.web.entity.service.IBaseService; | |||
| import java.io.Serializable; | |||
| import java.util.Collection; | |||
| import java.util.List; | |||
| /** | |||
| @@ -13,4 +15,6 @@ import java.util.List; | |||
| */ | |||
| public interface IDmQAndAService extends IBaseService<DmQAndAQuery, DmQAndADto> { | |||
| Integer batchInsert(List<DmQAndADto> queryList); | |||
| Integer deleteLlmByIds(Collection<? extends Serializable> idList); | |||
| } | |||
| @@ -1,5 +1,8 @@ | |||
| package com.xueyi.system.digitalmans.service.impl; | |||
| import com.alibaba.fastjson2.JSONObject; | |||
| import com.xueyi.common.core.utils.ServletUtil; | |||
| import com.xueyi.nlt.api.nlt.feign.RemoteLandingLlmService; | |||
| import com.xueyi.system.api.organize.domain.dto.SysUserDto; | |||
| import com.xueyi.system.api.organize.domain.query.SysUserQuery; | |||
| import com.xueyi.system.digitalmans.domain.dto.DmQAndADto; | |||
| @@ -8,12 +11,18 @@ import com.xueyi.system.digitalmans.domain.query.DmQAndAQuery; | |||
| import com.xueyi.system.digitalmans.service.IDmQAndAService; | |||
| import com.xueyi.system.digitalmans.manager.IDmQAndAManager; | |||
| import com.xueyi.common.web.entity.service.impl.BaseServiceImpl; | |||
| import com.xueyi.system.digitalmans.service.IDmQuestionsService; | |||
| import com.xueyi.system.organize.service.ISysUserService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.io.Serializable; | |||
| import java.util.ArrayList; | |||
| import java.util.Collection; | |||
| import java.util.List; | |||
| import static com.xueyi.common.core.web.page.TableSupport.PAGE_NUM; | |||
| import static com.xueyi.common.core.web.page.TableSupport.PAGE_SIZE; | |||
| /** | |||
| * 企业知识库问答管理 服务层处理 | |||
| * | |||
| @@ -24,6 +33,11 @@ public class DmQAndAServiceImpl extends BaseServiceImpl<DmQAndAQuery, DmQAndADto | |||
| @Autowired | |||
| private ISysUserService iSysUserService; | |||
| @Autowired | |||
| private IDmQuestionsService dmQuestionsService; | |||
| @Autowired | |||
| private RemoteLandingLlmService remoteLandingLlmService; | |||
| /** | |||
| * 查询企业知识库问答对象列表 | 数据权限 | |||
| * | |||
| @@ -33,7 +47,28 @@ public class DmQAndAServiceImpl extends BaseServiceImpl<DmQAndAQuery, DmQAndADto | |||
| @Override | |||
| //@DataScope(userAlias = "createBy", mapperScope = {"DmQAndAMapper"}) | |||
| public List<DmQAndADto> selectListScope(DmQAndAQuery qAndA) { | |||
| // 根据knowledgeId获取知识库信息 | |||
| DmQuestionsDto questionsDto = dmQuestionsService.selectById(qAndA.getKnowledgeId()); | |||
| if (questionsDto != null && questionsDto.getType() != null && questionsDto.getType() == 1) { | |||
| System.out.println(ServletUtil.getParameterToInt(PAGE_SIZE)); | |||
| System.out.println(ServletUtil.getParameterToInt(PAGE_NUM)); | |||
| // System.out.println(page.getPageNum() + " " + page.getPageSize()); | |||
| // 根据name获取上传文档列表 | |||
| JSONObject jsonObject = remoteLandingLlmService.getUploadFileList(questionsDto.getName(), String.valueOf(ServletUtil.getParameterToInt(PAGE_SIZE)),String.valueOf(ServletUtil.getParameterToInt(PAGE_NUM))); | |||
| System.out.println(jsonObject.toJSONString()); | |||
| if (jsonObject != null) { | |||
| List<DmQAndADto> dmQAndADtos = new ArrayList<>(); | |||
| int totalRow = jsonObject.getInteger("totalRow"); | |||
| for (int i = 0;i < jsonObject.getJSONArray("data").size(); i++) { | |||
| DmQAndADto dmQAndADto = new DmQAndADto(); | |||
| dmQAndADto.setFileId(jsonObject.getJSONArray("data").getJSONObject(i).getString("fileId")); | |||
| dmQAndADto.setKnowledgeId(qAndA.getKnowledgeId()); | |||
| dmQAndADto.setName(jsonObject.getJSONArray("data").getJSONObject(i).getString("filename")); | |||
| dmQAndADtos.add(dmQAndADto); | |||
| } | |||
| return dmQAndADtos; | |||
| } | |||
| } | |||
| SysUserQuery userQuery = new SysUserQuery(); | |||
| List<SysUserDto> userDtos = iSysUserService.selectList(userQuery); | |||
| @@ -53,4 +88,15 @@ public class DmQAndAServiceImpl extends BaseServiceImpl<DmQAndAQuery, DmQAndADto | |||
| public Integer batchInsert(List<DmQAndADto> queryList) { | |||
| return baseManager.insertBatch(queryList); | |||
| } | |||
| @Override | |||
| public Integer deleteLlmByIds(Collection<? extends Serializable> idList) { | |||
| //idList转换成List<String> | |||
| List<String> ids = new ArrayList<>(); | |||
| idList.forEach(id -> { | |||
| ids.add(String.valueOf(id)); | |||
| }); | |||
| remoteLandingLlmService.deleteFile(ids); | |||
| return ids.size(); | |||
| } | |||
| } | |||