저지연 응답을 위한 하드웨어 분산 및 오디오 파이프라인 최적화
Varkos 시스템은 플레이어의 발화 종료 후 500ms 이내에 반응하는 저지연 응답 속도를 구현하여 실시간 상호작용 경험을 제공한다. 개발자는 Windows 기반의 게임 실행 환경과 M4 MacBook의 연산 자원을 물리적으로 분리하여 시스템 부하를 최적화하고 연산 효율을 확보했다. 게임 엔진은 Windows에서 구동하고, 오디오 처리와 AI 브레인 기능은 M4 MacBook에서 전담하는 분산 구조를 채택했다. 음성-텍스트 변환(STT) 엔진으로는 커스텀 커널 최적화를 거친 Qwen3-ASR 1.7b 모델을 활용했다. 이 모델은 커스텀 하네스를 통해 오디오를 롤링 파셜(rolling partials) 방식으로 처리함으로써 40-80ms의 매우 짧은 처리 속도를 달성했다. 음성 생성 단계에서는 PocketTTS-Raven을 활용해 20-30ms의 오디오 생성 속도를 확보하여 전체 파이프라인의 지연 시간을 최소화했다. 턴 구분(turn-taking)을 위해 Turnpipe와 Silero 같은 최적화된 VAD(Voice Activity Detection) 방식을 적용해 발화의 시작과 끝을 정밀하게 구분했다. 텍스트의 어휘 분석을 통해 플레이어가 문장 중간에 생각을 멈춘 것인지 혹은 발화를 완전히 마친 것인지를 판단하여, AI가 플레이어의 말을 끊지 않고 적절한 시점에 개입하는 인터럽트 및 바지인(barge-in) 기능을 구현했다.
ALE 구조를 통한 다단계 계획 수립과 실시간 세계 영향력 확보
ALE(Action Latent Encoder)라는 하이브리드 인코더는 텍스트 명령을 게임 내 실제 액션과 세계 상태(World JSON)에 매핑하여 NPC의 실질적인 세계 영향력(World Agency)을 확보했다. Varkos는 단일 행동을 넘어선 다단계 계획을 수립하고 실행하는 구조를 통해 기존 LLM NPC의 한계인 낮은 실행 신뢰도를 극복했다. 예를 들어 플레이어가 "화살 신호를 보면 포션을 가져오라"고 명령하면, AI는 즉시 행동하지 않고 미래의 트리거인 화살 충격 이벤트를 등록한 뒤 해당 이벤트가 발생했을 때만 계획을 재개하는 조건부 지시 수행 능력을 보여준다. 게임 내 아이템 검색 시에는 접지된 세계 상태(grounded world state)를 탐색해 실제 존재하는 아이템을 식별하며, 잘못된 아이템(예: 일반 검)을 가져왔을 때 플레이어의 피드백을 받아 다시 탐색하는 상호작용을 수행한다. "숨바꼭질"과 같은 복잡한 놀이는 단일 API 호출이 아니라 이동, 대기, 모니터링, 완료 조건이 결합된 지속적 목표(persistent goal)로 관리되어 물리적 결과가 다음 계획 단계로 이어지게 한다. "모든 아이템을 가져오라"는 명령은 실제 참조 대상에 대한 경계 컬렉션 계획(bounded collection plan)으로 변환되어, 마법 같은 단일 액션이 아닌 개별 수집과 전달 과정을 거치는 구체적인 행동 체계를 구축했다. 이러한 구조는 LLM의 추상적 답변이 아닌, 게임 내 물리적 상태 변화를 모니터링하고 계획을 수정하거나 중단하는 실행 중심의 에이전트 능력을 구현했다.
클라우드 LLM 기반의 성격 진화와 범용 게임 컴패니언 확장성
클라우드 LLM은 실시간 액션 경로와 분리된 영역에서 플레이어와의 상호작용 증거를 수집해 캐릭터의 성격을 점진적으로 진화시키는 역할을 수행한다. Varkos는 초기 설정된 '오만한 악마견'의 특성에서 시작해, 공유된 경험을 통해 플레이어에게 애착을 느끼고 장난감을 가져오는 가축화된 성격으로 변화하는 과정을 거친다. 시스템은 명시적 특성뿐만 아니라 정서적 항상성(emotional homeostasis)을 변경하여 짜증, 공포, 애정, 장난기 등의 반응 강도를 조절하며, 이는 AI가 전투 상황에서 싸울지 후퇴할지를 결정하는 전략적 판단에 영향을 미친다. 진화된 성격은 AI의 어휘와 코드 일부를 덮어쓰며, 모든 변경 사항은 버전 관리되어 필요시 이전 상태로 복구가 가능하다. Varkos는 특정 게임에 종속되지 않는 범용 컴패니언으로 설계되어 게임 종료 시 '보이드 모드(void mode)'로 진입하며, 이 상태에서의 반응 역시 진화된 성격에 따라 다르게 나타난다. 이를 통해 Skyrim에서 드래곤과 싸우던 AI가 Microsoft Flight Simulator의 조종석 옆으로 이동해도 동일한 정체성과 기억을 유지하며 새로운 세계의 규칙을 학습하는 확장성을 보여준다. 실시간 에이전트의 실행력은 단순한 LLM 호출이 아니라 소형 분류기와 규칙 기반의 ALE 구조가 결정하는 핵심 기준이 된다. ALE는 게임별로 개별 버전이 필요하므로 완전한 플러그 앤 플레이 방식은 아니라는 제약이 존재한다. 관련 기술의 구현체인 PocketTTS-Raven의 공식 코드는 https://github.com/pkalogiros/pocket-tts-raven 에서 확인할 수 있다.
사용법
> 공식 저장소 기준 설치·실행 방법이다.
# 1. build the native runtime
cmake -B .build -DCMAKE_BUILD_TYPE=Release && cmake --build .build -j
# 2. get models (one-time: downloads the original Kyutai ONNX bundle,
# ~165 MB hash-verified, then applies the graph rewrites locally)
./tools/prepare_models.sh
# 3. generate speech with the bundled Alba sample voice
./pocket-tts "The road ahead is more dangerous than it looks." example.wav out.wav
# 4. clone a voice — cloning IS step 3: the voice argument is any wav/mp3
cp ~/my-recording.wav voices/me.wav # 6-15s of one person speaking
./pocket-tts "Now I speak with your voice." me.wav cloned.wav# one-time: install the web model set into webdemo/models/ (+ brotli precompress)
./tools/prepare_models.sh --web
python3 webdemo/serve.py
# → http://localhost:8093 (this machine)
# → https://<your-ip>:8094 (other devices; accept the cert once)



