상세 컨텐츠

본문 제목

[Streamer Assist Bot] 1. LLM 모델 구현

Not Use/🎥 Streamer Assist Bot

by 글담이 2024. 5. 4. 22:58

본문

반응형

 

관련 프로젝트

포스팅이 작성된 5월 4일 기준, 아직 진행 중인 프로젝트입니다. 
프로젝트 경과에 따라 포스팅 내용이 변경될 수 있습니다. 

위의 [관련 프로젝트] 링크는 프로젝트 종료 시까지 비공개 포스팅으로 둘 계획입니다. 
프로젝트 종료 후 공개 포스팅으로 전환하겠습니다. 

 

해당 프로젝트의 코어 기능은 시청자에게 할 답변을 생성하는 Chatbot 기능입니다. 

 

본 포스팅에서는 해당 기능 구현을 위해 어떤 프레임워크를 사용하였으며, 어떤 방식으로 구현했는지 설명해보도록 하겠습니다.

 

 

1. Core LLM 모듈 선정 - Langchain

 

LLM 모델 구현을 위한 프레임워크로는 'Langchain'을 사용했습니다. 

 

그 이유는 저를 제외한 나머지 인원들이 아직 LLM을 잘 모르는 초보들이기 때문이었는데요.

 

Prompt Template이나 RAG 등 주요 기능들이 사용하기 쉽게 모듈화 되어 있어 사용하기 편한 Langchain이 우리에게 적합하다 판단하였습니다. 

 

또한 LLM 모델로는 'GPT3.5-Turbo' 모델을 사용하였습니다. 

 

 

 


 

2. RAG 기능 구현

 

우리 LLM 모델의 역할은 시청자들의 질문과 유사한 스트리머 정보를 찾아 이를 기반으로 적절한 답변을 생성하는 것입니다.

 

이에 적합한 기술이 Retrieval Augmented Generation(RAG) 기능인데요. 

 

Langchain에서 RetrievalQA라는 RAG 모듈을 제공하기는 합니다만, 해당 기능은 내장된 프롬프트의 길이가 너무 길어 답변 생성에 시간이 오래 소요된다는 문제점이 있습니다. 

 

이는 실시간으로 답변을 생성해야하는 우리의 모델에는 꽤나 크리티컬한 문제죠. 

 

그래서 본 프로젝트에서는 해당 모듈은 사용하지 않기로 했습니다. 

 

 

 

대신 저희는 similarity search를 통해 유사한 정보를 검색 한 후, 이를 프롬프트에 삽입하는 방식으로 RAG를 진하기로 했습니다. 

 

저희가 실험 과정에서 사용했던 프롬프트 템플릿을 잠깐 보여드릴게요. 

 

# System Prompt 예시 

"""
너는 시청자에게 친절하게 답변하는 스트리머야. 알겠지? 
아래의 [Information]을 바탕으로 시청자들에게 적절한 답변을 생성해. 

[Information]
{info}
"""

 

이제 시청자들의 입력 쿼리와 유사한 질문을 찾습니다. 

 

예를 들어 시청자가 "침착맨님, 어디에 살아요?"라는 질문을 했다고 해볼게요. 

 

그럼 DB에 저장된 정보와 시청자 질문 간의 벡터 유사도를 계산합니다. 

 

저희는 코사인 유사도를 이용해, 벡터 간의 유사도를 계산했습니다. (코사인 유사도는 벡터 간 방향에만 영향을 받으므로 크기의 영향을 받는 유클리디언 거리보다 더 정확한 유사도를 측정할 수 있을것이라 판단했습니다.) 

 

- 저장된 질문 1: 침착맨은 1983년 12월 5일입니다 -> 유사도 0.13
- 저장된 질문 2: 침착맨의 여동생은 '통닭천사'입니다 -> 유사도 0.28
- 저장된 질문 3: 침착맨은 강남구 개포동에 삽니다 -> 유사도 0.96
...
- 저장된 질문 N: 침착맨의 원래 직업은 만화가입니다 -> 유사도 0.33

 

질문 3이 가장 유사한 질문으로 선정되었습니다. 

 

그러면 System prompt template는 아래와 같이 채워지게 됩니다. 

 

# RAG용 System Prompt  

"""
너는 시청자에게 친절하게 답변하는 스트리머야. 알겠지? 
아래의 [Information]을 바탕으로 시청자들에게 적절한 답변을 생성해. 

[Information]
침착맨은 강남구 개포동에 삽니다
"""

 

위의 프롬프트를 LLM 모델에 입력으로 넣으면 우리가 원하는대로 스트리머의 페르소나를 반영한 답변을 생성하게 됩니다. 

 

 

 


 

 

3. 적용 결과 

 

아래는 RAG 적용 전 답변과 RAG 적용 후 답변을 비교한 결과입니다. 

 

관련 정보

Q. 유퀴즈에 출연하고 아쉬웠던 점은 없었어요?
A. 내 방송이 아니다보니 템포를 막 올려야하잖아요. 내 템포대로 쳐질수 없고 텐션을 막 올려야하는 점이 좀 아쉬웠어요. 

 

RAG 적용 전
RAG 적용 후

 

RAG 적용전에도 답변을 잘하기는 하지만, 실제 침착맨님이 답변했던 내용은 아닙니다. 

 

LLM 모델의 가장 고질적인 문제점인 Hallucination 현상이 발생한 것인데요. 

 

반면, RAG를 적용한 모델은 실제 답변과 유사한 답을 생성하는 것을 볼 수 있습니다. 

 

 

 

 

반응형

관련글 더보기