ABOUT ME

plutodev 님의 블로그 입니다.

Today
Yesterday
Total
  • [기업 프로젝트] RAG 시스템: 모델 선택부터 배포까지
    프로그래밍/Project 2025. 2. 17. 23:02

    부트캠프의 마지막 프로젝트로 국내 최대 버그바운티 플랫폼 기업인 '파인더갭(FindtheGap)'의 과제를 받아 진행했다.

    기업 측에서 프로젝트 주제 노출을 원하지 않아, 실험한 기술과 모델 위주로 정리하고자 한다.

    T5 모델 파인튜닝

     

    처음에는 T5 모델 파인튜닝을 시도했지만, 결과적으로 성공적이지 못했다.

    사용한 모델은 FLAN-T5-BASEKE-T5-BASE 두 가지였다.

    • FLAN-T5few-shot 학습만으로도 특정 도메인에 적응할 수 있다는 장점이 있어 선택했다.
    • KE-T5는 한국어 기반 모델로, 영어 위주의 FLAN-T5와 성능을 비교하기 위해 활용했다.

    그러나 예상대로 FLAN-T5는 한국어 생성이 제대로 되지 않았고, 깨진 글자가 출력되거나 영어 위주로 결과가 생성되었다.
    KE-T5는 처음 시도했을 때 FLAN-T5와 마찬가지로 글자가 깨지는 문제가 발생했지만, 토크나이저 설정을 수정한 후 한국어 출력을 할 수 있었다. 그러나 같은 단어를 반복 생성하는 문제가 발생했다.

    결국, 서버 자원이 부족한 상황에서 여러 방면으로 성능을 개선하려 했지만 큰 성과를 내지 못해 T5 모델 파인튜닝은 적절하지 않다고 판단하고, 다른 접근 방식을 선택했다.

     

    RAG 시스템 LLM 모델 선정

     

    이 프로젝트에서 가장 많은 모델을 테스트해 본 것 같다.
    다양한 LLM을 비교하며, 기업이 원하는 서식에 맞춰 출력을 고정할 수 있는 모델을 찾는 것이 목표였다.

    • LG EXAONE
    • MS Phi4
    • Upstage SOLAR
    • DeepSeek-R1
    • Mistral Small 3

    프로젝트 진행 중 DeepSeek-R1과 Mistral Small 3 모델이 새롭게 공개되어 이를 포함해 실험을 진행했다.
    특히 DeepSeek-R1적은 리소스로도 좋은 성능을 낼 수 있다는 점에서 주목받아 테스트해봤지만,
    한국어 도메인에 대한 출력 품질이 일정하지 않아 제외했다.

    Upstage SOLAR 역시 나머지 모델들에 비해서 원하는 결과를 얻기 어려워 제외했다.


    결국, LG EXAONE, MS Phi4, Mistral Small 3 모델을 대상으로 본격적인 프롬프트 엔지니어링을 시도했다.

    • LG EXAONE과 MS Phi4는 프롬프트 내에서 서식을 고정하려 해도 일관성이 부족했다.
    • Mistral Small 3출력 서식이 고정된 상태로 유지되었으며, 세부적인 프롬프트 설정도 잘 반영되었다.

    결국 Mistral Small 3 (24B) 모델을 최종 선택하고 이후 작업을 진행했다.

     

    RAG 시스템의 Retrieve 개선

     

    기업 측에서 모델이 활용할 수 있는 문서를 정리한 데이터를 제공했다.
    이에 따라, RAG 시스템의 Retrieve(검색) 단계에서 이 데이터를 적극 활용하는 방향으로 설계했다.

    그러나 실험 과정에서, 모델이 제공된 문서를 참고할 때에도 잘못된 정보를 포함하는 경우가 발생하는 것이 확인되었다.

    이를 해결하기 위해서 아래 방법을 적용했다.

    1. 기업이 매칭한 문서를 무조건 활용하도록 설정
    2. 추가적으로, 유사한 내용을 포함한 문서를 함께 검색하도록 설계

    위 방법을 적용한 후 결과물의 정확성과 품질이 크게 향상되었다.

    혹시 ‘유사한 문서 검색’만 사용해도 해결되지 않을까? 라는 가설을 세우고 실험해 보았지만,
    다시 잘못된 정보를 참조하는 문제가 발생했다.

    결과적으로, "매칭된 문서 + 유사 문서 검색"을 조합하는 것이 가장 안정적인 방식이라는 결론을 내렸다.

     

    Retrieve 개선으로 프롬프트 엔지니어링으로 만들어둔 출력 구조를 유지하면서도, 추가 문서를 정확하게 참고할 수 있도록 개선하는 데 성공해 RAG 시스템 개발은 마무리했다.

     

    최종 배포 및 마무리

     

    이후에는 FastAPI를 이용해 RAG 시스템을 API화 하고 Streamlit을 이용해 시연용 데모페이지를 제작했다.

     

    마지막으로 기업 측에서 제공한 AWS 서버로 개발한 시스템을 옮긴 후, 실행 여부를 확인한 후에 API 명세서와 해당 시스템을 사용할 수 있는 AWS 인스턴스 사양에 대해서 정리해서 최종 제출하는 것으로 끝이 났다.

     

    결과를 발표할 때 기업 담당자분께서 "원하는 부분이 최대한 반영이 된 만족스러운 수준인거 같다"고 해주셔서 안도했다.

     

    느낀 점

     

    이번 프로젝트를 진행하면서 사실 팀원의 수가 적어서 실험해보지 못한 것들이 더 많았다.

    사이버보안 관련 도메인으로 학습된 모델들도 많았고, T5 모델들도 사실 좀 더 시도해 볼 수 있는 방법들이 있지 않았을까 하는 생각이 든다.

    물론 해당 시스템을 사용할 기업에서는 최대한 비용을 줄이길 원했고, 모델이 학습할만한 데이터도 제대로 갖춰져 있지 않은 상황이라서 최종적으로는 LLM을 사용한 RAG 시스템으로 올 수 밖에 없었을 것이다.

    부트캠프 첫 프로젝트로 진행했던 것이 로컬 모델이 아닌 API를 활용한 RAG 시스템이었는데, 그때는 사용하지 못했던 Vector DB 같은 것들을 제대로 적용한 로켈 모델을 구축해 볼 수 있는 기회여서 좋았다.

     

    이번 시스템을 구축하면서 API로 사용하는 GPT 같은 모델 말고 로컬에서 실행하는 모델들도 성능이 생각보다 많이 좋아졌다는 걸 알게 됐고, 내가 사용할 시스템을 직접 만들어서 사용할 수 있겠다는 생각에 어떤 걸 만들 수 있을까라는 고민이 하나 더 늘어났다.

    예를 들면, 향수의 노트들을 정리한 데이터를 가지고 상황에 맞는 향수를 추천해 준다거나, 아이템이나 여러 캐릭터들의 조합이 필요한 게임의 경우에는 조합을 추천해 주는 것도 괜찮을 거 같다는 생각을 했다.

    어떤 데이터들로 구축할 수 있을지 계속 고민해 봐야겠다.

Designed by Tistory.