Skip to content

DDOZMI/Unity-LLM-VisualNovel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unity 2D로 제작한 LLM 소설 생성 게임

제작동기
간단하게 만들어 보았던 비주얼 노벨의 상호작용을 확장시켜 제작을 해 보고자 하였다.
Renpy로 분기점이 있는 비선형적 스토리게임을 만드는 것이 목적이었던 것과 다르게 완전하게 모든 선택을 유저에게 제공하고, 세계관 속에서 자유롭게 탐험함을 목적으로 한다.
2019년 AI Dengeon을 시작으로 본격적인 노벨메이커 형태의 LLM 텍스트 게임 서비스가 나타나기 시작했고, 최근에는 LLM 성능 향상에 힘입어 많은 곳에서 이를 제공하고 있다.
해당 서비스 모델의 시작부터 사용하며 팔로우해온 만큼 직접 비슷한 형태를 구현해보고자 하였다.

제작과정

  1. 프로토타입 제작 Langchain을 사용하여 챗봇을 구성하고 Streamlit으로 간단하게 웹 앱을 만들어 프로젝트가 어떤 형태로 제공될 것인지 시험하였다.
  2. 챗봇 구성 Unity로 2D UI를 구성하여 간단한 인터페이스와 함께 채팅을 주고받을 수 있는 배경을 만들었고, Langchain 챗봇은 flask를 물려 생성한 응답을 json형태로 받을 수 있는 로컬 서버를 만들어 Unity에서 이를 받아오게 만들었다. Langchain 라이브러리와 기본 설정만 변경하면 어떤 모델도 사용할 수 있다.
  3. 기본 기능 구현 기존에 작성한 내용이 기록으로 남고, 이를 다음 응답 생성에 반영시키기 위한 history 리스트를 구성하였고, 이를 초기화시킬 수 있는 기능 또한 구현하였다. 또, 입력과 응답 history를 json파일로 저장하여 게임 시작 시 혹은 도중에 불러올 수 있게 하였다.
  4. UI 구성 입력과 응답을 보기좋게 띄울 수 있는 prefab를 만들어 정해진 양식 안에 입력과 응답이 출력될 수 있게 하였다. 전체적인 UI 콘셉은 다이어리 꾸미기 느낌으로 구성하여 소설을 써 내려가는 아기자기한 느낌을 주고자 했다.
  5. 캐릭터 표정 변화 구현 게임의 주인공이 되어 플레이하는 콘셉트인 만큼 인터렉티브성을 부각시키기 위해 사용자의 입력을 받아 감성분류를 적용하고, 도출된 값에 따라 캐릭터 일러스트를 변경하여 화면 좌측에 위치한 주인공 캐릭터의 표정을 변화시킬 수 있게 하였다.
    (모델: KcBERT / https://huggingface.co/beomi/kcbert-base)
  6. RAG 적용 캐릭터와 장소, 배경등을 담은 데이터베이스를 작성하고 이를 응답 과정에서 참조하게 하여 세계관에 부합하는 자연스러운 응답을 유도했다.
    (모델: Multilingual-MiniLM / https://huggingface.co/microsoft/Multilingual-MiniLM-L12-H384)

구현한 기술적 내용 정리

  • 로컬 LLM api 서버 구성 (flask)
  • 감성분석 반환 api 서버 구성 (flask)
  • RAG를 사용하여 세계관 일관성을 유지하는 답변 유도
  • Unity와 LLM api 연결 및 인터페이스 구성

제작후기
프로젝트 특성상 내용의 퀄리티보다 다양한 기능 구현을 보여주는 것이 맞다고 생각은 했지만 로컬에서 돌리는 모델을 사용하니 하한선이라고 생각하는 퀄리티를 왔다갔다 할 만큼 제약이 매우 많았다.
수백빌리언짜리 모델을 사용해도 gpt나 클로드같은 상용모델을 쫒아가기 벅찬데 그러한 모델을 돌리는 것은 불가능했고, 사용하고 있는 4090의 vram을 거의 다 채우는 용량의 모델을 사용해도 낮은 수준밖에 되지 않는 것이 아쉬웠다.
고성능의 모델을 돌릴 수 없으니 챗봇에 사용되는 모델 이외에도 감성분류, rag 임베딩 모델 등 전부 성능이 떨어질 수밖에 없고 이에 맞추기 위해 프롬프트는 더욱 간소화되고 rag 데이터베이스에도 많은 내용을 기록할 수 없었다.
결국 이는 응답의 품질 저하로 이어진다. 응답의 품질을 향상시키기 위해 CoT(Chain-of-Thought)프롬프트를 적용해 보았는데, 높아진 토큰 사용량으로 응답에 지나치게 오랜 시간이 걸리거나 오히려 낮은 응답 품질을 보였다.
기술적 요소 외로는 UI의 방향성을 처음부터 시판 상용게임들과 같은 형태의 배경-캐릭터-대화창의 형태로 구성했으면 조금 더 게임적인 형태로 제작할 수 있었고, 배경 역시 comfyui를 연결해 생성형으로 구성할 수 있었을 텐데 그렇지 않았던 점이 아쉬웠다.

플레이 영상
https://youtu.be/oZygMB6xawM?si=igATRPkDOvCeM-GB

플레이 스크린샷
Image Image

About

유니티로 보여주는 LLM 응용 비주얼노벨 프로젝트

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published