AI 个人简介生成器

This commit is contained in:
2026-01-07 10:39:22 +08:00
parent 7114a5f625
commit 698838590e
8 changed files with 403 additions and 17 deletions

View File

@@ -19,6 +19,8 @@ public class HotakeCvInfoDto {
@ApiModelProperty("姓名")
private String name;
@ApiModelProperty("出生日期")
private String birthday;
@ApiModelProperty("电话")
private String phone;
@ApiModelProperty("邮箱")

View File

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

View File

@@ -16,4 +16,7 @@ public class VcLinksDto {
@ApiModelProperty("内容")
private String content;
@ApiModelProperty("类型(例如:LinkedIn,Website)")
private String dataType;
}

View File

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

View File

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

View File

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