Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
Expand Down Expand Up @@ -48,8 +50,31 @@ public ApiResponse<JobPostingMockGenerateResponse> generateMockJobPosting(
summary = "모의 공고 추천 질문 조회",
description = "선택한 회사/직무 기준으로 모의 공고 추천 질문을 조회합니다. 질문은 직무 기준 캐시를 재사용합니다."
)
@PostMapping("/questions")
@GetMapping("/questions")
public ApiResponse<JobPostingMockQuestionResponse> getMockRecommendedQuestions(
@AuthenticationPrincipal UserDetailsImpl userDetails,
@RequestParam Long companyId,
@RequestParam Long middleClassificationId,
@RequestParam Long detailClassificationId
) {
validateAuthenticatedUser(userDetails);
JobPostingMockGenerateRequest request = new JobPostingMockGenerateRequest(
companyId,
middleClassificationId,
detailClassificationId
);
return ApiResponse.onSuccess(
"모의 공고 추천 질문 조회에 성공했습니다.",
new JobPostingMockQuestionResponse(mockQuestionCacheService.getRecommendedQuestions(request))
);
}

@Operation(
summary = "모의 공고 추천 질문 조회",
description = "선택한 회사/직무 기준으로 모의 공고 추천 질문을 조회합니다. 하위 호환을 위해 POST 요청도 지원합니다."
)
@PostMapping("/questions")
public ApiResponse<JobPostingMockQuestionResponse> getMockRecommendedQuestionsByPost(
@AuthenticationPrincipal UserDetailsImpl userDetails,
@Valid @RequestBody JobPostingMockGenerateRequest request
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public JobPostingMockQuestionResponse generateMockRecommendedQuestions(

var params = ResponseCreateParams.builder()
.model(extractionModel)
.input(buildMockQuestionPrompt(request, detailClassification, retrievalContext))
.input(buildMockQuestionPrompt(company, request, detailClassification, retrievalContext))
.temperature(0.4)
.text(JobPostingMockQuestionResponse.class)
.build();
Expand Down Expand Up @@ -505,6 +505,7 @@ private String buildMockGenerationPrompt(
}

private String buildMockQuestionPrompt(
Company company,
JobPostingMockGenerateRequest request,
DetailClassification detailClassification,
RetrievalContext retrievalContext
Expand All @@ -531,6 +532,11 @@ private String buildMockQuestionPrompt(
3. 질문은 서로 중복되지 않게 작성하세요.
4. 참고 공고가 있으면 직무 맥락과 자주 요구되는 역량을 반영하세요.
5. 참고 공고가 없으면 중분류/소분류명만 기반으로 일반적인 직무 질문을 작성하세요.
6. 질문에 회사명을 포함해야 한다면 반드시 아래 제공된 회사명만 사용하세요.
7. 참고 자료에 등장하는 다른 회사명은 절대 질문에 쓰지 마세요.

[회사명]
%s

[중분류 ID]
%d
Expand All @@ -550,6 +556,7 @@ private String buildMockQuestionPrompt(
[같은 조건의 유사 자소서 문항 참고 자료]
%s
""".formatted(
company.getName(),
request.middleClassificationId(),
middleName,
request.detailClassificationId(),
Expand Down
Loading