머스트릴리즈

cdc wiki
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : LLM 기반 AI 캐릭터와의 대화하는 게임

영문 : The game involves conversing with AI characters based on LLM

과제 팀명

머스트릴리즈

지도교수

황혜수 교수님

개발기간

2024년 3월 ~ 2024년 6월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 2019920057 최명재(팀장)

서울시립대학교 컴퓨터과학부 2019920038 이세영

서울시립대학교 컴퓨터과학부 2021920035 신지호

서론

개발 과제의 개요

개발 과제 요약

◇ 근래 LLM(Large Language Model)의 발전으로 챗봇의 성능이 비약적으로 향상되었다. 그에 따라 게임 캐릭터에 AI 챗봇을 도입하여 보다 생생한 반응을 이끌어내자는 움직임이 나타났고, 여러 게임 업체에서 AI 캐릭터의 개발을 발표하거나 프로토타입을 선보였다. 
◇ 하지만 사용자에게 무한한 자유를 주었을 때 발생할 수 있는 다양한 변칙 상황의 고려와 이전 대화와의 일관성 유지 등에서 어려움을 겪고 있다. 
◇ 또한 AI 캐릭터가 지난 대화를 기억하지 못하거나 게임의 세계관과 어울리지 않는 환각적인 정보를 제공하는 문제도 존재한다.
◇ 사용자의 다양한 대화 전개에 따라 맥락에 어울리지 않는 반응이나 질 낮은 대답이 돌아오게 된다면 오히려 게임의 몰입을 방해하는 악영향을 줄 수 있기에 상용화에 걸림돌이 된다. 
◇ 따라서 본 프로젝트에서는 사용자와 AI 캐릭터의 대화를 자연스럽게 유도하고, 거시적으로는 맥락을 일정하게 유지하는 시스템을 제안한다. 
◇ 이야기의 큰 흐름은 고정되게 주어지므로 메인 스토리의 진행을 벗어나지 않도록 방향성을 설정할 수 있으며, 이를 통해 답변의 변칙성과 관계없이 기획 의도대로 사용자를 이끄는 스토리를 형성할 수 있다.
◇ 이전의 스토리와 현재 세계관을 참고하여 대답을 생성하도록 설계하여 일관성을 보장한다. 이렇듯 기획된 캐릭터를 AI로 생성하는 방법을 제안하여, 스토리를 갖는 게임에서 해당 시스템을 사용할 수 있도록 한다.

개발 과제의 배경

◇ 현재 상용화된 챗 서비스에는 여러 한계점이 존재한다. 대표적인 예로, ChatGPT는 단순 챗 서비스로서 특정 성격이나 고유한 배경을 갖고 있지 않다. 따라서 사용자의 입력에 일률적인 답변을 보이며, 주로 작업을 보조하는 도구로 사용된다.
◇ 물론 특정 작품의 캐릭터를 흉내내도록 롤 플레이를 맡기거나, 커스텀 챗 서비스를 이용할 수도 있다. 하지만 이 경우에도 사용자는 여러 문제들과 접하게 된다. 커스텀을 통해 구현된 챗봇은 원작 캐릭터를 완전히 모방하지 못하고 어색한 답변을 생성하며, 이는 사용자의 흥미가 바로 떨어지게 만드는 원인이 된다.
◇ 또한 커스텀 챗봇과 대화하기 위해서 사용자는 원작의 플랫폼을 벗어나야 한다. 예를 들어, 게임이나 영화 속의 캐릭터와 대화를 하기 위해서는 잠시 화면을 끄고 웹사이트에 들어가 챗 서비스에 접속해야 한다. 이것은 사용자의 몰입을 저해하는 결과를 초래한다.
◇ 본 개발 과제는 웹사이트에 따로 접속하지 않고, 단순 롤플레잉이 아닌 사용자 맞춤화된 AI 캐릭터를 구현하여 게임의 몰입감을 더할 것이다.

개발 과제의 목표 및 내용

◇ 본 연구에서는 게임 서비스 사용자의 몰입을 도와주는 LLM 기반 AI 캐릭터 시스템을 구축하는 것이 목표이며, 기존 연구와의 차별점/독창성은 다음과 같다.
◇ 첫째, AI 캐릭터이다. 해당 시스템을 이용하는 사용자는 AI 캐릭터와 소통하며, 이 AI 캐릭터는 단순 챗봇과 달리 고유한 배경과 기억이 존재한다. 기본 성격 및 정보는 활용 목적에 맞게 교체할 수 있으며, 따라서 다양한 분야에 본 AI 캐릭터를 적용할 수 있다. 단순 챗 서비스와 달리 생생하며 자연스러운 대화를 나누는 게 가능하므로, AI 캐릭터는 사용자가 더욱 긍정적인 서비스 경험을 체험할 수 있도록 돕는다.
◇ 대화를 둘째, 기억 시스템이다. AI 캐릭터의 정보를 관리하는 데에는 기억 시스템을 사용한다. 기억 시스템은 AI 캐릭터의 기억과 기본 정보를 저장하고, 사용자의 질문과 관련 있는 기억을 가져온다. 이를 통해 AI 캐릭터는 자연스럽고 일관성 있는 대화를 생성한다. 기억 시스템은 또한 합리적인 비용으로 입체적인 AI 캐릭터를 형성하게 한다. 단순히 ChatGPT의 기존 API 서비스를 사용할 경우, 답변을 생성할 때마다 게임 세계관, 지난 줄거리 등 방대한 자료를 넘겨줘야 한다. 한꺼번에 넘겨줄 수 있는 데이터의 분량에 제한이 있을 뿐만 아니라, API 호출 시 많은 토큰 사용량으로 높은 비용이 청구된다. 또한 대화 이력(history)이 저장할 수 있는 대화의 양에도 한계가 있기 때문에, 결국 ChatGPT의 대화 이력에 저장된 정보들을 별도로 저장하고 관리하는 것이 필요하다. 따라서 이러한 경우에 기억 시스템을 도입하면 효율을 높일 수 있다. 요청시 매번 청구되는 높은 LLM API 호출 비용을 줄일 수 있고, 효과적으로 과거 대화 정보를 관리할 수 있다.
◇ 마지막으로 프롬프트 엔지니어링이다. 과거 기억 정보를 사용하여 답변을 생성하는 과정과 인간 선호도가 높은 답변을 출력하는 능력은 프롬프트 엔지니어링으로 세밀하게 조정한다. 프롬프트 엔지니어링은 LLM이 사용 목적에 맞는 답변을 생성하도록 성능을 조정하는 방법으로, 추가 파라미터 학습이 필요하지 않아 자원 소모 없이 LLM의 성능을 높일 수 있다는 장점이 있다. 본 AI 캐릭터 시스템에서는 프롬프트로 기억 시스템에서 가져온 장기 기억과 단기 기억을 참고하도록 설정하여 맥락에 맞는 답변을 생성한다. 그리고 관심사 파악, 기억 공유, 연관된 질문 등의 요소를 추가하여 자연스럽게 대화를 진행한다.
최종적으로 특정 기억과 배경을 소유한 AI 캐릭터를 구성하여, 해당 캐릭터가 기억 정보에 일관적인 답변을 생성하고 입체적인 대화가 가능함을 보일 계획이다. 또한, 캐릭터를 유연하게 변경할 수 있게 기능을 모듈화하여 용이하게 확장이 가능한 시스템 구축하는 것을 목표로 한다. 또한 구성된 AI 캐릭터를 시연하기 위해 게임 클라이언트와 연결하여, 사용자가 직접 캐릭터와의 대화를 체험하도록 구성한다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황
◇ 실제 많은 게임 회사들이 AI 캐릭터를 도입을 시도하고 있지만 무한한 자유성과 이전 대화의 일관      성 유지에서 어려움을 겪고 있다.
◇ 기억 시스템을 게임에 도입한 사례는 없다.
◇ 언어 모델의 State of art는 gpt-4모델이다. 사전학습된 모델로만 가지고 파인튜닝 없이 AI 캐릭터를 롤플레잉 등으로 구현도 가능하다.
  • 특허조사 및 특허 전략 분석
◇ 해당 시스템에 대한 내용의 특허는 따로 존재하지 않았다.
◇ 해당 내용을 바탕으로 논문을 작성하여 발표할 계획
  • 기술 로드맵
◇ RAG 기술
◇ Prompt Engineering
◇ Memory System
◇ Unity Game Engine

시장상황에 대한 분석

  • 경쟁제품 조사 비교
◇ 아직까지 인-게임에서 AI 캐릭터를 도입한 게임이 없다.
◇ Character.AI라는 웹 사이트에서는 실제 캐릭터를 AI로 성격을 유사하게 만들어 채팅을 제공한다. 그러나, 웹 사이트라는 플랫폼에서만 서비스가 가능하고, 기억을 못한다.
  • 마케팅 전략 제시
◇ 게임의 모든 것을 한 번에 개발하여 보여주지 않고, 체험판과 유사하게 데모판을 우선 제작 선공개하여 반응을 체크한다.
◇ 빠른 개발로 다른 게임이 출시되기 전에 먼저 출시한다.

개발과제의 기대효과

기술적 기대효과

◇ 본 시스템은 게임과 같은, 사용자와의 상호작용이 빈번한 프로그램에서 매우 긍정적인 경험을 제공한다. 긴 시간을 함께 보내는 게임 캐릭터와 대화가 가능하고, 그 대화의 품질과 완성도가 높다면 사용자는 게임에 깊게 몰입할 수 있기 때문이다.
◇ 또한, 캐릭터를 유연하게 변경할 수 있게 기능을 모듈화하여 용이하게 확장이 가능한 시스템 구축하는 것을 목표로 한다. 또한 구성된 AI 캐릭터를 시연하기 위해 게임 클라이언트와 연결하여, 사용자가 직접 캐릭터와의 대화를 체험하도록 구성한다.

경제적, 사회적 기대 및 파급효과

◇ AI 캐릭터가 사용하는 토큰 양이 감소되어 게임 개발사 입장에서 경제적 이득이 발생
◇ AI 캐릭터의 적용 분야는 엔터테인먼트에 한정되지 않는다. 기억 정보와 배경 설정을 사용자 맞춤으로 구성한다면 개인화된 AI 비서를 구축할 수 있으며, 교육 정보와 나이 설정을 조절한다면 저학년 학생들에게 친밀한 도우미를 제공할 수 있다. 그리고 이러한 AI 캐릭터가 디지털 교과서와 같이 서로 다른 클라이언트와도 유연하게 연결될 수 있으므로 그 활용성이 더욱 높아질 것이다.

기술개발 일정 및 추진체계

개발 일정

일정표.png

구성원 및 추진체계

◇ 최명재: 팀장 및 Unity 게임 시스템 설계 및 구현
◇ 이세영: RAG 시스템 및 Vector DB API 시스템 설계 및 구현
◇ 신지호: AI Server API, Prompt Engineering 시스템 설계 및 구현

설계

설계사양

제품의 요구사항

요구사항.png

개념설계안

개념설계안.png

◇ 그림 1은 본 프로젝트의 아키텍처도이다. 
◇ AI 서브시스템은 LLM을 추론하여 AI 캐릭터를 구현한다.
◇ RAG 서브시스템은 벡터 데이터베이스를 구동하는 서버로 AI 캐릭터가 문맥에 맞는 대답을 하기 위해 RAG 기법으로 추가 정보를 제공한다. 
◇ AI 서브시스템은 RAG 서브시스템에서  받은 추가 정보를 프롬프트에 추가하여 답변을 추론한다. 
◇ 로그 서브시스템은 RAG 서브시스템이 생성한 프롬프트와 AI 서브시스템이 생성한 답변을 로그로 저장한다.
◇ 그림 2는 AI 캐릭터 기반 게임의 유즈케이스도이다.
◇ 게임에서 게임 사용자는 게임의 기본 기능으로서 게임 속 캐릭터를 조작할 수 있다(Control character). 
◇ 사용자는 게임 스토리를 진행할 수 있다(Play story). 
◇ 스토리를 진행하면서, AI 캐릭터는 사용자에게 질문을 하는데, 이때 사용자는 3개의 정해진 대답을 고르거나, 직접 대답을 입력할 수 있다(Input text). 
◇ 사용자의 대답과 데이터베이스에 저장된 게임 속 정보를 기반으로 LLM 모델은 사용자의 대답에 대한 AI 캐릭터의 반응을 생성하여 사용자에게 게임 속 화면을 통해 보여준다(Generate script). 
◇ 게임 품질의 높이기 위해 데이터베이스에 사용자가 입력한 대사 정보를 로그 데이터로 저장하고 관리하는 기능도 포함한다(Manage game data).  

이론적 계산 및 시뮬레이션

이론계산.png

◇ 이야기 진행 중 사용자는 그림 3과 같이 AI 캐릭터로부터 정해진 질문을 받게 되고, 그에 따른 답을 선택해야 한다. 
◇ 그림 3에서 AI 캐릭터는 앞에 있는 골목길로의 진행 여부를 질문하고 있다. 이처럼 중요한 분기점에서는 그림 4과 같이 4개의 선택지가 제공된다. 
◇ 세 개의 선택지는 긍정, 부정, 중립과 같이 특정한 방향성을 가지며, 마지막 선택지는 사용자가 직접 대사를 입력할 수 있게 한다. 
◇ 사용자가 그림 5와 같이 “이 골목길에도 고양이가 있을까?’’를 직접 입력했을 경우, 시스템은 RAG 서브시스템에서 ‘고양이’와 관련된 정보를 호출한다. 
◇ RAG 서브시스템에는 스토리의 스크립트와 세계관 정보가 저장되어 있으므로, 해당 호출로 이전에 등장한 고양이 관련 에피소드 데이터가 검색된다. 
◇ 사용자의 입력에 따라 이전 스토리의 내용이 선택적으로 프롬프트에 함께 전달되고, 결과적으로 AI 캐릭터가 그림 6과 같이 자연스러운 대사를 생성한다.

상세설계 내용

전체아키텍처.png

◇ 패키지간의 결합도를 낮추기 위해 client는 메인 서버가 되는AI Server와 통신하고, Vector DB 서버는 AI Server 에서만 접근 가능하도록 설계를 하였다.

- Server API - /memory/init => 사용자 이름으로 Memory System DB를 생성하고 초기 기억 및 상황 설정을 한다. 다음과 같은 흐름으로 요청을 처리하게 된다. 1. Client에게 init 요청을 받는다. 2. AI Sever는 DB Server에게 사용자 DB 생성과 초기 기억 저장을 요청한다. 3. DB Server는 User 와 User_buffer 데이터베이스를 생성하고 초기 기억을 추가한다. 이때 User, User_buffer 총 2개의 DB를 생성한 이유는 이벤트 상황에서 발생한 기억들은 바로 직전의 상황들이기 때문에 맥락을 고려해서 답변을 생성하기 위해 무조건 참고해야 한다고 판단하여, 이벤트 상황에서의 기억들은 buffer에 넣어 이벤트 상황의 기억인지 아닌지 구분하기 위하여 버퍼를 따로 생성했다.

- /memory/save => 게임을 진행할 때 대사 혹은 상황을 기억 시스템에 저장한다. 다음과 같은 과정으로 요청을 처리하게 된다. 1. Client에게 save 요청을 받는다. 2. AI Sever는 DB 서버에게 기억 저장을 요청한다. 3. DB Server는 기억 데이터를 User 혹은 User_buffer 데이터베이스에 저장한다.

게임을 진행할 때 모든 대사, 상황을 AI 캐릭터의 입장으로 된 문장을 DB에 저장하게 된다. 예를 들어 AI 캐릭터가 “너의 취미는 뭐야?” 라는 대사를 했을 때 AI 캐릭터의 입장에선 위 문장은 나는 “너의 취미는 뭐야?” 라고 말했다. 이기 때문에 이러한 형식으로 DB에 저장하게 된다. 

표.png

AI 캐릭터의 기억 데이터는 다음과 같은 형태로 저장되는데 userId와Observation은 각각 사용자 이름과 기억의 내용을 나타낸다. isEventScene는 위에서 설명했듯이 이벤트 상황인지 아닌지에 따라 어느 DB에 들어갈지 결정되기 때문에 설정하였고, reasonIds는 이후 reflect 과정에서 기존의 기억들을 근거해 구체적인 기억으로 재구성하게 되는데, 그 때 근거가 되는 문장을 Retrieve 과정에서 사용하기 위해서 설정하게 되었다.

- /response/generate => 사용자의 대답에 대한 AI 캐릭터의 답변을 생성한다. 다음과 같은 과정으로 요청을 처리한다. 1. Client에게 generate 요청을 받는다. 2. AI Sever는 질문 생성에 필요한 buffer 기억을 모두 가져오고, 또한 메인 기억 중 관련된 기억 30개를 가지고 온다. 3. 가져온 정보와 프롬프트 엔지니어링을 이용해 적절한 답변을 생성한다. 4. Client에게 생성된 답변을 반환한다. 본 시스템에서 핵심이 되는 AI 캐릭터의 답변을 생성하는 과정이다. 먼저 답변 요청을 받으면 이벤트 상황의 기억을 가지고 있는 buffer에서 모든 기억을 가지고 오고, 메인 기억 시스템에서 Priority가 높은 기억 30개를 가지고 온다. 본 시스템에서 이 Priority를 다음 세가지 요소의 합으로 정의를 하였다. ● Priority = importance + similarity + recency ● Importance => 해당 기억이 얼마나 중요한지를 0~1의 값으로 설정한다. ● Similarity => 사용자의 답변과 기억 데이터가 얼마나 유사한지 0~1의 값으로 설정한다. ● Recency => 기억 데이터가 얼마나 최근 기억인지 0~1의 값으로 설정한다. Importance의 경우 값을 설정하기에 너무 주관적이기 때문에 LLM 모델에게 점수 측정을 맡겼고, Similarity 같은 경우ChromaDB에서 제공해주는 query 함수가 자동적으로 Cosine 유사도를 측정하여 반환하기 때문에 이 값을 이용하였고, Recency의 경우 id의 값을 근거로 0~1의 값으로 정규화 과정을 사용하여 설정했다. 결과적으로 위 기준에 근거해서 Priority가 높은 기억 데이터 30개를 가지고 오게 된다. 가지고 온 데이터는 recency에 의해 다시 한번 정렬되어 AI Server로 데이터를 전송하게 된다. AI Server는 전달받은 데이터들과 프롬프트 엔지니어링을 활용하여 적절한 AI 캐릭터의 답변을 생성한다. 프롬프트 엔지니어링에 관한 설명은 이후에 설명한다.

- /memory/reflect => 이벤트 상황이 끝나면 reflect를 진행한다. 다음과 같은 과정으로 요청을 처리하게 된다. 1. Client에게 reflect 요청을 받는다. 2. AI Sever는 buffer 기억을 가져와 해당 기억의 중요도인 importance를 설정한다. 3. LLM 모델을 이용해 insights를 도출하고, 근거가 되는 문장을 reasonIds에 기록한다. 4. buffer 메모리에 insights로 도출된 문장을 추가한다. 5. 모든 buffer 기억을 메인 기억 시스템으로 옮긴다. 본 시스템에서는 이벤트 상황이 끝날 때 마다 reflect과정을 거치도록 설계하였다. 앞서 설명했듯이 importance를 LLM이 측정하기 위하여 모든 buffer의 기억을 가지고 와 LLM 모델에게 importance 측정을 요구한다. 그리고 buffer의 기억들을 기반으로 기억을 재구성하여 insights를 도출한다. 이 때 근거가 되는 문장은 성능을 높이기 위해 이후 Retrieve 과정에서 근거가 되는 문장을 같이 불러오기 위하여 기억 데이터에 reasonIds라는 근거를 저장하는 속성을 설정하였다. 이후 새롭게 도출된 insights 문장을 기억 데이터에 추가하고 이벤트 상황이 끝났기 때문에 모든buffer 기억을 메인 기억 시스템으로 옮기는 과정을 거치게 된다.

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

최종.png

◇ 사용자는 게임을 실행하면 정해진 스토리 스크립트를 진행한다.
◇ 도중에 위와 같이 입력 화면에 표시된다.
◇ 사용자는 위와 같이 적당한 답변을 입력한다.
◇ 이후 그에 따른 자연스러운 답변이 생성된다.

관련사업비 내역서

◇ ChatGPT API 요금 : 350,000
◇ Notion 사용료 : 100,000

완료작품의 평가

가. 평가 기준

◇ 연구 목표와 방법론이 명확하게 제시되었는가?
◇ 사용자가 AI 캐릭터와의 대화를 통해 얼마나 만족스러운 경험을 얻는가?
◇ 기존의 게임 대화 시스템과 비교하여 얼마나 창의적이고 혁신적인 접근법이 사용되었는가?
◇ 얼마나 다양한 분야에 적용될 수 있는가?
◇ 시스템을 구축하는 데에 얼마나 많은 비용이 소모되는가?

나. 평가 내용

◇ 연구 목표는 AI 캐릭터와의 대화를 위한 LLM 활용이다. 방법론은 명확히 제시되었으며, RAG 기법이 채택되었다.
◇ 사용자 인터페이스(UI) 설계와 관련된 내용이 포함되어 있다. 또한, 고성능 LLM의 등장으로 보다 높은 질의 대화가 가능해졌다.
◇ RAG를 활용한 접근법은 창의적이며, LLM의 최신 연구를 적용했다.
◇ 게임 분야뿐만 아니라, 교육 및 심리 분야에도 진출할 가능성이 있다. 인격이 존재하는 AI 캐릭터를 잘 활용한다면 친밀한 도우미를 마련할 수 있다. 
◇ 현재 널리 사용되고 있는 ChatGPT의 경우, API 호출 비용이 굉장히 적으며, 현재 시스템에서 채택한 RAG 기법을 사용하면 API로 넘어가는 문서의 양이 줄어들어 더욱 적은 비용으로 사용할 수 있다.

향후계획

◇ 게임을 일정 데모만큼 만들어 빠른 출시
◇ Retreive Score의 더 적절한 조합을 찾는다
◇ AI 캐릭터의 표정변화와 같은 디테일한 요소도 반영하여 몰입을 증대화
◇ 사용자의 비정상적인 입력에도 강건하게 대응할 수 있는 장치 마련