[Fix] 자소서 분석 상태 저장 및 데모데이 결과 노출 정합성 개선 - #253
Conversation
- 유효한 PROVEN 문항 분석을 저장하고 개선문을 비우도록 처리 - 답변에 이미 언급된 MISSING 후보를 핵심 토큰 기준으로 제거 - 동일 문항의 직접 충돌 FABRICATED를 대표 한 건으로 제한 - Java 분석 프롬프트와 fixed few-shot의 상태 계약 정렬 - 데모 공고, 자기소개서, 운영 가이드, 예상 응답 및 평가 CSV 추가 - 네 상태 저장·조회와 문장 인덱스 검증 테스트 보강
|
Warning Review limit reached
Next review available in: 32 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (13)
📝 WalkthroughWalkthrough분석 프롬프트가 Changes분석 상태 처리
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: Sequence Diagram(s)sequenceDiagram
participant AnalysisService
participant AnalysisAiClient
participant AnalysisSanitizationRules
participant EvaluationAnalysisBatchService
AnalysisService->>AnalysisAiClient: 자기소개서 및 채용공고 분석 요청
AnalysisAiClient-->>AnalysisService: 상태별 questionAnalyses와 missingKeywords
AnalysisService->>AnalysisSanitizationRules: 답변 내 키워드 언급 여부 확인
AnalysisSanitizationRules-->>AnalysisService: 필터링 대상 키워드 반환
AnalysisService->>EvaluationAnalysisBatchService: 분석 후보 전달
EvaluationAnalysisBatchService-->>AnalysisService: 최종 상태별 결과 반환
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/test/java/com/jobdri/jobdri_api/domain/analysis/service/ai/AnalysisAiClientTest.java (1)
327-344: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win동적 few-shot 예시의 출력 계약을 통일하세요.
두 테스트의 선택 사례는 비어 있지 않은 답변에 빈
questionAnalyses를 사용합니다. 새 계약은 모든 non-empty question에 1~3개의 대표 분석을 요구합니다.
src/test/java/com/jobdri/jobdri_api/domain/analysis/service/ai/AnalysisAiClientTest.java#L327-L344:selectedCase출력에 원문 substring과 유효한 상태를 포함하세요.src/test/java/com/jobdri/jobdri_api/domain/analysis/service/ai/FewShotPromptProviderTest.java#L27-L33: 선택 fixture와 저장된 few-shot 검증이 같은 계약을 사용하도록 수정하세요.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/test/java/com/jobdri/jobdri_api/domain/analysis/service/ai/AnalysisAiClientTest.java` around lines 327 - 344, Update the selectedCase fixture in AnalysisAiClientTest.java:327-344 to include the original-answer substring and a valid status, with 1–3 representative question analyses for the non-empty answer. Update the selection fixture and persisted few-shot assertions in FewShotPromptProviderTest.java:27-33 to use the same output contract, ensuring both tests validate consistent non-empty question analysis data.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@src/main/java/com/jobdri/jobdri_api/domain/analysis/service/ai/AnalysisAiClient.java`:
- Around line 189-197: Update the TWO_PASS flow in buildCandidatePrompt and
buildAcceptedQuestionAnalyses so StrengthCandidate entries can be finalized as
per-question PROVEN analyses, with improvement set to null, and apply the 1–3
candidate limit independently for each question rather than globally. Keep
MENTIONED and FABRICATED handling intact, and ensure MISSING is not emitted if
it violates the questionAnalyses status contract.
In
`@src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisService.java`:
- Around line 449-453: 두 저장 경로에서 근거 없는 PROVEN 결과를 저장하지 않도록 수정하세요.
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisService.java:449-453의
PROVEN 처리에서 reason이 null 또는 빈 문자열인지 먼저 검증하고, 상태와 일치하는 유효한 reason만 저장하게 하세요. 동일한
검증을
src/main/java/com/jobdri/jobdri_api/domain/analysis/evaluation/EvaluationAnalysisBatchService.java:274-278에도
적용하고, 두 경로에 null 및 빈 문자열 회귀 테스트를 추가하세요.
- Around line 243-251: Update finalizeAnalysis so question validation,
combinedAnswers, missing-keyword filtering, and QuestionAnalysis validation all
use one immutable answer snapshot. Before finalization begins, recalculate and
compare the database questions’ answer fingerprint with the snapshot from
AnalysisExecutionPayload, rejecting or aborting when they differ; otherwise
reuse that verified snapshot throughout instead of mixing payload answers with
newly loaded DB questions.
In
`@src/main/java/com/jobdri/jobdri_api/domain/analysis/service/sanitization/AnalysisSanitizationRules.java`:
- Around line 112-113: In
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/sanitization/AnalysisSanitizationRules.java
lines 112-113, update the composite-keyword sanitization condition to rely only
on MIN_KEYWORD_TOKEN_MATCH_RATIO and remove the matchCount >= 3 bypass. In
src/test/java/com/jobdri/jobdri_api/domain/analysis/service/sanitization/AnalysisSanitizationRulesTest.java
lines 131-134, change the partial-match case expectation to false.
---
Outside diff comments:
In
`@src/test/java/com/jobdri/jobdri_api/domain/analysis/service/ai/AnalysisAiClientTest.java`:
- Around line 327-344: Update the selectedCase fixture in
AnalysisAiClientTest.java:327-344 to include the original-answer substring and a
valid status, with 1–3 representative question analyses for the non-empty
answer. Update the selection fixture and persisted few-shot assertions in
FewShotPromptProviderTest.java:27-33 to use the same output contract, ensuring
both tests validate consistent non-empty question analysis data.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 5b8f0044-5a85-4d11-8fd8-6d11e8b9698f
⛔ Files ignored due to path filters (2)
docs/demo-day/demo-ai-repeat-results.csvis excluded by!**/*.csvsrc/test/resources/evaluation/demo-day-cases.csvis excluded by!**/*.csv
📒 Files selected for processing (15)
docs/demo-day/demo-analysis-report.mddocs/demo-day/demo-cover-letter.mddocs/demo-day/demo-expected-analysis.jsondocs/demo-day/demo-job-posting.txtdocs/demo-day/demo-operator-guide.mdsrc/main/java/com/jobdri/jobdri_api/domain/analysis/evaluation/EvaluationAnalysisBatchService.javasrc/main/java/com/jobdri/jobdri_api/domain/analysis/service/ai/AnalysisAiClient.javasrc/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisService.javasrc/main/java/com/jobdri/jobdri_api/domain/analysis/service/sanitization/AnalysisSanitizationRules.javasrc/main/resources/ai/analysis/fewshot-prompt-block.txtsrc/test/java/com/jobdri/jobdri_api/domain/analysis/evaluation/EvaluationAnalysisBatchServiceTest.javasrc/test/java/com/jobdri/jobdri_api/domain/analysis/service/ai/AnalysisAiClientTest.javasrc/test/java/com/jobdri/jobdri_api/domain/analysis/service/ai/FewShotPromptProviderTest.javasrc/test/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisServiceTest.javasrc/test/java/com/jobdri/jobdri_api/domain/analysis/service/sanitization/AnalysisSanitizationRulesTest.java
- TWO_PASS 강점 후보를 문항별 PROVEN 분석으로 변환 - questionAnalyses 최대 개수 제한을 문항별로 적용 - MISSING 상태가 문장 분석에 포함되지 않도록 프롬프트와 후처리 계약 통일 - PROVEN의 null, 빈 문자열 및 모순된 reason 저장 차단 - 최초 실행 답변 스냅샷과 완료 시점 DB 답변 fingerprint 불일치 차단 - 복합 missing keyword 판정을 토큰 일치 비율 기준으로 통일 - few-shot 및 운영·평가 저장 경로 회귀 테스트 보강
✨ 어떤 이유로 PR를 하셨나요?
📋 세부 내용 - 왜 해당 PR이 필요한지 작업 내용을 자세하게 설명해주세요
📸 작업 화면 스크린샷
🚨 관련 이슈 번호 [ ]
Summary by CodeRabbit
개선 사항
문서