Prompt模板记录详细的框架信息。

This commit is contained in:
Edward_89 2024-12-31 16:55:23 +08:00
parent 903216e1e5
commit 5858f1d84c
7 changed files with 173 additions and 14 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<String> applicationIds;
@Schema(description = "模板内容")
private String templateText;
@Schema(description = "简介框架")
private BriefFramework briefFramework;
@Schema(description = "角色能力框架")
private AbilityFramework abilityFramework;
@Schema(description = "角色能力框架")
private SampleFramework sampleFramework;
}

View File

@ -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<SampleFrameworkItem> itemList;
}

View File

@ -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;
}

View File

@ -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<String> 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<String, Object> 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<String> 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<String> 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<PromptTemplatesApplicationsDO>()
.eq("prompt_template_id", respVO.getId()));
respVO.setApplicationCount(Integer.parseInt(applicationCount.toString()));
try {
List<PromptTemplatesTagsDO> tagDOList = this.promptTemplatesTagsMapper
.selectList("prompt_template_id", respVO.getId());
if(tagDOList!=null && !tagDOList.isEmpty()) {
List<String> 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<PromptTemplatesApplicationsDO>()
.eq("prompt_template_id", respVO.getId()));
respVO.setApplicationCount(Integer.parseInt(applicationCount.toString()));
} catch(Exception e) {
e.printStackTrace();
}
}
return pageRespList;
}