Prompt模板关联标签和应用。
This commit is contained in:
parent
c823592ba0
commit
f6f52b1de7
@ -39,7 +39,9 @@ public interface ErrorCodeConstants {
|
||||
*/
|
||||
|
||||
|
||||
ErrorCode PROMPT_TEMPLATES_NOT_EXISTS = new ErrorCode(10016, "模板信息不存在");
|
||||
ErrorCode PROMPT_TEMPLATES_NOT_EXISTS = new ErrorCode(100_1000, "模板信息不存在");
|
||||
|
||||
ErrorCode PROMPT_TEMPLATES_EXISTS = new ErrorCode(100_1001, "模板信息已存在");
|
||||
|
||||
ErrorCode PROMPT_TEMPLATES_APPLICATIONS_NOT_EXISTS = new ErrorCode(10017, "模板信息不存在");
|
||||
|
||||
|
@ -29,7 +29,7 @@ import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.*;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplates.PromptTemplatesDO;
|
||||
import cn.iocoder.yudao.module.llm.service.prompttemplates.PromptTemplatesService;
|
||||
|
||||
@Tag(name = "管理后台 - Prompt 模板表,用于记录每个模板的信息")
|
||||
@Tag(name = "管理后台 - Prompt模板")
|
||||
@RestController
|
||||
@RequestMapping("/llm/prompt-templates")
|
||||
@Validated
|
||||
@ -39,14 +39,14 @@ public class PromptTemplatesController {
|
||||
private PromptTemplatesService promptTemplatesService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建Prompt 模板表,用于记录每个模板的信息")
|
||||
@Operation(summary = "创建Prompt模板")
|
||||
@PreAuthorize("@ss.hasPermission('llm:prompt-templates:create')")
|
||||
public CommonResult<Long> createPromptTemplates(@Valid @RequestBody PromptTemplatesSaveReqVO createReqVO) {
|
||||
return success(promptTemplatesService.createPromptTemplates(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新Prompt 模板表,用于记录每个模板的信息")
|
||||
@Operation(summary = "更新Prompt模板")
|
||||
@PreAuthorize("@ss.hasPermission('llm:prompt-templates:update')")
|
||||
public CommonResult<Boolean> updatePromptTemplates(@Valid @RequestBody PromptTemplatesSaveReqVO updateReqVO) {
|
||||
promptTemplatesService.updatePromptTemplates(updateReqVO);
|
||||
@ -54,7 +54,7 @@ public class PromptTemplatesController {
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除Prompt 模板表,用于记录每个模板的信息")
|
||||
@Operation(summary = "删除Prompt模板")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('llm:prompt-templates:delete')")
|
||||
public CommonResult<Boolean> deletePromptTemplates(@RequestParam("id") Long id) {
|
||||
@ -63,33 +63,37 @@ public class PromptTemplatesController {
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得Prompt 模板表,用于记录每个模板的信息")
|
||||
@Operation(summary = "Prompt模板详情")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('llm:prompt-templates:query')")
|
||||
public CommonResult<PromptTemplatesRespVO> getPromptTemplates(@RequestParam("id") Long id) {
|
||||
PromptTemplatesDO promptTemplates = promptTemplatesService.getPromptTemplates(id);
|
||||
return success(BeanUtils.toBean(promptTemplates, PromptTemplatesRespVO.class));
|
||||
return success(promptTemplatesService.getPromptTemplates(id));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得Prompt 模板表,用于记录每个模板的信息分页")
|
||||
@Operation(summary = "分页查询Prompt模板")
|
||||
@PreAuthorize("@ss.hasPermission('llm:prompt-templates:query')")
|
||||
public CommonResult<PageResult<PromptTemplatesRespVO>> getPromptTemplatesPage(@Valid PromptTemplatesPageReqVO pageReqVO) {
|
||||
PageResult<PromptTemplatesDO> pageResult = promptTemplatesService.getPromptTemplatesPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, PromptTemplatesRespVO.class));
|
||||
return success(promptTemplatesService.getPromptTemplatesPage(pageReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出Prompt 模板表,用于记录每个模板的信息 Excel")
|
||||
@Operation(summary = "导出Prompt模板")
|
||||
@PreAuthorize("@ss.hasPermission('llm:prompt-templates:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportPromptTemplatesExcel(@Valid PromptTemplatesPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<PromptTemplatesDO> list = promptTemplatesService.getPromptTemplatesPage(pageReqVO).getList();
|
||||
List<PromptTemplatesRespVO> list = promptTemplatesService.getPromptTemplatesPage(pageReqVO).getList();
|
||||
List<PromptTemplatesExcelVO> excelList = BeanUtils.toBean(list, PromptTemplatesExcelVO.class);
|
||||
for(PromptTemplatesExcelVO excelVO : excelList){
|
||||
// TODO 从字典模块查询
|
||||
excelVO.setTemplateCategoryDisplay("");
|
||||
excelVO.setTag("");
|
||||
}
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "Prompt 模板表,用于记录每个模板的信息.xls", "数据", PromptTemplatesRespVO.class,
|
||||
BeanUtils.toBean(list, PromptTemplatesRespVO.class));
|
||||
ExcelUtils.write(response, "Prompt模板信息.xls", "数据",
|
||||
PromptTemplatesExcelVO.class, excelList);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,37 @@
|
||||
package cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class PromptTemplatesExcelVO {
|
||||
@ExcelProperty("模板名称")
|
||||
private String name;
|
||||
|
||||
private Integer templateCategory;
|
||||
|
||||
@ExcelProperty("模板分类")
|
||||
private String templateCategoryDisplay;
|
||||
|
||||
private List<String> tagIds;
|
||||
|
||||
@ExcelProperty("标签")
|
||||
private String tag;
|
||||
|
||||
@ExcelProperty("模板内容")
|
||||
private String templateText;
|
||||
|
||||
@ExcelProperty("使用量")
|
||||
private int usedCount;
|
||||
|
||||
@ExcelProperty("关联应用")
|
||||
private int applicationCount;
|
||||
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
}
|
@ -13,19 +13,17 @@ import com.alibaba.excel.annotation.*;
|
||||
public class PromptTemplatesRespVO {
|
||||
|
||||
@Schema(description = "Prompt 模板ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20922")
|
||||
@ExcelProperty("Prompt 模板ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "Prompt 模板名称", example = "王五")
|
||||
@ExcelProperty("Prompt 模板名称")
|
||||
@ExcelProperty("模板名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "模板分类,使用字典(llm_prompt_template_category)")
|
||||
@ExcelProperty("模板分类,使用字典(llm_prompt_template_category)")
|
||||
@ExcelProperty("模板分类")
|
||||
private Integer templateCategory;
|
||||
|
||||
@Schema(description = "模板框架,使用字典(llm_prompt_template_framework)")
|
||||
@ExcelProperty("模板框架,使用字典(llm_prompt_template_framework)")
|
||||
private Integer templateFramework;
|
||||
|
||||
@Schema(description = "模板内容")
|
||||
@ -33,15 +31,27 @@ public class PromptTemplatesRespVO {
|
||||
private String templateText;
|
||||
|
||||
@Schema(description = "变量标识符,使用字典(llm_variable_identifier)")
|
||||
@ExcelProperty("变量标识符,使用字典(llm_variable_identifier)")
|
||||
private Integer variableIdentifier;
|
||||
|
||||
@Schema(description = "模板类型(1 - 预制模板、2 - 自定义模板)", example = "1")
|
||||
@ExcelProperty("模板类型(1 - 预制模板、2 - 自定义模板)")
|
||||
private Integer templateType;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "标签Id列表", example = "[1, 2, 3]")
|
||||
private List<String> tagIds;
|
||||
|
||||
@Schema(description = "应用Id列表", example = "[1, 2, 3]")
|
||||
private List<String> applicationIds;
|
||||
|
||||
@Schema(description = "使用量")
|
||||
@ExcelProperty("使用量")
|
||||
private int usedCount;
|
||||
|
||||
@Schema(description = "关联应用")
|
||||
@ExcelProperty("关联应用")
|
||||
private int applicationCount;
|
||||
|
||||
}
|
||||
|
@ -30,4 +30,10 @@ public class PromptTemplatesSaveReqVO {
|
||||
@Schema(description = "模板类型(1 - 预制模板、2 - 自定义模板)", example = "1")
|
||||
private Integer templateType;
|
||||
|
||||
@Schema(description = "标签Id列表", example = "[1, 2, 3]")
|
||||
private List<String> tagIds;
|
||||
|
||||
@Schema(description = "应用Id列表", example = "[1, 2, 3]")
|
||||
private List<String> applicationIds;
|
||||
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ public interface PromptTemplatesService {
|
||||
* @param id 编号
|
||||
* @return Prompt 模板表,用于记录每个模板的信息
|
||||
*/
|
||||
PromptTemplatesDO getPromptTemplates(Long id);
|
||||
PromptTemplatesRespVO getPromptTemplates(Long id);
|
||||
|
||||
/**
|
||||
* 获得Prompt 模板表,用于记录每个模板的信息分页
|
||||
@ -50,6 +50,6 @@ public interface PromptTemplatesService {
|
||||
* @param pageReqVO 分页查询
|
||||
* @return Prompt 模板表,用于记录每个模板的信息分页
|
||||
*/
|
||||
PageResult<PromptTemplatesDO> getPromptTemplatesPage(PromptTemplatesPageReqVO pageReqVO);
|
||||
PageResult<PromptTemplatesRespVO> getPromptTemplatesPage(PromptTemplatesPageReqVO pageReqVO);
|
||||
|
||||
}
|
||||
|
@ -1,11 +1,18 @@
|
||||
package cn.iocoder.yudao.module.llm.service.prompttemplates;
|
||||
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesapplications.PromptTemplatesApplicationsDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatestags.PromptTemplatesTagsDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatesapplications.PromptTemplatesApplicationsMapper;
|
||||
import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatestags.PromptTemplatesTagsMapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.*;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplates.PromptTemplatesDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
@ -28,12 +35,38 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService {
|
||||
|
||||
@Resource
|
||||
private PromptTemplatesMapper promptTemplatesMapper;
|
||||
@Resource
|
||||
private PromptTemplatesTagsMapper promptTemplatesTagsMapper;
|
||||
@Resource
|
||||
private PromptTemplatesApplicationsMapper promptTemplatesApplicationsMapper;
|
||||
|
||||
@Override
|
||||
public Long createPromptTemplates(PromptTemplatesSaveReqVO createReqVO) {
|
||||
this.isNameDuplicate(createReqVO.getName());
|
||||
// 插入
|
||||
PromptTemplatesDO promptTemplates = BeanUtils.toBean(createReqVO, PromptTemplatesDO.class);
|
||||
promptTemplates.setTemplateType(2);
|
||||
promptTemplatesMapper.insert(promptTemplates);
|
||||
List<String> tagIds = createReqVO.getTagIds();
|
||||
if(tagIds!=null && !tagIds.isEmpty()) {
|
||||
List<PromptTemplatesTagsDO> tagDOList = tagIds.stream()
|
||||
.map(p->PromptTemplatesTagsDO.builder()
|
||||
.tagId(Long.valueOf(p))
|
||||
.promptTemplateId(promptTemplates.getId())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
this.promptTemplatesTagsMapper.insertBatch(tagDOList, 1);
|
||||
}
|
||||
List<String> applicationIds = createReqVO.getApplicationIds();
|
||||
if(applicationIds!=null && !applicationIds.isEmpty()) {
|
||||
List<PromptTemplatesApplicationsDO> applicationDOList = applicationIds.stream()
|
||||
.map(p->PromptTemplatesApplicationsDO.builder()
|
||||
.applicationId(Long.valueOf(p))
|
||||
.promptTemplateId(promptTemplates.getId())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
this.promptTemplatesApplicationsMapper.insertBatch(applicationDOList, 1);
|
||||
}
|
||||
// 返回
|
||||
return promptTemplates.getId();
|
||||
}
|
||||
@ -45,6 +78,30 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService {
|
||||
// 更新
|
||||
PromptTemplatesDO updateObj = BeanUtils.toBean(updateReqVO, PromptTemplatesDO.class);
|
||||
promptTemplatesMapper.updateById(updateObj);
|
||||
Map<String, Object> deleteCondition = new HashMap<>(1);
|
||||
deleteCondition.put("prompt_template_id", updateReqVO.getId());
|
||||
this.promptTemplatesTagsMapper.deleteByMap(deleteCondition);
|
||||
List<String> tagIds = updateReqVO.getTagIds();
|
||||
if(tagIds!=null && !tagIds.isEmpty()) {
|
||||
List<PromptTemplatesTagsDO> tagDOList = tagIds.stream()
|
||||
.map(p->PromptTemplatesTagsDO.builder()
|
||||
.tagId(Long.valueOf(p))
|
||||
.promptTemplateId(updateReqVO.getId())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
this.promptTemplatesTagsMapper.insertBatch(tagDOList, 1);
|
||||
}
|
||||
this.promptTemplatesApplicationsMapper.deleteByMap(deleteCondition);
|
||||
List<String> applicationIds = updateReqVO.getApplicationIds();
|
||||
if(applicationIds!=null && !applicationIds.isEmpty()) {
|
||||
List<PromptTemplatesApplicationsDO> applicationDOList = applicationIds.stream()
|
||||
.map(p->PromptTemplatesApplicationsDO.builder()
|
||||
.applicationId(Long.valueOf(p))
|
||||
.promptTemplateId(updateReqVO.getId())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
this.promptTemplatesApplicationsMapper.insertBatch(applicationDOList, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -53,6 +110,10 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService {
|
||||
validatePromptTemplatesExists(id);
|
||||
// 删除
|
||||
promptTemplatesMapper.deleteById(id);
|
||||
Map<String, Object> condition = new HashMap<>(1);
|
||||
condition.put("prompt_template_id", id);
|
||||
this.promptTemplatesTagsMapper.deleteByMap(condition);
|
||||
this.promptTemplatesApplicationsMapper.deleteByMap(condition);
|
||||
}
|
||||
|
||||
private void validatePromptTemplatesExists(Long id) {
|
||||
@ -61,14 +122,53 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PromptTemplatesDO getPromptTemplates(Long id) {
|
||||
return promptTemplatesMapper.selectById(id);
|
||||
private void isNameDuplicate(String name) {
|
||||
List<PromptTemplatesDO> templateDOList = this.promptTemplatesMapper.selectList("name", name);
|
||||
if(templateDOList!=null && templateDOList.size()>0) {
|
||||
throw exception(PROMPT_TEMPLATES_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<PromptTemplatesDO> getPromptTemplatesPage(PromptTemplatesPageReqVO pageReqVO) {
|
||||
return promptTemplatesMapper.selectPage(pageReqVO);
|
||||
public PromptTemplatesRespVO getPromptTemplates(Long id) {
|
||||
PromptTemplatesDO templatesDO = this.promptTemplatesMapper.selectById(id);
|
||||
if(templatesDO == null) {
|
||||
return null;
|
||||
}
|
||||
PromptTemplatesRespVO promptTemplates = BeanUtils.toBean(templatesDO, PromptTemplatesRespVO.class);
|
||||
List<PromptTemplatesTagsDO> tagDOList = this.promptTemplatesTagsMapper
|
||||
.selectList("prompt_template_id", id);
|
||||
if(tagDOList!=null && !tagDOList.isEmpty()) {
|
||||
List<String> tagIds = tagDOList.stream()
|
||||
.map(p->p.getId().toString())
|
||||
.collect(Collectors.toList());
|
||||
promptTemplates.setTagIds(tagIds);
|
||||
}
|
||||
List<PromptTemplatesApplicationsDO> applicationDOList = this.promptTemplatesApplicationsMapper
|
||||
.selectList("prompt_template_id", id);
|
||||
if(applicationDOList!=null && !applicationDOList.isEmpty()) {
|
||||
List<String> applicationIds = applicationDOList.stream()
|
||||
.map(p->p.getId().toString())
|
||||
.collect(Collectors.toList());
|
||||
promptTemplates.setApplicationIds(applicationIds);
|
||||
}
|
||||
return promptTemplates;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<PromptTemplatesRespVO> getPromptTemplatesPage(PromptTemplatesPageReqVO pageReqVO) {
|
||||
PageResult<PromptTemplatesDO> pageDoList = this.promptTemplatesMapper.selectPage(pageReqVO);
|
||||
PageResult<PromptTemplatesRespVO> pageRespList = BeanUtils.toBean(pageDoList, PromptTemplatesRespVO.class);
|
||||
List<PromptTemplatesRespVO> templatesRespList = pageRespList.getList();
|
||||
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.valueOf(applicationCount.toString()));
|
||||
}
|
||||
return pageRespList;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user