Skip to content

feat(session): 면접 첫 질문 자기소개 고정 + 자기소개 기반 질문 생성#117

Merged
i3months merged 1 commit into
devfrom
feature/self-intro-first-question
Jun 25, 2026
Merged

feat(session): 면접 첫 질문 자기소개 고정 + 자기소개 기반 질문 생성#117
i3months merged 1 commit into
devfrom
feature/self-intro-first-question

Conversation

@i3months

Copy link
Copy Markdown
Member

변경 사항

면접 구조를 바꿉니다. 모든 면접의 첫 질문을 "자기소개"로 고정하고, 이력서/레포 기반 질문 풀을 세션 생성 시점이 아니라 자기소개 답변을 받은 뒤 그 답변을 1차 근거로 생성합니다 (실제 면접과 동일).

새 흐름

세션 생성 → 자기소개 질문(seq=1) 즉시 삽입 (AI 호출 없음, TTS만)
  → 사용자가 자기소개 답변
  → 그 답변을 씨앗으로 generate.questions 발행 → 이력서/레포 기반 질문 풀 생성
  → 첫 본 질문부터 기존 꼬리질문 사이클

설계 결정

  • 질문 풀 생성 시점: 자기소개 답변 이후 (답변을 씨앗으로)
  • 카운트: 자기소개가 첫 일반질문 1자리를 차지 → 풀 크기 = generalQuestionCount - 1
  • 꼬리질문: 자기소개엔 달지 않고 바로 본 질문으로

상세

Core (backend)

  • InterviewMessage: selfIntroduction() 팩토리 + isSelfIntroduction() + sentinel category SELF_INTRODUCTION (category엔 DB CHECK 없음 → 마이그레이션 불필요)
  • QuestionsCallbackService.insertSelfIntroduction() — 세션 생성 직후 첫 질문 고정 삽입 + 카운트 + TTS/SSE
  • SessionQuestionsRequester — 생성 시엔 자기소개 삽입만, generate.questions 발행은 새 onSelfIntroAnswered로 이동
  • SessionFollowupRequester — 자기소개 답변이면 꼬리질문 대신 SelfIntroAnsweredEvent 발행 (텍스트·음성 답변 모두 같은 경로)
  • 새 이벤트 SelfIntroAnsweredEvent, GenerateQuestionsPayload.selfIntroAnswer 추가

AI

  • GenerateQuestionsRequest.self_intro_answer 추가 → consumer/generator를 거쳐 프롬프트의 1차 근거로 주입 (chain/prompts/question_generation.py)

Frontend

  • 카테고리 라벨에 SELF_INTRODUCTION: '자기소개' 추가

테스트

  • 백엔드: SessionQuestionsRequesterTest 재작성, SessionFollowupRequesterTest 신규, QuestionsCallbackServiceTest에 자기소개 케이스 2개 추가 → 통과 (ArchUnit 포함)
  • AI: forwarding/format 테스트 추가 → 255 passed
  • Frontend: tsc --noEmit 통과

문서

  • docs/data-flow.md, docs/messaging.md, backend/CLAUDE.md, ai/CLAUDE.md 갱신

후속 (별도 PR)

  • 자기소개 채점/피드백: 종합 기술 점수엔 제외(정답성 N/A), "전달력/첫인상" 정성 피드백으로 분리. 풀 생성 LLM 호출에 평가 반환을 끼워넣는 저비용 경로 예정.

🤖 Generated with Claude Code

모든 면접의 첫 질문을 "자기소개"로 고정하고, 이력서/레포 기반 질문 풀을
세션 생성 시점이 아니라 자기소개 답변을 받은 뒤 그 답변을 1차 근거로 생성한다.

- Core: InterviewMessage.selfIntroduction(seq=1, category=SELF_INTRODUCTION) +
  isSelfIntroduction(). 세션 생성 직후 AI 없이 고정 삽입(insertSelfIntroduction).
- Core: 자기소개 답변이면 꼬리질문 대신 SelfIntroAnsweredEvent 발행 →
  SessionQuestionsRequester.onSelfIntroAnswered 가 selfIntroAnswer 를 씨앗으로
  generate.questions 발행. 풀 크기 = generalQuestionCount-1 (자기소개 1자리 예약).
  자기소개엔 꼬리질문을 달지 않는다.
- AI: GenerateQuestionsRequest.self_intro_answer 추가 → 프롬프트 1차 근거로 주입.
- Frontend: 카테고리 라벨에 SELF_INTRODUCTION='자기소개' 추가.
- 자기소개 채점/피드백은 후속 PR (정답성 점수 제외, 전달력 피드백으로 분리 예정).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
stackup Ready Ready Preview, Comment Jun 25, 2026 3:08am

@i3months i3months merged commit d7e1a86 into dev Jun 25, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant