From 5858f1d84ca07e16b5d7d6178d6f517ef23c1cad Mon Sep 17 00:00:00 2001 From: Edward_89 Date: Tue, 31 Dec 2024 16:55:23 +0800 Subject: [PATCH] =?UTF-8?q?Prompt=E6=A8=A1=E6=9D=BF=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E7=9A=84=E6=A1=86=E6=9E=B6=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../prompttemplates/vo/AbilityFramework.java | 17 ++++ .../prompttemplates/vo/BriefFramework.java | 17 ++++ .../vo/PromptTemplatesRespVO.java | 17 +++- .../vo/PromptTemplatesSaveReqVO.java | 15 ++- .../prompttemplates/vo/SampleFramework.java | 15 +++ .../vo/SampleFrameworkItem.java | 13 +++ .../PromptTemplatesServiceImpl.java | 93 +++++++++++++++++-- 7 files changed, 173 insertions(+), 14 deletions(-) create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/AbilityFramework.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/BriefFramework.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/SampleFramework.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/SampleFrameworkItem.java diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/AbilityFramework.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/AbilityFramework.java new file mode 100644 index 000000000..e1744edba --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/AbilityFramework.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "角色能力框架") +@Data +public class AbilityFramework { + @Schema(description="能力与角色") + private String abilityInfo; + @Schema(description="背景信息") + private String bgInfo; + @Schema(description="指令") + private String orderInfo; + @Schema(description="输出格式") + private String outputFormat; +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/BriefFramework.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/BriefFramework.java new file mode 100644 index 000000000..037ba6210 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/BriefFramework.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "简介框架") +@Data +public class BriefFramework { + @Schema(description="指令") + private String orderInfo; + @Schema(description="背景信息") + private String bgInfo; + @Schema(description="补充数据") + private String plusInfo; + @Schema(description="输出格式") + private String outputFormat; +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesRespVO.java index e855243ec..5716171e4 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesRespVO.java @@ -26,10 +26,6 @@ public class PromptTemplatesRespVO { @Schema(description = "模板框架,使用字典(llm_prompt_template_framework)") private Integer templateFramework; - @Schema(description = "模板内容") - @ExcelProperty("模板内容") - private String templateText; - @Schema(description = "变量标识符,使用字典(llm_variable_identifier)") private Integer variableIdentifier; @@ -54,4 +50,17 @@ public class PromptTemplatesRespVO { @ExcelProperty("关联应用") private int applicationCount; + @Schema(description = "简介框架") + private BriefFramework briefFramework; + + @Schema(description = "角色能力框架") + private AbilityFramework abilityFramework; + + @Schema(description = "角色能力框架") + private SampleFramework sampleFramework; + + @Schema(description = "模板内容") + @ExcelProperty("模板内容") + private String templateText; + } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesSaveReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesSaveReqVO.java index 296801586..2d12bcb57 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesSaveReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesSaveReqVO.java @@ -21,9 +21,6 @@ public class PromptTemplatesSaveReqVO { @Schema(description = "模板框架,使用字典(llm_prompt_template_framework)") private Integer templateFramework; - @Schema(description = "模板内容") - private String templateText; - @Schema(description = "变量标识符,使用字典(llm_variable_identifier)") private Integer variableIdentifier; @@ -36,4 +33,16 @@ public class PromptTemplatesSaveReqVO { @Schema(description = "应用Id列表", example = "[1, 2, 3]") private List applicationIds; + @Schema(description = "模板内容") + private String templateText; + + @Schema(description = "简介框架") + private BriefFramework briefFramework; + + @Schema(description = "角色能力框架") + private AbilityFramework abilityFramework; + + @Schema(description = "角色能力框架") + private SampleFramework sampleFramework; + } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/SampleFramework.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/SampleFramework.java new file mode 100644 index 000000000..471a370c3 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/SampleFramework.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "角色能力框架") +@Data +public class SampleFramework { + @Schema(description="背景信息") + private String bgInfo; + @Schema(description="样例列表") + private List itemList; +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/SampleFrameworkItem.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/SampleFrameworkItem.java new file mode 100644 index 000000000..a2fb75f8c --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/SampleFrameworkItem.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "角色能力框架样例") +@Data +public class SampleFrameworkItem { + @Schema(description="输入") + private String input; + @Schema(description="输出") + private String output; +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesServiceImpl.java index dd533bc03..fc1339ee8 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesServiceImpl.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatesapplications.PromptT import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatestags.PromptTemplatesTagsMapper; import cn.iocoder.yudao.module.llm.service.label.LabelService; import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -48,6 +49,24 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService { this.isNameDuplicate(createReqVO.getName()); PromptTemplatesDO promptTemplates = BeanUtils.toBean(createReqVO, PromptTemplatesDO.class); promptTemplates.setTemplateType(2); + String categoryName = this.dictDataApi.getDictDataLabel(Long.valueOf(createReqVO + .getTemplateCategory().toString())); + switch (categoryName) { + case "简介框架": + BriefFramework briefFramework = createReqVO.getBriefFramework(); + promptTemplates.setTemplateText(JSON.toJSONString(briefFramework)); + break; + case "角色能力框架": + AbilityFramework abilityFramework = createReqVO.getAbilityFramework(); + promptTemplates.setTemplateText(JSON.toJSONString(abilityFramework)); + break; + case "样例提示框架": + SampleFramework sampleFramework = createReqVO.getSampleFramework(); + promptTemplates.setTemplateText(JSON.toJSONString(sampleFramework)); + break; + default: + break; + } promptTemplatesMapper.insert(promptTemplates); List tagIds = createReqVO.getTagIds(); if(tagIds!=null && !tagIds.isEmpty()) { @@ -74,8 +93,32 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService { @Override public void updatePromptTemplates(PromptTemplatesSaveReqVO updateReqVO) { - validatePromptTemplatesExists(updateReqVO.getId()); + PromptTemplatesDO templatesDo = this.promptTemplatesMapper.selectById(updateReqVO.getId()); + if(templatesDo == null) { + throw exception(PROMPT_TEMPLATES_NOT_EXISTS); + } + if(!templatesDo.getName().equals(updateReqVO.getName())) { + this.isNameDuplicate(updateReqVO.getName()); + } PromptTemplatesDO updateObj = BeanUtils.toBean(updateReqVO, PromptTemplatesDO.class); + String categoryName = this.dictDataApi.getDictDataLabel(Long.valueOf(updateReqVO + .getTemplateCategory().toString())); + switch (categoryName) { + case "简介框架": + BriefFramework briefFramework = updateReqVO.getBriefFramework(); + updateObj.setTemplateText(JSON.toJSONString(briefFramework)); + break; + case "角色能力框架": + AbilityFramework abilityFramework = updateReqVO.getAbilityFramework(); + updateObj.setTemplateText(JSON.toJSONString(abilityFramework)); + break; + case "样例提示框架": + SampleFramework sampleFramework = updateReqVO.getSampleFramework(); + updateObj.setTemplateText(JSON.toJSONString(sampleFramework)); + break; + default: + break; + } promptTemplatesMapper.updateById(updateObj); Map deleteCondition = new HashMap<>(1); deleteCondition.put("prompt_template_id", updateReqVO.getId()); @@ -137,7 +180,7 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService { .selectList("prompt_template_id", id); if(tagDOList!=null && !tagDOList.isEmpty()) { List tagIds = tagDOList.stream() - .map(p->p.getId().toString()) + .map(p->p.getTagId().toString()) .collect(Collectors.toList()); promptTemplates.setTagIds(tagIds); } @@ -145,10 +188,30 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService { .selectList("prompt_template_id", id); if(applicationDOList!=null && !applicationDOList.isEmpty()) { List applicationIds = applicationDOList.stream() - .map(p->p.getId().toString()) + .map(p->p.getApplicationId().toString()) .collect(Collectors.toList()); promptTemplates.setApplicationIds(applicationIds); } + String categoryName = this.dictDataApi.getDictDataLabel(Long.valueOf(templatesDO.getTemplateCategory().toString())); + switch (categoryName) { + case "简介框架": + promptTemplates.setBriefFramework(JSON.parseObject(promptTemplates + .getTemplateText(), BriefFramework.class)); + promptTemplates.setTemplateText(""); + break; + case "角色能力框架": + promptTemplates.setAbilityFramework(JSON.parseObject(promptTemplates + .getTemplateText(), AbilityFramework.class)); + promptTemplates.setTemplateText(""); + break; + case "样例提示框架": + promptTemplates.setSampleFramework(JSON.parseObject(promptTemplates + .getTemplateText(), SampleFramework.class)); + promptTemplates.setTemplateText(""); + break; + default: + break; + } return promptTemplates; } @@ -160,10 +223,26 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService { for(PromptTemplatesRespVO respVO : templatesRespList) { // TODO 使用量查询暂时设置为0 respVO.setUsedCount(0); - Long applicationCount = this.promptTemplatesApplicationsMapper.selectCount( - new QueryWrapper() - .eq("prompt_template_id", respVO.getId())); - respVO.setApplicationCount(Integer.parseInt(applicationCount.toString())); + try { + List tagDOList = this.promptTemplatesTagsMapper + .selectList("prompt_template_id", respVO.getId()); + if(tagDOList!=null && !tagDOList.isEmpty()) { + List tagIds = tagDOList.stream() + .map(p->p.getTagId().toString()) + .collect(Collectors.toList()); + respVO.setTagIds(tagIds); + } + } catch(Exception e) { + e.printStackTrace(); + } + try { + Long applicationCount = this.promptTemplatesApplicationsMapper.selectCount( + new QueryWrapper() + .eq("prompt_template_id", respVO.getId())); + respVO.setApplicationCount(Integer.parseInt(applicationCount.toString())); + } catch(Exception e) { + e.printStackTrace(); + } } return pageRespList; }