[Project Review] - KB국민은행 제5회 Future Finance A.I. Challenge 예선작

2023년 8월, 2학년 여름방학이 끝나갈 즈음 컴퓨터공학을 전공하는 동아리 선배가 대회에 함께 참가하자고 제안하여 진행하게 된 프로젝트입니다. 당시에는 OpenAI에서 ChatGPT 서비스를 시작한 지 얼마 되지 않았던 터라, 대규모 언어 모델이나 프롬프트 엔지니어링 같은 개념이 상대적으로 생소하였습니다. (참고로 저는 식품자원경제학을 전공하고 있습니다.) 그야말로 맨땅에 헤딩하는 방식으로 프로젝트를 진행하였습니다.

지금 돌아보면, AI 파트를 2명이 맡고 프론트 1명, 백엔드 1명이 함께했다면 예선을 통과할 수 있었을 것 같지만, 당시에는 개강이 얼마 남지 않아 팀원을 구하기가 어려웠습니다. 프로젝트 막바지에 프론트엔드 개발 가능하신 분이 한 분 합류해주셔서 간신히 완성할 수 있었습니다. 결과는 예선 탈락이었지만, 많은 것을 배우는 소중한 경험이었습니다.

프로젝트 소개

시연영상

📎 GitHub 저장소 바로가기

📄 공모전 요강 보기

해당 프로젝트는 국민은행의 AI 금융 전문가 역할을 수행하는 서비스인 KB FinExpert를 개발하는 것이 목표였습니다. 이 서비스는 양질의 금융 콘텐츠가 존재함에도 불구하고 고객에게 접근성이 떨어지는 문제를 해결하고자 기획되었습니다. 디지털 시대의 도래로 인해 문해력이 저하되고, 정보에 대한 피로도가 증가하는 사회적 현상을 반영하였습니다.

KB 국민은행의 자산관리 전문가 칼럼 중 세무 정보, 부동산 정보, 재테크 정보를 선별하여 임베딩하고 이를 Vector DataBase에 저장하였습니다. Text-embedding-ada-002 모델과 Chroma DB를 사용하였고, 각기 다른 프롬프트를 가진 LLM이 해당 DB를 참조하여 추천 질문 생성기, 챗봇 시스템, 마인드맵 생성기의 역할을 수행하도록 하였습니다. 많은 토큰을 처리하기 위해 GPT-3.5-turbo-16k 모델을 사용하였습니다.

이러한 AI 기능을 통해 사용자가 질문을 추천받고, 질문에 대한 답변을 받고, 주요 내용을 마인드맵 형태로 요약해보는 사용자 경험을 설계하였습니다.

기획 부문

최초 기획을 여러 차례 수정하며 완성된 네 번째 버전

기획이 가장 중요하다는 사실을 자각했을 때는 이미 프로젝트가 많이 진행된 이후였습니다. 사실 Retrieval-Augmented Generation 방식을 사용한 챗봇은 대회의 특성상 대부분의 팀이 도입했을 만한 구조였습니다. 이를 보완하고자 마인드맵 생성기와 추천 질문 시스템을 도입하였으나, 사용자 입장에서 충분히 매력적인 기능은 아니었던 것 같습니다.

준비 시간이 짧았던 것은 사실이지만, 기획 단계에 더 많은 시간을 투자했더라면 어땠을까 하는 아쉬움이 남습니다. 물론, 기획한 내용을 실제로 구현하는 것 또한 쉬운 일은 아니었습니다.

기술 부문

마인드맵 생성 AI

LLM의 응답은 문자열이기 때문에, 이를 실행시키기 위해 exec() 함수를 사용하는 방식으로 처리하였습니다. 출력 형식을 리스트로 강제하기 위해 프롬프트를 조정하였습니다. 물론 exec 함수는 보안상 매우 위험하여 절대 사용해서는 안 됩니다. 더 나은 방법이 분명 있었을 것입니다.

이와 같은 방식으로 출력 형식을 강제한다고 하더라도, 항상 동일한 형식으로 응답이 생성되는 것은 아닙니다. 여러 번 실험해 본 결과, 낮은 확률이지만 모델이 다른 형식으로 응답하는 경우도 확인하였습니다.

Retrieval-Augmented Generation

문서 검색 시 참고하는 문서의 수인 k 값을 더 유연하게 조정할 수 있도록 했으면 좋았을 것이라 생각합니다. 예를 들어, 페이지를 주제별로 세분화한 후 최적의 k 값을 강화학습으로 탐색하거나, 문서 조회 수를 기준으로 신뢰도를 반영하는 방식 등을 도입할 수 있었을 것입니다.

Prompt

“이런 문장을 프롬프트에 넣으면 성능이 좋아지더라”는 논문들을 찾아 읽고 참고하여 프롬프트에 반영해보았습니다. 다만 이런 식으로 여러 요소를 짬뽕해서 넣는 방식이 과연 적절한지에 대한 의문은 남았습니다. 관련하여 더 깊이 조사했어야 한다고 생각합니다.

또한 LLM이 시간 순서를 잘 이해하지 못하는 문제가 있었습니다. 예를 들어, 프롬프트에 현재 날짜를 명시했음에도 불구하고, 질문에 대해 2년 전 데이터를 기반으로 응답하는 등의 사례가 있었습니다. 이 역시 개선이 필요한 부분이었으며, 원인에 대해 좀 더 면밀히 분석했어야 했습니다.