HS - interview_graph LangGraph 분석 — 2차 개선 통합 반영본


1. 문서 목적

본 문서는 backend/ai/interview_graph 기준으로 2차 개선에서 반영한 내용을 통합 정리한다.

이번 2차 개선의 핵심은 다음 6가지다.

  1. 질문 생성 성공 여부와 질문 품질 상태를 분리한다.
  2. 질문 카테고리를 한글 표준값으로 통일하고, 영어/축약/변형 값은 스키마 validator에서 정규화한다.
  3. 전체 생성 기준 질문 후보 수를 8개에서 10개로 확대하고, selector_lite에서 후속 처리 대상 5개를 선별한다.
  4. questioner 출력 스키마를 압축해 downstream 입력 토큰 증가를 줄인다.
  5. 규칙 기반 scorer를 유지해 LLM scorer timeout과 중복 평가 비용을 제거한다.
  6. 부분 재시도 시 questioner뿐 아니라 predictor, driller, reviewer도 변경된 질문만 재처리하도록 개선한다.

2. 실험 개요

항목 내용
대상 final_formatter, schemas.py, questioner, selector_lite, predictor, driller, reviewer, scorer, router
한 줄 목적 질문 생성 완료 상태, 카테고리 계약, 재시도 비용 구조를 정리해 API 안정성과 단일 실행 성능을 함께 개선한다.
실험 유형 성능 / 비용 / 안정성 / 품질 / State 구조 개선
기준 AS-IS docs/HS/HS_랭그래프_기획.md
주요 성능 기준 단일 실행 1건, LLM 호출 9회, 총 91,517 tokens, 총 LLM 시간 416.26초

3. 문제 정의 및 관측 데이터

3.1 문제 A: partial_completed 의미 혼합

기존에는 LangGraph 실행이 실패하지 않았고 질문도 저장되었지만, 최종 세션 상태가 COMPLETED가 아니라 PARTIAL_COMPLETED로 저장되는 케이스가 반복 관측되었다.

원인은 final_formatter_node가 질문 생성 성공 여부와 질문 품질 승인 여부를 하나의 status로 판단했기 때문이다.

is_partial = (
    not has_extracted_text
    or len(items) < 5
    or approved_count < 5
    or state.get("retry_count", 0) >= state.get("max_retry_count", 3)
    or bool(state.get("node_warnings"))
)