Streamlit + LangChain + LangGrpah로 구현했다.
랭체인 한국어 튜토리얼 (링크)의 도움을 많이 받았다.
Chainlit에서 Streamlit으로 갈아탄 이유는 예시나 도큐먼트 자료를 찾기 힘들기 때문이다.
그리고 로그인부터 시작해서 여러가지를 건들게 되는데, 이렇게 복잡하게 할 바에는 차라리 Open Web UI에 백엔드로 구현해서 연결하는게 낫지 않나 싶은 생각이 들었다. 그러려면 차라리 복잡한건 Open Web UI로, 간편하게 구현하고 사용할 개인 용도는 Streamlit으로 하는게 낫다는 생각이 들었다.
비슷한 프로젝트를 진행하는 사람들을 위해서 도움이 될것 같아서 전반적인 프로젝트의 개요와 이를 어떻게 해결했는지 적어본다.
개인 음악 추천 챗봇 구현
1. 배경:
- 알고리즘에 의한 음악 추천 외에 잘 알려지지 않으나 좋은 음악을 찾고 싶다.
- 아무래도 남들이 만들어 놓은 플레이리스트는 유명한 가수들이나 노래들 위주다. 인디 등을 찾기는 쉽지 않다.
- 평소에 음악을 들을 때 케이팝, 팝, 라틴팝, 재즈, 블루스, 락, 메탈, 클래식 등등 폭 넓게 듣는다. 어떻게 보면 중구난방이다.
- 추천 서비스를 공부한 사람 입장에서도 클러스터링을 하거나 할 때 이 사람을 어떻게 할지 고민될거 같다. 유튜브 뮤직을 보면 이를 해당 장르 내에서 추천하는 식으로 고정해버린 것 같지만. 무슨 이야기인지 구체적으로 이야기하자면, 내가 케이팝을 듣고 있으면 해당 노래와 해당 장르와 유사한 노래만 추천하고, 내가 이번에는 재즈를 듣고 있으면 해당 노래와 유사한 장르의 노래만 추천한다.
2. 문제 설정:
- LLM을 활용해서 직접 곡이나 가수, 앨범을 추천하는 챗봇을 만든다.
추천 candidates를 LLM으로 직접 추천하거나 다른 추천 모델 사용 - 추천할 노래, 앨범, 가수의 데이터 필요
- 내가 좋아하는 노래, 앨범, 가수, 장르의 데이터 수집 필요
3. 해결책 리서치:
- LLM을 활용한 챗봇 구현.
- LLM으로 candidates를 직접 추천
- LLM이 아닌 다른 모델로 candidates 추천 후 LLM으로 rerank 혹은 설명 작성
- 신곡은 반영하지 못하기 때문에 검색 기능 포함.
- 나의 기존 선호도를 반영하기 위한 RAG 구현 필요
- 추천할 노래, 앨범, 가수의 데이터는 Spotify의 API나 Kaggle, Huggingface, Github 등에서 데이터 수집
- 내가 좋아하는 노래, 앨범, 가수, 장르의 데이터 수집
4. 실행 및 결과 현황:
- Streamlit + LangGraph + Tavily Search로 검색 기능을 포함한 챗봇 프로토타입 구현
- LLM 모델을 이용한 candidates 추천
- LLM 모델 선택 기능 구현
- 이전 채팅 확인 구현
- LLM으로 대화를 요약해서 제목으로 설정
5. 향후 과제:
- 내가 좋아하는 노래, 앨범, 가수, 장르 데이터 수집
- 나의 선호도를 활용한 RAG 구현
- 인디나 주류가 아닌 노래를 찾을 때 spotity를 활용해서 인기도나 팔로워를 활용하는 방법 고려
- Long-tail과 관련된 키워드를 찾다 보면 무언가 유의미한 정보가 있지 않을까? 찾아봐야겠다.
- Diversity를 성능 지표로 추가
챗봇 화면
메인 화면
모델 선택
이전 채팅 확인
채팅 실행 영상
1. 멀티턴 채팅 실행
2. 새로운 채팅을 누르면 이전의 채팅이 자동으로 저장됨
3. 이전 채팅의 제목은 LLM이 요약해서 생성
멀티턴 대화가 생성되는걸 확인했으니 이제 코드를 좀 정리하고, 내 취향 음악 데이터를 먼저 수집해야겠다.
References:
https://github.com/teddylee777/langchain-kr/tree/main/19-Streamlit
https://docs.streamlit.io/develop/api-reference/layout/st.sidebar
https://docs.streamlit.io/develop/api-reference/widgets/st.selectbox
'AI Codes > LangChain & MCP & Agent' 카테고리의 다른 글
Chainlit 리서치 및 튜토리얼 적용 결과 (2) | 2025.05.14 |
---|---|
LLM으로 테이블과 차트 생성 (2) | 2025.05.08 |
금융 PDF에서 Figure와 Table 추출하기 (0) | 2025.05.02 |
부서와 직급을 고려한 RAG 그리고 평가 (1) | 2025.05.02 |
MCP 관련 문서와 영상 정리 (0) | 2025.04.28 |