AI NPC · 캐릭터가 생각할 때 달라지는 것

AI NPC: AI 기반 논플레이어 캐릭터의 작동 원리와 만드는 법

나만의 AI NPC 만들기

인공지능 NPC는 말하고, 기억하고, 반응할 수 있습니다. AI NPC가 어떻게 작동하는지 배운 뒤, 한 문장으로 하나를 만들어 걸어 다닐 수 있는 3D 세계에 넣어 보세요.

✦게임
만들기: AI NPC

AI NPC는 대사와 의도가 실행 중에 언어 모델에 의해 생성되는 논플레이어 캐릭터입니다. 반면 이동과 충돌은 결정론적 경로를 따릅니다. AI는 캐릭터가 무엇을 말하고 원하는지를 이끌고, 엔진은 몸이 어디로 가는지를 이끕니다. Neta Studio에서는 캐릭터를 한 문장으로 묘사하면 에이전트 스프라이트 포지가 로우폴리 컴포넌트를 만들어 내고, 그 컴포넌트가 Three.js로 만들어진 걸어 다닐 수 있는 3D 세계에 들어갑니다.

이 분리가 중요한 이유는 버그가 어디에 사는지를 알려 주기 때문입니다. NPC가 벽을 통과해 걸어가면 경로 탐색이 잘못된 것입니다. NPC가 시키지도 않았는데 플레이어를 모욕하면 프롬프트 계약이 잘못된 것입니다. 이 페이지는 두 번째 범주를 다룹니다. AI NPC 시스템이 어떻게 대사를 생성하고, 성격 매개변수를 유지하고, 세션을 기억하며, 모델이 계획하지만 엔진이 실행할 수 없을 때 어떻게 실패하는지 살펴봅니다.

간단한 답: AI NPC란 실제로 무엇인가

이 표현을 쪼개 봅시다. 여기서 "AI"는 모델이 텍스트와 상위 수준의 의도를 만들어 낸다는 뜻입니다. "NPC"는 캐릭터 컨트롤러, 충돌체, 애니메이션 상태 기계를 뜻합니다. 둘은 서로 다른 시계로 실행됩니다. 모델은 수백 밀리초 안에 답하고, 컨트롤러는 매 프레임 60Hz로 갱신됩니다. 둘은 좁은 인터페이스를 통해 대화하는데, 보통 컨트롤러가 폴링하는 작은 JSON 객체입니다.

실제로 그 인터페이스는 이렇게 생겼습니다. 모델이 {line, intent, target}을 반환합니다. 컨트롤러는 intent를 읽고, 대상이 내비메시에서 도달 가능한지 확인한 뒤, 맞는 애니메이션과 함께 대사를 재생하거나 대체 대사를 넣습니다. 이 두 계층을 합치면, 모델이 생성을 끝낼 때까지 NPC가 순간이동하거나 미끄러지거나 문장 중간에 멈춰 서 버립니다.

그래서 실용적인 정의는 이렇습니다. AI NPC는 발화 출력과 다음 행동 선택이 생성 모델에서 나오되, 엔진이 실제로 수행할 수 있는 고정된 합법 의도 집합에 의해 제한되는 NPC입니다.

  • 대사 계층모델 호출. 지연 시간 200–900ms. 실패하거나, 속도 제한에 걸리거나, 잘못된 형식의 JSON을 반환할 수 있습니다.
  • 의도 계층짧은 열거형: greet, follow, flee, trade, attack, idle. 열거형 밖의 값은 모두 버려집니다.
  • 이동 계층내비메시 경로 탐색, 충돌체, 애니메이션 블렌드. 매 프레임 실행됩니다. 모델을 호출하지 않습니다.
  • 기억 계층NPC가 떠올릴 수 있는 사실을 담은 키-값 저장소로, 토큰 예산으로 상한이 정해집니다.

규칙 기반 NPC 대 AI 기반 NPC

규칙 기반 NPC는 표에서 고릅니다. 상태, 전이, 대사를 직접 작성합니다. 정확하고 저렴하며 재현 가능합니다. 같은 입력은 항상 같은 출력을 내므로 테스트하기도, 디버깅하기도 간단합니다. 한계는 당신의 집필 시간이고, 실패 방식은 플레이어가 예상하지 못한 것을 입력했을 때 멍한 반응을 얻는 것입니다.

AI 기반 NPC는 대사를 생성합니다. 당신은 계약과 합법 의도 집합을 작성하고, 모델이 그 사이의 공간을 채웁니다. 예상치 못한 입력을 매끄럽게 처리하지만, 같은 입력이 두 번의 실행에서 다른 출력을 낼 수 있어 순진한 재생 테스트를 깨뜨립니다. 비용은 캐릭터 수가 아니라 대화 길이에 따라 늘어나므로, 말이 많은 장면이 조용한 장면보다 더 비쌉니다.

어느 쪽이 절대적으로 더 낫지는 않습니다. 솔직한 비교는 이렇습니다.

차원규칙 기반 NPCAI 기반 NPC
행동의 출처직접 작성한 상태 기계와 대사 표의도 열거형으로 제한된 모델 출력
재현성실행마다 비트 단위로 동일시드와 온도를 고정하지 않으면 비결정론적
비용 구조제작 시점에 고정실행 중 토큰당 과금, 대화 길이에 따라 증가
디버깅 가능성전이를 추적하면 되고, 로그가 곧 코드프롬프트, 원시 응답, 파싱된 의도, 대체 응답을 각각 기록
실패 방식빈 응답 또는 잘못된 분기 응답계약을 벗어난 대사, 지연 급증, 파싱 불가능한 JSON
작성 노력대사당 높고 상태당 낮음대사당 낮고 제약당 높음

동적 대사

대사 트리는 직접 작성한 노드로 이루어진 그래프입니다. 작가가 모든 단어를 통제하며, 퀘스트, 계약, 줄거리의 핵심 반전이 여전히 트리를 쓰는 이유가 바로 이것입니다. 플레이어의 입력은 N개의 분기 중 하나에 매칭되고, N 밖의 것은 처리되지 않습니다. 트리는 콘텐츠에 비례해 선형으로 늘어납니다. 대화가 두 배가 되면 집필도 두 배가 됩니다.

생성된 대사는 양만 다른 게 아니라 종류 자체가 다릅니다. 모델은 플레이어의 실제 문장에 더해 당신이 주입한 맥락 — NPC 이름, 현재 목표, 마지막 세 번의 대화 — 을 읽고 어울리는 응답을 씁니다. 예상치 못한 질문도 처리할 수 있습니다. 그 질문을 형편없이, 자신 있게, 캐릭터에 맞게 처리할 수도 있는데, 이는 실패보다 더 나쁩니다.

트리가 여전히 옳은 곳은 게임의 나머지가 의존하는 상태를 담은 모든 대사입니다. "문 코드는 4417이다." 이런 것은 모델이 지어내게 두지 마세요. 신뢰할 수 있는 패턴은 하이브리드입니다. 사실과 분기점은 트리가 소유하고, 표현과 잡담은 모델이 소유합니다. Neta Studio에서 묘사로부터 AI NPC를 만들면, 생성된 컴포넌트가 의도 열거형을 노출합니다. 보장하고 싶은 사실은 프롬프트에 지시로 넣지 말고 컴포넌트에 고정 문자열로 넣으세요.

플레이어와의 접촉에서 살아남는 프롬프트 형태

시스템 프롬프트는 대략 300토큰 이하로 유지하세요. 역할, 어조, 세 가지 제약, 출력 스키마입니다. 나머지 전부 — 소지품, 퀘스트 상태, 세계의 사실 — 는 엔진이 턴마다 주입하는 별도의 맥락 블록에 넣습니다. 세계 전체를 시스템 프롬프트에 넣으면 지연이 늘어나고 모델이 뒤쪽 지시를 무시하기 시작합니다.

항상 구조화된 출력을 요청하세요. line과 intent를 담은 JSON 객체를 요구하세요. 파싱하세요. 파싱이 실패하면 그 대사를 버리고 대체 응답을 재생하세요. 길이 확인 없이 모델의 원시 텍스트를 대사 상자에 그대로 렌더링하지 마세요. 폭주한 생성은 400단어 독백을 만들어 UI를 망가뜨립니다.

절차적 성격

성격은 배경 설정 문단이 아닙니다. 배경 설정 문단은 모델의 상상력을 위한 훈련 데이터이며, 길어질수록 품질이 떨어집니다. 몇백 단어를 넘으면 모델은 그것을 양념으로 취급하고 일반적인 친절함 쪽으로 흘러갑니다. 대신 성격을 세 개 혹은 네 개의 매개변수로 다루세요. 각 매개변수는 관찰 가능한 행동을 바꿉니다.

목표는 NPC가 지금 원하는 것입니다. 어조는 말투입니다: 툭툭 끊는, 격식 있는, 비꼬는. 제약은 하지 않을 일입니다: 거짓말하지 않음, 전쟁을 논하지 않음, 거래하지 않음. 이 세 가지는 프롬프트 한 줄에 들어가고 각각 테스트할 수 있습니다. 네 번째는 그것을 바꿀 때 무엇이 달라지는지 설명할 수 있을 때만 추가하세요.

Neta Studio에서 에이전트 스프라이트 포지는 묘사를 받아 이 매개변수들이 컴포넌트의 필드로 노출된 로우폴리 컴포넌트를 돌려줍니다. 모델 프롬프트를 건드리지 않고 목표를 편집할 수 있고, 컴포넌트를 복제해 어조만 바꿔 두 번째 NPC를 얻을 수 있습니다. 같은 메시에 어조만 다른 두 NPC는 장면에서 서로 다른 캐릭터로 읽히며, 이는 스프라이트 두 개를 제작하는 것보다 저렴합니다.

  • 목표현재 시제의 한 문장. "플레이어를 신전에서 나가게 만든다."
  • 어조두세 개의 형용사. "툭툭 끊는, 고풍스러운, 성마른."
  • 제약금지 규칙. "강의 이름을 절대 말하지 않는다. 물건을 절대 받지 않는다."
  • 지식 경계NPC가 언급할 수 있는 것. 그 밖의 것은 지어내지 말고 캐릭터에 맞게 화제를 돌려야 합니다.

적응형 행동

세션 내부의 기억은 저렴하고 효과적입니다. 마지막 N번의 대화를 담는 순환 버퍼와, NPC가 들은 사실을 담은 작은 키-값 저장소를 유지합니다. N은 8에서 12면 대부분의 장면에 충분합니다. 그 이상이면 프롬프트가 플레이어의 인내심보다 빠르게 커지고, 오래된 턴은 어차피 출력에 영향을 주지 않습니다.

NPC가 안정적으로 기억할 수 있는 것: 플레이어가 말한 이름, 특정 물건을 주었는지 거절했는지, 이전 상호작용이 적대적으로 끝났는지, 마지막으로 말한 목표. 안정적으로 기억할 수 없는 것: 스무 턴 전의 정확한 표현, 키-값 저장소에 기록된 적 없는 사실, 그리고 영속화하지 않으면 페이지를 새로 고칠 때 사라지는 모든 것입니다. 프롬프트에만 사는 기억은 증발하는 기억입니다.

반응은 나머지 절반입니다. 엔진은 상태 변화 — 체력 감소, 물건 이동, 거리 임계값 통과 — 를 지켜보다가 이벤트를 NPC의 맥락에 밀어 넣습니다. 그러면 모델이 열거형에서 의도를 고릅니다. 의도 열거형이 존재하는 이유가 이것입니다. 모델은 제안하고, 엔진이 결정합니다. 공격하기로 "결정"한 NPC도 여전히 도달 가능성 검사를 통과해야 합니다. 실패하면 경고 대사를 재생하고 제자리에 머뭅니다.

영속화에 실제로 드는 비용

기억을 저장소에 쓰는 것은 코드 한 줄과 스키마 결정 하나입니다. 키는 짧고 평평하게 유지하세요: playerName, gaveItem, hostility. 중첩 객체는 부풀고 썩습니다. 처음부터 스키마에 버전을 붙이세요. 나중에 이름을 바꾸면 마이그레이션을 쓰지 않는 한 예전 저장 데이터가 조용히 버려집니다.

세션을 넘어설 때는 전체 대화 기록을 맥락에 재생하려 하지 마세요. 비용이 많이 들고 NPC가 반복적으로 됩니다. 요약 — 서너 개의 사실 — 을 영속화하고, 대화 기록은 새로 시작하세요.

한 문장으로 AI NPC 만들기

Neta Studio의 파이프라인은 의도적으로 짧습니다. 묘사를 씁니다. 에이전트 스프라이트 포지가 메시, 팔레트, 행동 모드를 갖춘 로우폴리 컴포넌트를 생성합니다. 3D 게임 빌더로 만든 걸어 다닐 수 있는 장면에 넣으면, 충돌, 경로 탐색, 대사 연결이 이미 배선된 채로 생성됩니다.

쓸 만한 묘사는 역할, 어조, 그리고 하나의 제약을 구체적으로 담습니다. "난파선 이야기는 절대 안 하는, 툭툭 끊어 말하는 북부 지방 사투리의 의심 많은 등대지기." 그러면 프롬프트에 정확히 그 세 매개변수가 들어간 컴포넌트가 만들어집니다. "멋진 캐릭터" 같은 것은 제약할 것이 없으므로 일반적인 결과를 냅니다.

결과는 두 곳에서 테스트할 수 있습니다. 긴 형식의 걸어 다닐 수 있는 장면인 사이클롭스의 섬과, 더 작고 반복 작업이 빠른 Mini World입니다. 둘 다 브라우저에서 Three.js로 실행됩니다. 컴포넌트를 넣고, 다가가서, 대사를 입력하고, 응답을 읽으세요. 어조가 어긋나면 프롬프트를 처음부터 다시 쓰지 말고 컴포넌트의 어조 필드를 편집하세요.

1

01

한 문장을 씁니다: 역할, 어조, 하나의 제약.

2

02

에이전트 스프라이트 포지를 통해 실행해 로우폴리 컴포넌트를 생성합니다.

3

03

3D 게임 빌더에서 Mini World나 사이클롭스의 섬을 엽니다.

4

04

컴포넌트를 장면에 넣으면 충돌과 대사 연결과 함께 생성됩니다.

5

05

다가가서 대사를 입력합니다. 응답과 선택된 의도를 읽습니다.

6

06

시스템 프롬프트가 아니라 컴포넌트의 어조나 제약을 편집합니다.

7

07

실패 경로를 테스트합니다: 주제에서 벗어난 것을 입력해 대체 응답이 작동하는지 확인합니다.

8

08

제대로 작동하면 컴포넌트를 더 큰 장면으로 옮깁니다.

AI NPC가 아직 할 수 없는 것

장기 계획은 작동하지 않습니다. 장면 전체에 걸쳐 서른 단계를 계획하라고 요청받은 모델은 그럴듯한 계획을 내놓고는 여섯 번째 단계쯤에서 흐름을 놓칩니다. 단계 사이의 상태를 붙잡아 두는 것이 프롬프트뿐인데, 그 프롬프트는 점점 길어지고 잡음이 많아지기 때문입니다. 여러 단계의 퀘스트가 필요하면 단계를 직접 작성하고 각 단계 안의 대사만 모델이 채우게 하세요. 전체 흐름을 붙잡으라고 요구하지 마세요.

완전히 열린 목표도 작동하지 않습니다. "하고 싶은 대로 해"는 마비를 낳거나 일반적인 친절 루프를 낳습니다. 모델에게 무엇이 진전인지 알려 줄 신호가 없기 때문입니다. 목표는 엔진이 충족 여부를 확인할 수 있을 때만 쓸모가 있습니다. 그 검사를 쓸 수 없다면 그것은 목표가 아니라 기분입니다.

진짜 격차는 비용 통제입니다. 턴당 비용은 작습니다. 실패는 끝나지 않는 대화에 있습니다. 계속 말하는 플레이어는 계속 과금됩니다. 상호작용당 턴 수에 대한 강제 상한, 맥락 토큰 상한, 그리고 성능 저하 경로 — 상한을 넘으면 NPC가 더 짧은 미리 준비된 응답으로 전환 — 가 필요합니다. 이 세 가지가 없으면 호기심 많은 테스터 한 명이 장면 나머지 전체를 합친 것보다 많은 예산을 태울 수 있습니다.

그리고 더 작은 실패들: 대략 1.5초를 넘는 지연은 사려 깊은 캐릭터가 아니라 고장 난 게임으로 읽힙니다. 시드와 온도를 고정하지 않으면 비결정성이 재생 테스트를 깨뜨립니다. 그리고 생성된 어떤 대사든 트리가 이미 정립한 것과 모순될 수 있으며, 그래서 사실은 트리에 남습니다.

  • 계획 지평1–2단계까지는 안정적입니다. 그 이상은 크게 나빠집니다.
  • 목표 검증엔진이 확인할 수 있어야 합니다. 그렇지 않으면 목표는 장식일 뿐입니다.
  • 비용 상한상호작용당 턴 상한, 토큰 상한, 그리고 대체 모드가 필요합니다.
  • 지연 예산대화처럼 느껴지려면 1.5초 미만. 그 이상이면 플레이어는 멈춘 것으로 여깁니다.
  • 결정론기본값은 비결정론적입니다. 재생으로 테스트한다면 시드와 온도를 고정하세요.
캐릭터를 묘사하면 걸어 다닐 수 있는 세계에 도착합니다 — 한 문장으로 만드는 AI NPC.
Little Ritual — AI NPC가 넘어서야 하는 규칙 기반 기준선.

그것이 속한 세계로 걸어 들어가기

스프라이트는 설 자리가 없는 캐릭터입니다. 마지막 단계는 다른 누구도 제공하지 않는 것입니다. 방금 만든 시트를 누군가 걸어 다닐 수 있는 세계 — 작은 섬, 행성, 비 내리는 길모퉁이 — 에 넣는 것입니다. 이 사이트의 모든 세계는 하나의 글로 쓴 묘사로 만들어졌고, 플레이할 수 있는 페이지로 공개되었습니다.

FAQ

NPC는 AI인가요? +

전통적으로는 아닙니다. 고전적인 NPC는 직접 작성한 대사를 지닌 상태 기계이며, 여전히 대부분의 출시 게임에서 기본값입니다. "AI NPC"라는 용어는 표에서 고르는 것이 아니라 실행 중에 대사나 의도 선택이 모델에 의해 생성되는 캐릭터를 구체적으로 가리킵니다.

AI NPC란 무엇인가요? +

발화 출력과 다음 행동 선택이 생성 모델에서 나오되, 엔진이 실행할 수 있는 고정된 의도 집합에 의해 제한되는 논플레이어 캐릭터입니다. 이동, 충돌, 애니메이션은 결정론적으로 유지되고, 모델은 대사를 채우고 의도를 제안할 뿐입니다.

AI NPC는 기억할 수 있나요? +

세션 안에서는 그렇습니다. 마지막 8~12번의 대화를 담는 순환 버퍼와 사실을 담은 작은 키-값 저장소면 대부분의 장면을 커버합니다. 페이지를 새로 고쳐도 유지되려면 사실을 저장소에 영속화해야 합니다. 프롬프트에만 사는 기억은 맥락이 사라질 때 함께 사라집니다.

무료로 만들 수 있나요? +

에이전트 스프라이트 포지와 3D 게임 빌더는 브라우저에서 실행되며, 로컬 도구 체인 없이 문장 하나로 컴포넌트를 생성할 수 있게 해 줍니다. 비용이 드는 부분은 실행 중의 모델 호출이며, 그 비용은 어떤 모델로 연결하는지와 대화가 얼마나 길게 이어지는지에 달려 있습니다.

AI NPC를 만들려면 게임 엔진이 필요한가요? +

브라우저 장면이라면 필요 없습니다. 3D 게임 빌더가 Three.js 위에서 렌더링을 처리하고, 생성된 컴포넌트에 충돌, 경로 탐색, 대사 연결을 부여하므로 엔진 설정 단계를 건너뜁니다. 네이티브 빌드를 목표로 할 때만 전체 엔진이 필요합니다.

AI NPC는 브라우저에서 작동하나요? +

네. 모델 호출은 네트워크 요청이고 렌더링은 WebGL이므로 양쪽 모두 브라우저에서 실행됩니다. 실질적인 제약은 지연입니다. 시스템 프롬프트를 짧게 유지하고 맥락 블록을 분리하세요. 그렇지 않으면 플레이어가 이미 게임이 멈춘 줄 안 뒤에 응답이 도착하기 시작합니다.

AI NPC를 운영하는 데 비용이 얼마나 드나요? +

배치한 캐릭터 수가 아니라 대화 길이에 따라 늘어납니다. 조용한 NPC는 거의 무료이고, 말 많은 NPC는 턴마다 과금됩니다. 중요한 통제는 상호작용당 턴 상한과 토큰 상한이며, 상한에 도달하면 미리 준비된 응답으로 대체합니다.

3D 게임 빌더로 돌아가기

완성된 31개의 3D 세계, 게임, 장면이 한 페이지에 모여 있으며, 그중 어느 것이든 플레이할 수 있습니다.

플랫폼: Neta Studio페이지: AI NPC: AI 기반 논플레이어 캐릭터의 작동 원리와 만드는 법다음으로 읽기: /explore/guide/npc-behavior · /explore/guide/ai-npc · /explore/tool/ai-npc-generator
×