[KT] AIVLE SCHOOL 23~25일
2번째 미니프로젝트는 생성형 AI 였다.
먼저 1일차에는 개인적으로 그래프 구성도와 State를 정의해보고
각 모듈 함수를 구현해보았고, 팀원들과 통합하였다.
그리고 2일차에는 통합한 조별 파일을 가지고
각각의 파트를 고도화하는 작업을 했다.
마지막 3일차에는 2일차에서 보완할 점을 보완하고
산출물을 작성했다.
프로젝트의 목표는 개인화된 질문과 답변에 대한
피드백을 해주는 AI 면접관 Agent 시스템 구축이다.
LangGraph을 기반으로 Agent 흐름을 설계하고
LLM을 기반으로 질문을 생성하며 전략적 응답 흐름을 구성한다.
사전 준비 절차는 이력서를 업로드하면
이력서를 요약하고 질문 전략을 수립한다.
다음으로 면접 절차는 수립한 질문 전력에 맞게
생성한 질문을 제시하고 사용자의 응답을 받아
추가 질문 또는 최종 평가 및 피드백을 진행한다.
1일차에는 개인 과제로, 틀에 맞게
기본적인 구조를 정의하였다.
State 선언
먼저 State를 구성하였다. 흐름을 진행하면서
어떤 정보들을 주고받을지를 정해 주었는데,
입력받을 이력서 정보, 이력서를 요약한 내용,
이력서를 바탕으로 추출한 키워드, 수립한 질문 전략을
정의를 해주었고
면접 진행 절차에서 사용할 질문, 답변, 현재 전략 등을
저장할 수 있도록 하였다.
그리고 이력서를 입력받고
초기 상태 구성을 위해 state를 초기화 해주었다.
Resume 분석
다음으로 이력서에 맞춰 개인화된 질문을 뽑기 위한
이력서 핵심 내용 및 키워드를 도출하는 노드를 구성해주었다.
이 내용은 질문 전략을 수립하기 위한 기본 자료로 사용된다.
Input: 이력서/자소서 Text , Output: 핵심 요약 str, 주요 키워드 List
입력받은 이력서/자소서 Text를 프롬프트에 넣고
핵심 내용을 요약하여 변수에 저장하고
핵심 키워드를 추출하여 변수에 저장하고 값을 넘길 수 있도록 하였다.
질문 전략 수립
다음은 위에서 요약한 핵심 내용과
핵심 키워드를 Input로 하여
개인화된 질문을 뽑기 위한 질문 전략을 수립하여
3가지 분야에 대한 질문방향과 예시 질문을
저장하는 노드를 구성해주었다.
3가지 분야는 '경력 및 경험' , '동기 및 커뮤니케이션', '논리적 사고'
이고, 핵심 내용과 핵심 키워드를 프롬프트에 입력하고
이에 맞춰 각 분야에 대한 전략과 예시 질문을
딕셔너리 형태로 저장하고 넘길 수 있도록 하였다.
그리고 위의 과정들을 사전 준비 절차대로
하나의 함수로 묶을 수 있도록 하였다.
이력서만 입력하면 아래와 같이
구성될 수 있도록 하였다.
답변 입력 / 평가
이제 면접 진행에 대한 노드를 구성해준다.
먼저 사용자의 답변을 입력받아 변수에 저장해주고
이 답변을 입력으로 받아 답변이 적절한지 평가해준다.
평가 항목은 '질문과의 관련성', '답변의 구체성'으로
구성하였고 상, 중, 하로 등급을 정했다.
프롬프트에 현재 질문과 답변을 입력하고
평가 항목을 제시하여 등급을 평가하여
값을 넘긴다.
인터뷰 진행 검토
이 부분에서는 면접을 계속 진행할지
최종 결과를 낼지 판단하는 노드를 구성해주었다.
1일차에는 간단하게 질문과 답변이 3회 초과 되었으면
멈추고, 아니면 추가 질문을 생성할 수 있도록 하였다.
질문 생성
이 노드는 이전 질문 답변을 검토한 후
추가 심화 질문을 생성하는 노드이다.
이력서 요약, 키워드, 질문전략, 이전 질문과 답변, 평가를
프롬프트에 넣고 지원자의 사고력, 문제 해결 방식,
또는 기술적 깊이를 추가로 확인할 수 있는
심화 질문을 생성하여 값을 넘긴다.
인터뷰 피드백 보고서
마지막으로 이 노드는
인터뷰를 종료하며
인터뷰 내용과 평가내용 화면을 출력한다.
이 노드들을 구성하고
최종적으로 각 노드를 흐름에 맞게 연결해주었다.
면접 단계에서는
사용자 응답 입력 -> 답변 평가 -> 인터뷰 진행 검토
-> 질문생성 or 인터뷰 보고서 작성
의 절차로 구성하였다.
그리고 처음 구성한 사전 준비 단계와
면접 단계를 테스트 해보았다.
각 노드에서 값을 넘겨줄 때
처음 State에서 정의한 구조대로
값을 담아서 넘길 수 있도록 해야하기 때문에
LLM을 사용한 노드에서는 프롬프트 출력값을
정의한 자료형대로 파싱하는 것이 까다로웠다.
Parser를 이용하거나 Json 형태에 맞게 파싱하였지만
형태에 조금이라도 어긋나면 제대로 저장이 안되어서
그 부분에 조금 시간을 썼었다.
2일차에는 1일차에서 개인적으로
구현한 AI 면접관 Agent를 팀별로 통합하여
각각의 절차와 기능들을 고도화 할 수 있도록 하였다.
내가 담당한 기능은
인터뷰 진행 검토 부분을 고도화하는 것이였다.
우리 조는 인터뷰 진행 검토의 조건을
한 전략에서 답변의 평가가 '상' -> 다음 전략
한 전략에서 질문을 3개 이상 -> 다음 전략
모든 전략 완료 -> 종료
외에 조건 -> 추가 질문
으로 하였다.
1일차와 비교해보면 총 분기가 3개가 생겨서
기존에 없던 다음 전략으로 가는 노드를 구성해주었다.
모든 전략 완료라는 조건도
다음 전략으로 가는 노드에서
더 이상 다음 전략이 없으면 종료하는 방식으로 구성하였다.
이 구성에 맞게 그래프를 조건 분기 엣지로
연결하였다.
우리 조의 전체적인 고도화는 다음과 같다.
1. 원래는 관련성, 구체성만 평가하였으나 평가 성능 향상을 위해
면접 회사를 입력 받아 기업 정보를 바탕으로 '인재상' 항목을 추가.
(회사 리스트를 벡터 DB로 구성하여 회사 정보를 요약하여
State['company_info']에 저장)
2. 지원자의 이력서 + 자기소개 내용으로부터 강점, 약점을 추출
3. 보다 현실에 가까운 면접 환경을 위해 1분 자기소개 내용을 받아서 질문 전략으로 추가
위 추가한 내용들을 바탕으로 다른 노드들도 Input 값을 추가해주었고
추가로 합격/불합격 기준을 '상' 등급이 전체 평가의 70% 이상일 경우로
정의하여 합격/불합격 결과도 제공할 수 있도록 하였다.
각 노드를 역할을 분담하여 진행하여서
각자 노드를 구성할 때 State들이 조금씩 달라져서
통합할 때 어려움이 있었다.
이에 대해 원활한 통합을 위해서는 프로젝트 초기에
구체적인 방향과 정의할 State를 명확히 명세하는 과정이
필요하다는 생각이 들었다.
그리고 기존과 비교했을 때 회사 정보, 지원자의 정보에 맞춘
항목들을 더 넣으니 더 구체적이고 디테일한 Output을
도출할 수 있었다.
'[KT] AIVLE School > 미니 프로젝트' 카테고리의 다른 글
미니 프로젝트 4 (Web) (6) | 2025.06.15 |
---|---|
미니프로젝트 3 (클라우드) (0) | 2025.06.06 |
미니 프로젝트 1 (0) | 2025.04.15 |