-
LangChain을 활용한 LLM 애플리케이션 개발 프로젝트 회고프로그래밍/Project 2024. 9. 1. 01:14
프로젝트 주제
우리 팀은 "항공편 정보 특화 QA Engine" 이라는 주제로 진행하기로 했다.
여러가지 주제가 나왔지만 외부에서 비교적 정확한 정보를 가져올 수 있으면서, QA Engine 특성 상 좀 더 명확한 답을 낼 수 있는 주제로 선정하는 것이 LLM을 통해 구현하기에 더 적합하다고 생각하기도 했고, 최근 해외 여행을 가는 경우가 많지만 ChatGPT, Gemini 등과 같은 서비스에서는 실시간 정보가 중요한 항공편과 같은 질문이 불가능했기에 메리트가 있다고 판단했다.
구현하고자 했던 기능
- QA Engine에서 사용할 핵심 정보인 항공편 정보를 가져오는 기능
- 불러온 항공편 정보를 RDB에 저장하는 기능
- LLM을 이용해 RDB에서 원하는 정보를 불러올 쿼리 생성
- RDB에서 불러온 데이터를 LLM에 Retrieve
- 사용자의 질문에 대한 답변 생성 및 출력
- 채팅 형태로 사용 가능한 UI
구현하고자 했던 기능을 정리하자면 위 5가지 정도이다.
나는 그 중 항공편 정보를 가져오는 기능과 채팅 형태의 UI 두가지를 메인으로 LLM을 조정하는 부분을 보조로 진행했다.
항공편 정보를 가져오는 기능은 '공공데이터포털'에서 제공되는
'한국공항공사_실시간 항공운항 현황 정보 상세 조회 서비스'와
'인천국제공항공사_여객편 운항현황(다국어)'
이 두가지 API를 사용해 구현했다.
두가지 모두 JSON 형태로 항공편에 대한 정보가 반환되기 때문에 두 API에서 공통적으로 제공되는 정보를 추리고 RDB에 삽입할 때 용이한 형태로 구조화해 반환하도록 했다.
채팅 형태의 UI는 Fast API를 활용해 완성된 프로그램을 API화 한 뒤 Streamlit을 이용해 페이지를 구축하고 Fast API와 연동해 동작하도록 했다.프로젝트 결과물 프로젝트 진행 중 있었던 이슈
우선 첫번째로 공공데이터포털에서 제공되는 API가 제대로 동작하지 않아 데이터를 불러올 수 없는 문제가 발생했다.
이 부분은 비슷한 정보를 제공하는 API가 많았기에 비교적 최근에 업데이트된 API로 교체하여 해결했다.
추후에 비슷한 문제가 발생할 수 있어서 문의 글을 남겨두었더니 한국공항공사로부터 인증키 등록 과정에서 문제가 있어서 해당 API 사용이 안되는것 같다는 답변이 돌아왔는데 그럼 다른 API도 사용이 불가능해야하는거 아닌가 하는 의문이 든다.
두번째는 LLM으로 MySQL 쿼리문을 생성하는 것이 제대로 되지 않는 문제가 있었다.
처음에는 사용자의 질문만 LLM에 전달하면서 쿼리를 생성하도록 했는데 쿼리문을 이상하게 생성하는 경우가 종종 발생했다.
이 부분을 해결하기 위해 프롬프트를 상세하게 작성해 지속적으로 조정했다.
그 결과 최종 결과물에서는 쿼리문을 생성하는데 있어서 높은 정확도를 보였다.
세번째로 LLM이 특정 질문에 대한 답변을 생성할 때 토큰 크기가 너무 커서 오류가 발생했다.
지속적으로 테스트를 해보면서 뭐가 문제인지 확인을 해보던 도중 RDB에서 반환되는게 문제인건 아닌가 하는 생각이 들어 확인해보니 상당히 많은 양의 중복 데이터가 있는 것이 확인되었다.
RDB를 구축하던 당시에 이미 삽입된 데이터는 중복으로 삽입되지 않도록 설정하지 않고 구축한 것이 문제 발생의 원인이었고, 이미 저장된 데이터 중 중복 데이터를 모두 삭제한 뒤, 중복 데이터가 저장되지 않도록 설정해서 해결했다.
이 이후에는 해당 오류는 발생하지 않았다.
느낀점
LLM의 성능들이 생각보다 많이 차이난다고 느꼈다.
이번 프로젝트를 진행하면서 LLM을 사용하기 위한 크레딧이 제공된 것이 Upstage의 Solar 뿐이었기에 우리 팀은 Solar를 사용했는데 다른 LLM에 비해서 SQL 쿼리문을 생성하거나 Retrieve된 데이터를 활용해서 답변을 생성하는 부분에 있어서 이상한 결과물을 내는 경우가 잦았다.
이 부분을 해결하려고 노력하는 과정에서 최근 프롬프트 조정을 전문적으로 하는 사람들이 괜히 있는게 아니구나 라는 것을 알게 됐다.
그만큼 프롬프트를 어떻게 작성하느냐에 따라서 LLM의 출력물의 퀄리티 차이가 상당했다.
또, 처음에는 프롬프트나 DB, API 등을 조정하는 과정에 있어서 생각보다 시간이 많이 들어 웹페이지와 같은 UI는 배제하고 CLI로 동작하는 것을 고려하고 진행했는데, 계속해서 진행하다보니 CLI로만 사용하기에는 가독성과 같은 부분이 확실히 부족하다고 느껴서 급하게 Fast API와 Streamlit으로 웹페이지를 제작해서 적용했다.
웹페이지를 제작하면서 상당히 간단하게 구축이 가능해서 이 부분은 추후 다른 프로젝트에도 적용이 가능할 것 같아 조금 더 공부해보면 좋을 것 같다고 느꼈다.'프로그래밍 > Project' 카테고리의 다른 글
[RecSys Project] 고객 맞춤 상품 추천 시스템 만들기 (0) 2025.01.11 [NLP Project] 일상 속 대화 적절하게 요약하기 (0) 2025.01.08 [CV Project] 육안으로 분간하기도 힘든 문서 딥러닝으로 분류하기 (0) 2024.11.12 ML Ops 음악 추천 시스템 프로젝트 회고 (4) 2024.10.16 아파트 실거래가 예측 경진대회 회고 (0) 2024.09.23