AI 个人简介生成器
This commit is contained in:
@@ -19,6 +19,8 @@ public class HotakeCvInfoDto {
|
||||
|
||||
@ApiModelProperty("姓名")
|
||||
private String name;
|
||||
@ApiModelProperty("出生日期")
|
||||
private String birthday;
|
||||
@ApiModelProperty("电话")
|
||||
private String phone;
|
||||
@ApiModelProperty("邮箱")
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.vetti.hotake.domain.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 个人简介生成器 返回对象
|
||||
*
|
||||
* @author wangxiangshun
|
||||
* @date 2025-11-30
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class HotakePersonalProfileGeneratorDto {
|
||||
|
||||
@ApiModelProperty("自我介绍")
|
||||
private String about;
|
||||
}
|
||||
@@ -16,4 +16,7 @@ public class VcLinksDto {
|
||||
|
||||
@ApiModelProperty("内容")
|
||||
private String content;
|
||||
|
||||
@ApiModelProperty("类型(例如:LinkedIn,Website)")
|
||||
private String dataType;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.vetti.hotake.domain.vo;
|
||||
|
||||
import com.vetti.hotake.domain.dto.VcDto.VcLinksDto;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 个人简介生成器 对象
|
||||
*
|
||||
* @author wangxiangshun
|
||||
* @date 2025-12-14
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class HotakePersonalProfileGeneratorVo {
|
||||
|
||||
@ApiModelProperty("姓名")
|
||||
private String name;
|
||||
@ApiModelProperty("出生日期")
|
||||
private String birthday;
|
||||
@ApiModelProperty("电话")
|
||||
private String phone;
|
||||
@ApiModelProperty("邮箱")
|
||||
private String email;
|
||||
@ApiModelProperty("岗位")
|
||||
private String position;
|
||||
@ApiModelProperty("地点")
|
||||
private String location;
|
||||
@ApiModelProperty("链接对象集合")
|
||||
private List<VcLinksDto> links;
|
||||
|
||||
}
|
||||
@@ -5,10 +5,8 @@ import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
|
||||
import com.vetti.hotake.domain.dto.HotakeCvOptimizeDto;
|
||||
import com.vetti.hotake.domain.dto.HotakeInitialQuestionEliminationScoreDto;
|
||||
import com.vetti.hotake.domain.dto.HotakeJobDescriptionGeneratorDto;
|
||||
import com.vetti.hotake.domain.vo.HotakeInitialQuestionEliminationScoreVo;
|
||||
import com.vetti.hotake.domain.vo.HotakeInitialScreeningQuestionsVo;
|
||||
import com.vetti.hotake.domain.vo.HotakeResumeJobMatchingScoreVo;
|
||||
import com.vetti.hotake.domain.vo.HotakeWebInfoExtractVo;
|
||||
import com.vetti.hotake.domain.dto.HotakePersonalProfileGeneratorDto;
|
||||
import com.vetti.hotake.domain.vo.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -92,6 +90,12 @@ public interface IHotakeAiCommonToolsService {
|
||||
public String handleWebInfoEnhancedProcessing(String webContent);
|
||||
|
||||
|
||||
/**
|
||||
* 个人简介生成器
|
||||
* @param personalProfileGeneratorVo 个人信息
|
||||
* @return
|
||||
*/
|
||||
public HotakePersonalProfileGeneratorDto getPersonalProfileGenerator(HotakePersonalProfileGeneratorVo personalProfileGeneratorVo);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -11,25 +11,18 @@ import com.vetti.common.utils.html.ReadHtmlByOkHttp;
|
||||
import com.vetti.hotake.domain.HotakeInitScreQuestionsReplyRecordInfo;
|
||||
import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
|
||||
import com.vetti.hotake.domain.HotakeRolesInfo;
|
||||
import com.vetti.hotake.domain.dto.AnswerOptionsDto;
|
||||
import com.vetti.hotake.domain.dto.HotakeCvOptimizeDto;
|
||||
import com.vetti.hotake.domain.dto.HotakeInitialQuestionEliminationScoreDto;
|
||||
import com.vetti.hotake.domain.dto.HotakeJobDescriptionGeneratorDto;
|
||||
import com.vetti.hotake.domain.dto.*;
|
||||
import com.vetti.hotake.domain.dto.VcDto.*;
|
||||
import com.vetti.hotake.domain.dto.roleDto.NiceToHaveSkillsDto;
|
||||
import com.vetti.hotake.domain.dto.roleDto.RequiredSkillsDto;
|
||||
import com.vetti.hotake.domain.dto.roleDto.ResponsibilitiesDto;
|
||||
import com.vetti.hotake.domain.vo.HotakeInitialQuestionEliminationScoreVo;
|
||||
import com.vetti.hotake.domain.vo.HotakeInitialScreeningQuestionsVo;
|
||||
import com.vetti.hotake.domain.vo.HotakeResumeJobMatchingScoreVo;
|
||||
import com.vetti.hotake.domain.vo.HotakeWebInfoExtractVo;
|
||||
import com.vetti.hotake.domain.vo.*;
|
||||
import com.vetti.hotake.mapper.HotakeInitialScreeningQuestionsInfoMapper;
|
||||
import com.vetti.hotake.mapper.HotakeRolesApplyInfoMapper;
|
||||
import com.vetti.hotake.mapper.HotakeRolesInfoMapper;
|
||||
import com.vetti.hotake.service.IHotakeAiCommonToolsService;
|
||||
import com.vetti.system.mapper.SysUserMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.catalina.security.SecurityUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -644,5 +637,54 @@ public class HotakeAiCommonToolsServiceImpl extends BaseServiceImpl implements I
|
||||
return resultJson;
|
||||
}
|
||||
|
||||
/**
|
||||
* 个人简介生成器
|
||||
* @param personalProfileGeneratorVo 个人信息
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public HotakePersonalProfileGeneratorDto getPersonalProfileGenerator(HotakePersonalProfileGeneratorVo personalProfileGeneratorVo) {
|
||||
String prompt = AiCommonPromptConstants.initializationPersonalProfileGeneratorPrompt();
|
||||
|
||||
String linedIn = "";
|
||||
String website = "";
|
||||
if(CollectionUtil.isNotEmpty(personalProfileGeneratorVo.getLinks())){
|
||||
List<VcLinksDto> linedInList = personalProfileGeneratorVo.getLinks().stream().filter(e->"LinkedIn".equals(e.getDataType())).toList();
|
||||
if(CollectionUtil.isNotEmpty(linedInList)){
|
||||
linedIn = linedInList.get(0).getContent();
|
||||
}
|
||||
List<VcLinksDto> websiteList = personalProfileGeneratorVo.getLinks().stream().filter(e->"Website".equals(e.getDataType())).toList();
|
||||
|
||||
if(CollectionUtil.isNotEmpty(websiteList)){
|
||||
website = websiteList.get(0).getContent();
|
||||
}
|
||||
}
|
||||
String candidateText = " Full Name: "+personalProfileGeneratorVo.getName()+" Birthday: "+personalProfileGeneratorVo.getBirthday()+" Job Position: "+personalProfileGeneratorVo.getPosition()
|
||||
+"Location: "+personalProfileGeneratorVo.getLocation()+" Email: "+personalProfileGeneratorVo.getEmail()+" Phone Number: "+personalProfileGeneratorVo.getPhone()
|
||||
+"LinkedIn: "+linedIn+" Website: "+website;
|
||||
|
||||
String userPrompt = "Please generate a professional personal summary based on the following candidate information:\\n\\n"+candidateText;
|
||||
List<Map<String, String>> list = new LinkedList();
|
||||
Map<String, String> mapEntity = new HashMap<>();
|
||||
mapEntity.put("role", "system");
|
||||
mapEntity.put("content",prompt);
|
||||
list.add(mapEntity);
|
||||
Map<String, String> mapUserEntity = new HashMap<>();
|
||||
mapUserEntity.put("role", "user");
|
||||
mapUserEntity.put("content",userPrompt);
|
||||
list.add(mapUserEntity);
|
||||
String promptJson = JSONUtil.toJsonStr(list);
|
||||
String resultStr = chatGPTClient.handleAiChat(promptJson,"WEBAITQ");
|
||||
String resultJson = resultStr.replaceAll("```json","").replaceAll("```","");
|
||||
log.info("个人简介生成器:{}",resultJson);
|
||||
|
||||
Map dataMap = JSONUtil.toBean(resultJson,Map.class);
|
||||
HotakePersonalProfileGeneratorDto generatorDto = new HotakePersonalProfileGeneratorDto();
|
||||
|
||||
Map personalSummaryMap = (Map)dataMap.get("personal_summary");
|
||||
generatorDto.setAbout(personalSummaryMap.get("generated_text").toString());
|
||||
return generatorDto;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user