NPC 간의 대화에 초점을 맞춘 로컬 LLM NPC 백엔드를 구축했습니다
요약
클라우드 없이 로컬에서 작동하는 음성 기반 LLM NPC 백엔드를 오픈 소스로 공개했습니다. NPC 간의 자율적인 대화와 기억 능력을 통해 게임의 몰입감을 높이며, Unity와 연동 가능한 WebSocket 기반 구조를 갖추고 있습니다.
핵심 포인트
- 클라우드 없는 완전한 로컬 Speech-to-Speech 구현
- NPC 간의 자율 대화 및 문맥 유지 기능 제공
- Llama 3.2 등을 활용한 400~600ms 수준의 낮은 지연 시간
- Unity 및 Unreal 엔진과 WebSocket으로 연동 가능
- GPU 부하 관리를 위한 공유 생성 잠금(Shared Generation Lock) 적용
작년에 진행했던 연구 프로젝트를 오픈 소스로 방금 공개했습니다.
이것은 LLM NPC를 위한 완전한 로컬 음성 대 음성 (speech-to-speech) 백엔드입니다. 즉, 음성 인식 (speech-to-text), 로컬 LLM, 음성 합성 (text-to-speech) 과정에서 클라우드가 전혀 필요하지 않습니다. 주요 초점은 단순히 플레이어에게 대답하는 것이 아니라 NPC들이 서로 대화하는 것이었으며, 저의 연구는 플레이어가 이러한 NPC 간의 대화를 목격할 때 어떤 경험을 하는지, 그리고 그것이 몰입감 (immersion)에 어떤 영향을 미치는지 살펴보았습니다.
NPC들은 서로 대화할 수 있고, 자신이 말한 내용을 기억하며, 나중에 플레이어가 자신에게 말을 걸 때 그 문맥 (context)을 사용할 수 있습니다. 또한 이야기를 약간 유도하기 위해 NPC에게 숨겨진 행동 노트를 주입할 수 있는 백그라운드 게임 매니저 (Game Manager) AI도 있습니다.
지연 시간 (Latency)은 주요 기술적 과제 중 하나였습니다. VR을 위한 Llama 3.2 3B와 4070 Ti에서의 7B 모델을 사용하여 첫 오디오 도달 시간 (Time to First Audio, TTFA)을 약 400~600ms 정도로 구현했는데, 이는 NPC가 생각하기를 기다리는 것이 아니라 실제 대화처럼 느껴지기 시작하는 지점입니다. 또한 데모에서 볼 수 있듯이 Unity 씬과 함께 실행됩니다.
여러 명의 NPC를 위해 GPU에 과부하가 걸리지 않도록 공유 생성 잠금 (shared generation lock)을 사용했습니다. 각 NPC는 자신만의 LLM 문맥/성격 (context/personality) 및 TTS 설정을 갖지만, 한 번에 하나만 생성합니다. 이들은 차례를 지키며, 캐릭터 간의 전환은 기본적으로 즉각적이어서 자연스럽게 느껴집니다. 한계점은 두 명의 NPC가 정확히 같은 순간에 말로 겹칠 수는 없다는 것입니다.
WebSocket 기반이므로 Unity, Unreal 또는 WebSocket을 통해 통신할 수 있는 모든 것과 함께 작동할 것입니다. Unity 스크립트도 포함했습니다.
많은 분이 이것을 시도해보고, 이를 기반으로 발전시키거나 피드백을 주셨으면 좋겠습니다. 여러분의 게임에 맞게 조정하려면, 주요 작업은 3계층 NPC 프롬프트 (3-layer NPC prompt) 설정과 게임 매니저 프롬프트를 튜닝하는 것입니다. 약간의 작업이 필요하지만 AI의 도움을 받으면 충분히 가능하며, 나중에는 많은 부분이 자동화될 수 있다고 생각합니다.
데모 영상, Unity 기반 탐정 게임:
https://www.youtube.com/watch?v=Z-WZ-Prl8bI
저장소 (Repo):
https://github.com/lschiweck/LLM-NPC-Agents
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기