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

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