항해 플러스 6주차 후기 - GPT 기반 멀티모달 챗봇

안녕하세요! 이번 항해플러스 AI 코스에서는 LangChain과 Streamlit을 활용하여 다양한 형태의 챗봇을 개발하는 실습을 진행했습니다. 이번 글에서는 제가 배운 내용과 이를 통해 구현한 멀티모달 챗봇 개발 과정, 그리고 과제를 진행하며 얻은 교훈을 공유하려고 합니다.


LangChain과 Streamlit 개요

최근 다양한 형태의 LLM을 활용한 챗봇 서비스가 많아지면서 LLM의 다양한 인터페이스, Prompt 디자인, 외부 데이터 연동 등 복잡한 문제들이 발생하고 있습니다. 이를 해결해주는 라이브러리로 LangChain이 소개되었고, 간단한 UI 구현을 위한 Streamlit을 활용하여 빠르게 챗봇을 구현할 수 있었습니다.


LangChain을 활용한 LLM 서비스

LangChain은 LLM 간 인터페이스를 추상화하여 하나의 코드로 다양한 LLM을 활용할 수 있도록 해줍니다. 또한 Prompt Template 기능으로 Prompt 디자인을 간소화하고, 외부 데이터를 쉽게 활용할 수 있는 인덱스(Index) 기능도 제공합니다. 이는 개발 과정에서 상당한 편의성을 제공하여 반복 작업을 크게 줄일 수 있었습니다.


Streamlit의 강점

Streamlit은 Python으로만 프론트엔드를 구현할 수 있는 강력한 도구입니다. 별도의 웹 프레임워크나 프론트엔드 언어 없이 Python 코드만으로 빠르게 UI를 구성할 수 있으며, 다양한 위젯(widget)을 활용하여 인터랙티브한 서비스를 구현할 수 있었습니다. 또한, 코드를 수정하고 저장할 때마다 자동으로 웹 페이지가 갱신되어 실시간으로 결과를 확인할 수 있는 점이 매우 유용했습니다.


실습 및 과제 진행 과정


기본 챗봇 구현

첫 번째 실습에서는 Streamlit을 이용해 간단한 에코(Echo) 챗봇을 구현했습니다. 사용자의 메시지를 입력받고 그대로 반환하는 단순한 형태였지만, Streamlit의 session_state를 이용해 메시지 기록을 관리하는 과정이 매우 흥미로웠습니다. Streamlit의 특징인 코드 재실행 메커니즘을 이해하는 데 큰 도움이 되었습니다.


GPT-4 API를 활용한 챗봇

다음 단계로는 GPT-4o-mini 모델을 사용하여 보다 지능적인 챗봇을 개발했습니다. LangChain을 이용해 간단히 GPT 모델을 호출할 수 있었고, 메시지 히스토리를 포함한 Prompt 구성이 LLM 응답의 품질에 얼마나 중요한지 체감할 수 있었습니다. 모델이 제공하는 답변의 품질이 높고 정확하여 실제 서비스로서의 가능성을 엿볼 수 있었습니다.


HuggingFace의 Gemma 모델 활용

Gemma-2B-it 모델을 활용한 챗봇 구현을 통해 HuggingFace 플랫폼에서 제공하는 다양한 모델을 활용하는 방법을 익혔습니다. 특히 LangChain의 HuggingFacePipeline과 ChatHuggingFace를 통해 HuggingFace의 모델을 Streamlit과 손쉽게 연동할 수 있었습니다. 이 과정에서 HuggingFace가 제공하는 방대한 모델과 데이터셋의 유용성을 다시 한 번 느낄 수 있었습니다.


멀티모달 챗봇 개발


이미지 입력 챗봇

이어서 이미지 입력을 받을 수 있는 챗봇을 개발했습니다. 사용자가 업로드한 이미지를 GPT 모델에 전달하여 패션 스타일을 추천하는 기능을 구현했습니다. OpenAI의 GPT-4 Vision 모델이 이미지를 어떻게 처리하는지 직접 경험할 수 있었고, base64 인코딩을 통해 이미지 데이터를 GPT에 전송하는 방법도 익힐 수 있었습니다.


PDF를 활용한 RAG 챗봇

PDF 파일의 내용을 기반으로 한 챗봇을 구현하면서 RAG(Retrieval-Augmented Generation)의 실질적인 활용 사례를 경험했습니다. PDF를 텍스트로 변환하고 ChromaDB를 통해 벡터로 변환하여 문서 내용을 효율적으로 검색하고 GPT 모델을 통해 질의응답을 진행하는 과정이 매우 유익했습니다. 이를 통해 RAG의 강력한 검색 성능과 GPT의 언어 이해 능력이 결합된 효과를 실질적으로 체험할 수 있었습니다.


실습 과제: 다중 이미지 입력 챗봇

이번 실습 과제에서는 챗봇이 여러 장의 이미지를 입력받아 사용자 질문에 따라 GPT 모델이 적절히 응답하는 챗봇을 개발했습니다.


구현한 기능

  • Streamlit의 st.file_uploader를 활용해 여러 장의 이미지를 업로드할 수 있게 했습니다.

  • 사용자로부터 질문을 입력받고, GPT 모델에게 이미지와 질문을 함께 전달하여 다중 질의응답이 가능한 챗봇을 구현했습니다.

  • RAG 방식을 참고하여 사용자가 여러 번 질문을 입력하더라도 최초 업로드한 이미지들을 지속적으로 참조할 수 있도록 session_state를 활용했습니다.


실제 사용 예시

과제를 수행하며, 강아지와 고양이 사진 각 1장을 업로드한 뒤 다음과 같은 질문을 했습니다.


  1. 질문: 주어진 두 사진의 공통점이 뭐야?

GPT는 “둘 다 귀여운 애완동물로 사람들에게 많은 사랑을 받으며 털이 부드럽고 표정이 풍부한 공통점이 있습니다.”라는 답변을 제공했습니다.


2. 질문: 주어진 두 사진의 차이점이 뭐야?

GPT는 “강아지는 사교적이고 활동적인 모습을 보이며 사람과의 교류를 더 좋아하는 반면, 고양이는 독립적이고 차분한 특성이 강한 편입니다.”라는 정확한 비교를 했습니다.

이를 통해 LLM이 시각 정보를 잘 이해하고 있음을 확인할 수 있었습니다.


얻은 교훈과 마무리

이번 실습을 통해 다음과 같은 중요한 교훈을 얻었습니다:

  • Prompt의 명확성: Prompt를 명확하고 구체적으로 작성할수록 LLM의 응답이 훨씬 개선된다는 점을 명확히 이해했습니다.

  • 멀티모달 데이터 처리: 이미지를 다루는 과정에서 데이터 포맷과 인코딩 방법의 중요성을 깊이 깨달았습니다.

  • 효율적 관리: Streamlit의 session_state를 통해 데이터를 효율적으로 관리하고 활용하는 기술이 매우 중요함을 알게 되었습니다.

  • 실시간 피드백: Streamlit의 빠른 코드 반영과 UI 갱신으로 개발 생산성을 크게 높일 수 있었습니다.


이번 경험을 통해 AI 개발자로서 다양한 데이터 유형과 복잡한 요구사항을 처리하는 능력을 향상시킬 수 있었습니다. 앞으로도 다양한 도전을 통해 실력을 꾸준히 키워나갈 계획입니다.

긴 글 끝까지 읽어주셔서 감사합니다.


항해 플러스 — 추천인 코드: CF7LUQ


#항해99 #항해플러스AI후기 #AI개발자 #LLM

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2025년 5월 4일 오후 1:46

댓글 0

    함께 읽은 게시물

    웹 앱이 만들어지던 시기에도, 모바일 앱이 창궐(?)하는 시기에도 웹의 종말론 그런게 항상 나왔었다. 앱은 서로를 연결하지 않으니까.


    하지만 웹은 그 존재 의의를 계속 진화시키고 발전시켜가며 중요한 역할을 계속 해 왔다.


    ... 더 보기

    📰 OpenAI가 ChatGPT의 커넥터 기능을 업데이트하면서 MCP 지원을 추가했네요.

    ... 더 보기

    Next.js 까보기: "쓸 줄 아는 개발자"에서 "알고 쓰는 개발자로" 강의를

    ... 더 보기

    Next.js 까보기: "쓸 줄 아는 개발자"에서 "알고 쓰는 개발자"로

    www.productengineer.info

    Next.js 까보기: "쓸 줄 아는 개발자"에서 "알고 쓰는 개발자"로

    혹시 Cursor 채팅만 사용하시나요? Agent 쓰는 방법!

    Cursor와 함께라면, 더이상 에디터는 단순한 입력 도구가 아닌

    ... 더 보기

    진짜 노동의 생산성이 높아질수록 가짜 노동이 늘어나는 이유

    “왜 우리는 일은 잘했는데 더 바빠졌을까?”

    ... 더 보기

    조회 214