9 min read

MetLife - Hackathon, Grand Prize

MetLife - Hackathon, Grand Prize

MetLife_Hack4Job - 고객 맞춤형 AI 보험 도우미 서비스

GitHub - MetLife-Hackathon/MetLife-Hackathon: 2024년 3월 23 ~ 2024년 3월 24일까지 MetLife 사에서 주최한 Hackathon 대상 수상작
2024년 3월 23 ~ 2024년 3월 24일까지 MetLife 사에서 주최한 Hackathon 대상 수상작 - GitHub - MetLife-Hackathon/MetLife-Hackathon: 2024년 3월 23 ~ 2024년 3월 24일까지 MetLife 사에서 주최한 Hackathon 대상 수상작
이름역할GitHub이메일
이태겸FrontEnd Dev이태겸
박태완FrontEnd Dev박태완swimingtw@gmail.com
조일민FrontEnd Dev조일민choim426@gmail.com
최승원BackEnd Dev최승원wonny921@gmail.com
김예슬BackEnd Dev김예슬
이은지팀장 & BackEnd Dev이은지dhbdg11@gmail.com
이현수AI API Dev이현수
박무현AI API Dev박무현pjhg410@gmail.com
박도현AI API Dev박도현zerosugarcoke@naver.com

랜딩 페이지 - 챗봇 및 템플릿 제공
보험 질문 단계
AI 챗봇 보험 추천
다른 질문 및 답변
A screenshot of a computer

Description automatically generated
대화 내용 기반 상담사 요청
A screenshot of a computer

Description automatically generated
상담신청 고객현황

※보안 이슈로 인한 간단한 정리 및 회고

프로젝트 개요

메트라이프의 300종의 보험 상품 및 약관 데이터를 활용하여 사용자에게 맞춤형 응답을 제공하는 서비스입니다. 주요 기능은 다음과 같습니다:

  • 개인의 필요에 맞는 보험 추천
  • 특정 보험의 장점 안내
  • 보험 가입 조건 및 가능 여부 확인
  • 고객의 정보와 대화 기록을 바탕으로 보험 상담사에게 효율적으로 연결

AI 기반 플랫폼은 최적의 응답 템플릿을 제공하여 상담사와의 연결뿐만 아니라 상담의 질을 향상시킵니다.

주요 기술

  1. Elastic Search Vector Database 구축: 보험 약관의 저장 및 검색을 위해 구축되었습니다.
  2. Elastic Search Vector 유사도 검색: Elastic Search를 이용한 벡터 유사도 검색
  3. ChatGPT OCR Text 추출: Chat GPT OCR 모델을 통한 PDF 파일 내 텍스트 추출
  4. Chat GPT Embedding: Chat GPT Embedding 모델을 활용한 문서 및 쿼리 임베딩
  5. Chat GPT4-1106-preview: Chat GPT API 호출로 사용자 맞춤형 검색 답변 생성

기술 스택

  • FrontEnd:
    • React (UI library)
    • TypeScript (Programming language)
    • UI Components: MUI (Material-UI)
    • State Management: Recoil Design Framework: Tailwind CSS
  • AI & BackEnd :
    • JDK 11: ElasticSearch,Spring Boot 환경 통일
    • ElasticSearch 8.7.0: 보험 약관 데이터 저장 및 검색
    • Spring boot 3.2.4 / 2.7.0, Spring Data JPA, Spring Security 3.1.5: API 제공 서버 개발
    • (GPT)text-embedding-3-small,text-embedding-3-large 모델: 문서 및 쿼리 임베딩
    • GPT-4-1106-preview: 사용자 질의에 대한 답변 생성
    • Python FastAPI: pdf 파일 실시간 임베딩 및 ElasticSearch 색인 서버 개발

해커톤을 진행하기 전에 팀은 사전에 구성된 것이 아니라 임의로 편성되었고, 모두 처음 만나는 사이였다. 그 과정에서 서로의 기술 스택을 공유하고 프로젝트를 기획하는 일이 쉽지만은 않았다. 나는 주로 파이썬을 사용해왔고, 팀원 중 한 명은 프론트엔드, 또 다른 한 명은 안드로이드 개발자였으며, 나머지 대부분은 자바 기반 백엔드 개발자였다.

기술 스택의 차이로 인해 나는 새로운 도전을 즐기고 빠르게 학습할 수 있다는 자신감으로, 다른 자바 개발자들이 프론트엔드로 전환하기보다는 내가 그 역할을 맡는 것이 협업에 유리하다고 판단했다. 그래서 프론트엔드로 넘어가, 대회전 MUI를 사용해보며 컴포넌트를 익히고 React 초기 설정을 해두며 대회를 준비했었다.

AI의 평가 비중이 높은 점을 고려해 우리 팀은 AI 파트도 나누어 맡기로 했다. AI에 관심이 있었지만, 팀 내 AI 경험이 풍부한 팀원이 그 부분을 리딩하고, 나머지 백엔드 팀원들이 그쪽으로 넘어가 팀당 3명씩 나눠 해커톤에 임하기로 결정했다. 또한, 해커톤에 앞서 Azure 기반의 CI/CD 인프라를 미리 구축하고, 파트별로 사용할 기술 스택을 논의하여 뼈대 코드를 마련했다.

대회 전에는 AI 관련 기사와 OpenAI 기술, 데이터셋 등을 미리 조사하면서 오픈된 보험사 데이터와 프롬프트 엔지니어링, 모델 리스트 등을 탐색했다. 이러한 사전 작업 덕분에 열정이 고취되었고, 좋은 결과를 얻을 수 있을 것 같은 확신이 생겼다.

대회 당일에는 주제를 정하는 데에 많은 시간이 소요되었다. 팀원들 모두 다양한 독창적인 아이디어를 제시하고, 비판적인 시각으로 검토하며 의견을 조율하느라 오후의 대부분을 사용했다. 비록 시간이 걸렸지만, 기획 단계가 프로젝트의 핵심 중 하나라는 점에서 이는 값진 시간이었다고 생각한다.

이후 우리는 설정한 목표를 향해 나아가, 대회 마감 직전까지 각자의 역할을 충실히 수행하며 목표했던 기능들을 성공적으로 구현해냈다. 발표 당시에는 핵심 기능의 구현에 실패했지만, 대회 동안 심사위원들이 인터뷰하듯 진행 상황을 지속적으로 관찰하고 궁금한 사항들을 질문했기 때문에, 우리의 협업 능력과 프로젝트 추진 방식이 긍정적으로 평가되었는지 결국 대상을 받을 수 있었다.

나는 프론트엔드 파트에서 React 기반의 채팅 대화 주제 가이드라인 토글 구현, 상담사 매칭 고객 리스트 확인 테이블 컴포넌트 개발, 에러 핸들링 및 예외 처리를 맡아 작업했다.

팀의 주요 이슈 중 하나는 Elastic Search에 저장된 보험사 데이터의 쿼리 유사도를 비교할 때 발생했다. 상위 스코어를 가진 문서를 가져오려고 했으나, 항상 연관성이 낮은 문서들이 포함되었다. 예를 들어, 쿼리에 "보험"이라는 단어가 있으면, 문서 내에 "보험"이라는 단어가 많이 포함된 문서가 관련도가 낮아도 결과로 나타나는 경우가 있었다. 이를 해결하기 위해 연관도가 낮은 키워드를 따로 매핑하여 검색에 사용하지 않는 로직을 도입한 결과, 성능을 크게 개선할 수 있었다.

또 다른 문제는 OpenAI API 호출 시, 응답 시간이 1분 이상 지연되면 연결이 자동으로 끊기는 점이었다. GPT-4 모델을 사용할 때, 많은 토큰 수와 아웃풋 대용량 텍스트 처리가 시간이 오래 걸리는 원인이었다. 이를 해결하기 위해 타임아웃 재시도 횟수를 늘리고, 벡터 DB 내 데이터가 없을 경우 대비해 스코어 값을 조정하며 파인튜닝을 시도해 성능을 향상시켰다.

이번 해커톤을 통해 낯선 사람들과 하나의 목표를 위해 협력하며 발생하는 다양한 문제와 어려움을 해결해 나가는 과정에서 큰 보람을 느꼈다. 또한, 스스로도 성장할 수 있는 소중한 기회였다. AI에 대한 흥미가 더욱 커졌으며, 이번 경험을 통해 AI 기술의 가능성과 지식을 쌓아 언젠가 직접 팀을 이끌어 멋진 서비스를 만들어 보고 싶다는 생각이 깊게 자리 잡았다.

감사합니다, 우리 10팀! 다들 고생하셨어요ㅎ :)