멀티 에이전트 및 노드 전략 (Multi-Agent & Node Strategy)


초기 구현 상태는 여러 에이전트가 순차적으로 협업하는 구조이며, 각 노드는 State에 저장된 질문 상태(status)와 질문 메타데이터를 공유하면서 자신의 역할만 수행합니다.

즉, 하나의 거대한 에이전트가 모든 일을 처리하는 방식이 아니라,

질문 생성 → 답변 예측 → 꼬리질문 생성 → 품질 검토

를 역할별로 분리한 멀티 에이전트 전략입니다.

에이전트/노드 구성

에이전트 / 노드 역할 주요 미션
PrepareContext (문맥 준비 노드) 입력 문맥 정리 세션 정보, 지원자 정보, 문서 텍스트를 하나의 공통 문맥(candidate_context)으로 병합하고, 기존 질문 ID를 안정화
Questioner (질문자) 기초 질문 설계 지원자 문서와 채용 기준을 바탕으로 핵심 질문과 평가 가이드 초안 생성. 질문 생성 근거(generation_basis)와 문서 근거(document_evidence)를 함께 기록
Predictor (예측자) 답변 시뮬레이션 지원자의 입장에서 가장 현실적인 예상 답변(predicted_answer) 을 생성하고, 답변 신뢰도(answer_confidence) 와 위험 포인트(answer_risk_points) 를 함께 남김
Driller (추적자) 꼬리 질문 생성 예상 답변의 빈틈, 검증 포인트, 오너십, 수치, 의사결정 지점을 파고드는 심층 2차 질문(Follow-up) 설계. 꼬리질문 목적(drill_type)도 함께 기록
Reviewer (검토자) 품질 보증 (QA) 채용 기준과 질문 품질 루브릭에 따라 각 질문을 검토하고 approved / needs_revision / rejected 상태를 부여. 이슈 유형(issue_types)과 수정 대상 필드(requested_revision_fields)도 함께 기록
Review Router (분기 노드) 재시도 여부 판단 Reviewer 결과를 보고 questioner로 되돌릴지, 최종 응답으로 종료할지 결정

전략적 특징

사람의 개입(더보기, 재생성, 추가 질문 등)은 LangGraph 내부가 아니라 서비스 레이어에서 처리합니다. LangGraph는 순수하게 AI 파이프라인만 담당하고, 사람과의 인터랙션은 프론트/백엔드가 결과를 받아 재호출하는 방식으로 구현합니다. 현재 JH 그래프는 서비스 레이어에서 human_action, target_question_ids, additional_instruction, existing_questions를 조립해 재호출하는 구조입니다.

랭그래프 노드 구성 및 상태 관리 (Node Workflow)


graph TD
    %% 1. 시작 단계
    StartNode((<b>START</b>)) --> InputSection["<b>[1. Input Data]</b><br/>지원자 문서 목록 + 채용 기준용 프롬프트 프로필<br/><i>+ 서비스 레이어에서 넘어온 재호출 파라미터 주입</i>"]

    InputSection --> StateInit["<b>[2. State Initialization]</b><br/>에이전트 공유용 QuestionSet 리스트 생성<br/>(재호출 시: 기존 questions 상태 복원)"]

    %% 2. 에이전트 순차 처리
    StateInit --> PrepareContext

    subgraph Multi_Agent_Engine ["<b>[3. Multi-Agent Sequential Logic]</b>"]
        direction TB

        PrepareContext["<b>Node 0: PrepareContext</b><br/>세션/지원자/문서 정보를 하나의 공통 문맥으로 병합<br/><i>+ 질문 ID 안정화</i>"]

        Questioner["<b>Agent 1: Questioner (질문자)</b><br/>문서 기반 핵심 질문 & 평가 가이드 생성<br/><i>+ generation_basis / document_evidence 기록</i><br/><i>+ 재호출 시: human_action 파라미터에 따라 분기 처리</i>"]

        Predictor["<b>Agent 2: Predictor (예측자)</b><br/>지원자 관점 예상 답변 생성<br/><i>+ answer_confidence / answer_risk_points 기록</i>"]

        Driller["<b>Agent 3: Driller (추적자)</b><br/>답변 허점을 찌르는 2차 꼬리 질문 설계<br/><i>+ drill_type 기록</i>"]

        Reviewer{"<b>Agent 4: Reviewer (검토자)</b><br/>루브릭 기반 품질 검증 및 승인"}

        %% 내부 수직 흐름
        PrepareContext --> Questioner
        Questioner --> Predictor
        Predictor --> Driller
        Driller --> Reviewer
    end

    %% 3. 루프 및 종료 판단
    Reviewer -- "needs_revision / rejected" --> Questioner
    Reviewer -- "모든 질문 승인 완료" --> FinalReport["<b>[4. Final Output]</b><br/>최종 면접 질문 리포트 생성<br/>(JSON 반환 → 서비스 레이어로 전달)"]

    %% 4. 종료
    FinalReport --> FinishNode((<b>FINISH</b>))

    %% 스타일 정의
    style StartNode fill:#2196f3,stroke:#0d47a1,color:#fff
    style FinishNode fill:#2196f3,stroke:#0d47a1,color:#fff
    style InputSection fill:#e3f2fd,stroke:#2196f3
    style StateInit fill:#e3f2fd,stroke:#2196f3
    style Reviewer fill:#fff176,stroke:#fbc02d,stroke-width:2px
    style Multi_Agent_Engine fill:#fafafa,stroke:#9e9e9e,stroke-dasharray: 5 5
    style FinalReport fill:#c8e6c9,stroke:#2e7d32

서비스 레이어 설계 (Human Interaction)