Skyrim을 같이 플레이하는 저지연 AI 동료 Varkos 만들기
I built a low-latency AI companion that plays Skyrim with me
TL;DR Highlight
LLM 대신 소형 분류기로 행동을 고르자 음성 입력 후 500ms 안에 개가 답한다
Who Should Read
음성 에이전트의 응답 지연이 커서 실시간 상호작용 제품을 만들기 어려운 에이전트 개발자
Core Mechanics
- 기존 AI NPC는 말만 잘하고 행동은 약했다
- 기존 프레임워크는 캐릭터 대사엔 강하지만 월드에서 행동하는 능력이 약하고 지연이 길다고 한다.
- 복잡한 지시를 처리하는 데도 약하다고 한다.
- 행동 선택은 LLM 대신 ALE가 맡았다
- ALE(Action Latent Encoder)는 임베딩(문장을 벡터로 바꾼 값), 소형 분류기, 규칙, 전통 ML을 섞은 하이브리드다.
- 문장에서 부정, 명령, 대명사, 순서를 찾아 "검을 주워서 가져와"를 연결된 두 행동 슬롯으로 나눈다.
- 게임의 world state(JSON)도 입력으로 받아 요청과 맞춰 본다.
- ALE는 빠르고 큰 LLM에 가깝게 동작했다
- M4 MacBook에서 약 2-20ms에 돈다.
- 저자의 제한적 내부 평가에서 행동 선택과 계획 분해가 대형 LLM에 놀라울 만큼 가까웠다고 한다.
- 저자는 이걸 진지한 벤치마크로 보지 않는다.
- 지연 예산은 구간별로 쪼갰다
- 음성→텍스트 약 40-80ms, 음성 생성 약 20-60ms, 행동 분석 약 20ms다.
- 응답 생성과 grounding(게임 상태와 맞는지 검증)에 300-600ms가 든다.
- 스트리밍과 prefill(미리 입력 처리)로 일부 경우 발화 종료 후 500ms 안에 답한다.
Community Reactions
- ALE의 구체적 설계가 궁금하다는 의견
- 스카이림에서 행동 유연성을 주려면 어떤 데이터 파이프라인이 필요했는지 궁금하다는 댓글이 있었다.
- 여러 명령을 임베딩 전에 문장 단위로 분해하는지, 프로토타입과 분류가 게임에서 가능한 행동에 맞춰 수작업인지 생성인지 묻는 질문도 있었다.
- GPT-Live가 ALE를 대체할 수 있다는 의견
- API로 적정 가격에 나오면 음성 지연 문제가 풀리고 ALE가 필요 없을 수 있다는 의견이 있었다.
- 말하는 동안 도구를 비동기로 호출할 수 있어 게임에 이상적이라고 했다.
- 현재는 ChatGPT 기능일 뿐 개발자가 쓸 수 없다고 했다.
- LLM 특유의 어색함이 캐릭터에 묻힌다는 경험
- "좀 모자라지만 사랑스러운 동료" 설정 덕에 명령을 놓쳐도 사용자의 짜증이 게임의 일부처럼 느껴진다는 댓글이 있었다.
- 기존 NPC 대화 모드와 비교한 의견
- Mantella로 모든 NPC와 LLM 대화를 해 봤을 때 지연이 커서 즐기기 어려웠고 이 접근이 훨씬 빨라 보인다는 댓글이 있었다.
How to Apply
- 명령 분류 프롬프트로 LLM 의존도 측정하기
- 오늘 우리 에이전트의 사용자 발화 20개를 뽑아 명령, 질문, 잡담, 확인 요청, 복합 요청으로 분류시키고 정답과 비교하라.
- 아래 codeExample 프롬프트를 쓰고 소형 분류기로 대체할 수 있는 비율을 확인하라.
- 행동 선택과 응답 생성 분리하기
- 도구 호출 결정은 임베딩, 규칙, 소형 분류기로 먼저 처리하라.
- LLM은 선택된 행동을 받아 말투와 응답만 만들게 하라.
- 구간별 지연 예산 측정하기
- STT, 행동 선택, 응답 생성, TTS 각각의 ms를 로그로 남겨라.
- 가장 긴 구간부터 스트리밍이나 prefill로 줄여라.
- 응답 전에 세계 상태로 검증하기
- 생성된 답이 현재 상태 JSON의 아이템·대상과 맞는지 확인하라.
- 맞지 않으면 캐시된 응답으로 대체하거나 시간이 남을 때 재생성하라.
Try It
# Claude나 ChatGPT에 그대로 붙여넣기 (논문 방법의 간이 버전: ALE식 행동 분해 흉내)
너는 게임 동료의 행동 분석기다. 아래 월드 상태 JSON과 플레이어 발화를 보고 JSON으로만 답하라.
월드 상태:
{{월드상태_JSON}}
플레이어 발화:
{{발화}}
출력 형식:
{"turn_type": "command|question|chat|clarification|complex", "actions": [{"verb": "...", "target_id": "월드 상태에 있는 id 또는 null", "depends_on": null}], "negation": false, "needs_clarification": false, "clarification_question": null}
규칙: 동의어(pick up, grab, fetch)는 같은 verb로 통일한다. 대명사는 직전 대화에서 찾는다. 월드 상태에 없는 대상은 지어내지 말고 needs_clarification을 true로 한다.
이어서 해 볼 것: 발화 20개를 돌려 정답과 비교하고, 틀린 유형을 규칙이나 분류기로 옮길 수 있는지 보라.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓