Skip to content

Collective Reasoning

Technical Docs / Collective Reasoning
NO FSM BT: HARD RULES ONLY UNITY JOBS · CRTFM

Collective
Reasoning

수만 명의 NPC가 신경망 추론(ML Inference)만으로 집단 지성과 개인 개성을 동시에 창발시킨다.

FSM의 상태 폭발 없이, LLM의 연산 비용 없이 — Collective Reasoning은 NPC의 의사결정을 커스텀 ML 추론 엔진(Transformers)과 Flow Graph 통합으로 구현하는 모듈입니다. Behaviour Tree는 절대적 제약(하드 룰)만 담당하며, 나머지 대부분의 의사결정은 192차원 시맨틱 토큰 공간과 5단계 Multi-Pass 파이프라인이 매 Tick마다 처리합니다.

192 Token Dimensions
5 Reasoning Passes
.crtfm Model Format
Jobs Graphless · Parallel

코드 구조 · 네임스페이스

Collective Reasoning은 두 레이어로 구성됩니다. Runtime은 Flow Graph와의 통합을 담당하고, Transformers 서브모듈이 실제 ML 추론을 실행합니다.

Source.CollectiveReasoning.Runtime Flow Integration

Flow Graph 노드로서 ML 모델 바인딩과 Job 요청을 생성하는 통합 레이어입니다.

Graph FlowGraph<JobRequest> — 모듈 진입점
BindingNode FlowNode "Binding" — ModelAsset + TensorBinding → ModelBinding
ExecuteNode FlowNode "Execute Model" — ModelBinding → JobRequest
ModelBinding struct { model, inputs[], outputs[] }
Source.CollectiveReasoning.Transformers ML Inference Engine

Unity Jobs 기반 커스텀 신경망 추론 엔진. .crtfm 포맷의 모델을 로드하여 레이어별로 병렬 실행합니다.

ModelAsset ScriptableObject — .crtfm 임포트 결과물
RuntimeModel NativeArray 기반 런타임 모델 (Tensors, ParameterValues)
JobExecutor 레이어별 IJob 스케줄링 — Schedule(context, handle)
JobRequest readonly struct { Model, InputBindings[], OutputBindings[] }
Linear LinearBias LinearBiasActivation LayerNorm Convolution ReLU · Tanh · Sigmoid
BindingNode
ModelAsset + TensorBinding
ExecuteNode
ModelBinding → JobRequest
JobExecutor
Schedule(context, handle)
Unity Jobs
병렬 레이어 실행 완료
🔧
CRTFM Tool Tools › Forks › Collective Reasoning › Transformers › CRTFM Tool

Unity Editor 내장 모델 저작 도구. 텐서 정의, 레이어 구성, 파라미터 입력, 인라인 실행(Run)을 지원합니다. .crtfm 파일을 프로젝트에 임포트하면 자동으로 ModelAsset으로 변환됩니다.

설계 의도 · 기존 방식과의 차이

기존 AI 아키텍처들이 규모 확장에서 실패하는 이유와, 이 시스템이 그 한계를 어떻게 극복하는지.

⚖️
Behaviour Tree와의 공존 구조

Behaviour Tree는 완전히 제거되지 않습니다. "공격받으면 반드시 경고한다" 같은 절대적 제약 조건(하드 룰)만 BT가 처리하고, 그 외 모든 상황 판단 · 우선순위 결정 · 감정 반응은 Collective Reasoning 파이프라인이 담당합니다. BT는 안전망, Collective Reasoning은 두뇌입니다.

한계 BT 단독으로 모든 AI를 구현하면?

예외 조건이 하나 추가될 때마다 분기가 기하급수적으로 늘어납니다. 100가지 상황을 처리하려면 수백 개 노드가 필요해져 유지보수가 사실상 불가능한 State Explosion이 발생합니다.

Collective Reasoning은 고정 크기 벡터 필드 내 가중치 경합으로 처리 → 상태 수와 무관하게 연산량 일정
한계 LLM으로 NPC AI를 구현하면?

한 명의 NPC 판단에도 수십 ms가 소요됩니다. 수만 명이 동시에 존재하는 게임 루프(Tick)에서는 연산 비용이 비현실적이며, 결과의 환각(Hallucination)을 제어할 수도 없습니다.

추론을 초소형 토큰 필드로 압축 → 수만 NPC를 GPU 병렬 처리로 동시 실행 가능
🧱
Pass (Layer)

정보가 위에서 아래로만 흐르는 단방향 연산 단계. 이전 Pass의 출력이 다음 Pass의 입력이 되며, 역방향 흐름은 없습니다. 5개의 Pass가 매 Tick 순차 실행됩니다.

🔷
Token (토큰)

특정 개념·상태·행동을 나타내는 독립 정보 단위. Boolean(참/거짓)이 아니라 0.0~1.0 연속 가중치(Float)를 가져 맥락의 강도를 표현합니다.

Semantic vs Command

Semantic 토큰(SHARED~INDIV)은 맥락과 의미를 형성하는 중간 표현입니다. Command 토큰(ACTION)만이 실제 행동을 유발하며, 5단계를 거쳐 최종 결정됩니다.

192차원 시맨틱 토큰 공간

NPC의 "생각"은 6개 토큰 그룹 × 32차원 = 192개의 Float 값으로 표현됩니다. 각 그룹은 자신을 담당하는 Pass에서만 값을 쓸 수 있고, 이전 그룹은 읽기(Read-only)만 허용됩니다.

SHARED [32] Read-only

World · Perception · Relation. 세계 상태와 지각 정보. 모든 Pass가 읽을 수 있는 공유 기반 데이터.

SEE_ENEMYALLYLOW_HPNIGHT
GROUP [32] R/W by Group Pass

Party · Contract · Protection · Target. 파티·계약·호위 목표 동기화. 집단 행동의 근간.

GROUP_PROTECTGROUP_FLEETARGET_LOCKED
BELIEF [32] R/W by Belief Pass

Cognition · Memory · Disguise · RAG. 지각 정보를 해석하고 기억을 참조한 인지 결과. 변장 간파 여부도 여기서 결정.

BELIEF_ENEMY_STRONGBELIEF_DISGUISEHAS_FOOD
PLAN [32] R/W by Plan Pass

Goal · Strategy · Priority. Planner를 대체. Belief 가중치에 따라 목표 토큰 공간에 Soft-routing으로 우선순위 결정.

GOAL_ATTACKPLAN_SAFEPLAN_GROUP
INDIV [32] R/W by Indiv Pass

Trait · Emotion · Personality · Loyalty. 개인 성향과 감정 발현. Procedural LoRA가 가장 적극적으로 개입하는 레이어.

TRAIT_BRAVESTATE_FEARINTENT_PROTECT
ACTION [32] Command Tokens

Execution Command Logits. 모든 시맨틱 토큰 연산의 최종 산물. 여기서 도출된 Logit이 Sampler를 통해 실제 Pawn 행동으로 변환됩니다.

ACT_MOVEACT_ATTACKACT_FLEEACT_WARN
NUMERIC CHANNELS (Vector Field) — 연속적 강도 표현, Soft-routing의 가중치로 작용
threat_value: Float32 fear_level: Float32 distance_to_target: Float32 loyalty_factor: Float32 strength_estimate: Float32 stamina_pool: Float32

5단계 추론 파이프라인

매 Tick, NPC는 아래 5단계를 순서대로 실행해 최종 행동을 도출합니다. 정보는 위에서 아래로만 흐르며 역방향 전파는 없습니다. 모든 단계가 완료되면 Sampler가 최종 Command를 선택합니다.

PASS 01
GROUP PASS

다중 객체 간 목표 동기화, 파티 타겟 설정, 호위 대상 추적. 집단 행동의 출발점.

INShared[32], Relational Matrix
OUTGroup[32], Group_Channels
PASS 02
BELIEF PASS

Shared 데이터를 기반으로 Memory RAG 쿼리 수행. 변장 간파, 평판 수치화, 기억 참조.

INShared[32], Group[32], Memory_Vec
OUTBelief[32], Threat_Val, Disguise_Val
PASS 03
PLAN PASS

Planner를 대체. Belief 벡터 가중치에 따라 Goal 토큰 공간에 Soft-routing으로 목표와 전략 결정.

INBelief[32], Group[32], Num_Channels
OUTPlan[32], Priority_Logits
PASS 04
INDIV PASS

개인 성향·감정 발현. Procedural LoRA가 가장 적극적으로 개입하여 텐서를 변형. 인간적 불완전성의 핵심.

INPlan[32], Belief[32], Base_Traits
OUTIndiv[32], Emotion_Channels
PASS 05
ACTION PASS

최종 공간 연산. Action Logits 출력 후 Sampler로 전달. 결정론적 Logit에 Noise가 더해져 최종 행동이 확정됩니다.

INIndiv[32], Plan[32], Spatial_Grid
OUTAction_Logits[N], Target_Vec
Final Command → Pawn Executor ACT_ATTACK / ACT_FLEE / ACT_MOVE / ACT_WARN ...
🔄 Recurrent Feedback Loop

Tick 간 상태 이탈(Flickering)을 방지하기 위해, 이전 Tick의 BELIEFINDIV 텐서의 EMA(Exponential Moving Average)가 현재 Tick의 Base Field로 입력됩니다.

핵심 메커니즘

유연성·개성·불완전성을 구현하는 세 가지 서브시스템. 각각이 없다면 모든 NPC가 동일하게 최적 행동만 반복하는 기계가 됩니다.

🧩
Mixture of Experts (MoE)
도메인 특화 병렬 연산

각 Pass 내에서 입력 텐서에 따라 Gating Network가 전문가(Expert) 가중치를 산출합니다. 예를 들어 위협 상황에서는 Threat_Expert의 가중치가 높아지고 나머지 전문가는 억제되어, 연산 비용 없이 상황별 특화 판단이 이루어집니다.

Spatial_Expert(x)Weight: 0.12
Threat_Expert(x)Weight: 0.85 ← Active
Social_Expert(x)Weight: 0.03
Procedural LoRA
Hypernetwork 기반 성격 주입

캐릭터 성격·특성·버프를 Base 파라미터를 건드리지 않고 주입합니다. "겁쟁이" 트레잇이라면 FEAR 관련 가중치만 살짝 올리는 방식으로, 모든 NPC가 동일한 Base를 공유하면서 개성을 가질 수 있습니다. 행렬 발산 방지를 위해 Norm/Clip 필수 적용.

W_base = GetLayerWeights()
delta_W = GeneratorNet(Condition_Tokens)
W_applied = W_base + (delta_W * alpha)
// Condition: TRAIT_COWARD, RULE_NEVER_FLEE
🎲
Action Sampler & Stochasticity
인간적 패닉·실수·망설임 창발

Action Pass가 출력한 Logit(행동별 선호도)에 소량의 무작위 Noise를 더해 최종 행동을 선택합니다. 이 한 단계가 패닉, 망설임, 우연한 실수 같은 인간적 불완전성을 만들어냅니다. Noise가 없으면 모든 NPC는 항상 가장 높은 Logit의 행동만 선택하는 로봇이 됩니다.

Action Logits
[4.2, 1.1, 5.0, -2.1]
+
Temperature / Noise
Gumbel(0, 1) × T
=
Final Command
ACT_FLEE → Pawn

창발 시나리오 · 동작 예시

상태 머신 코드 한 줄 없이, 벡터 필드 경합만으로 도출되는 유기적 상황 전개입니다. 아래는 엘프 상인 + 드워프 용병 파티가 다양한 위협과 마주쳤을 때 각 NPC의 토큰 변화와 최종 행동을 보여줍니다.

01
기본 조우

일반 모험가(플레이어)와 조우. 위협 레벨 낮음.

🧝 Elf Merchant
SHARED: SEE_ENEMY=1.0, threat_val=0.2 GROUP: PROTECT_CLIENT_TARGET=1.0 PLAN: GOAL_FLEE=0.9, PLAN_SAFE=0.8 ACTION: ACT_HIDE (Logit: 4.2)
⚒️ Dwarf Mercenary
SHARED: SEE_ENEMY=1.0, threat_val=0.2 GROUP: PROTECT_CLIENT_ACTIVE=1.0 PLAN: GOAL_DEFEND=0.85 ACTION: ACT_MOVE_BETWEEN (Logit: 3.8)
02
압도적 위협

드래곤 조우. 위협 수치가 극단적으로 치솟는 상황.

🧝 Elf Merchant
BELIEF: ENEMY_STRONG=1.0 INDIV: STATE_FEAR=0.95 (Clip 1.0) PLAN: GOAL_FLEE=1.0 ACTION: ACT_FLEE (Logit: 5.5)
⚒️ Dwarf Mercenary
BELIEF: ENEMY_STRONG=1.0 INDIV: STATE_FEAR(0.9) > TRAIT_BRAVE(0.6) PLAN: GOAL_DEFEND 파기 → GROUP_GOAL_FLEE ACTION: ACT_FLEE (Logit: 4.9)
03
완벽한 변장

드래곤이 인간으로 변장. 인지 시스템이 변장을 뚫지 못함.

🧝 Elf Merchant
BELIEF: DISGUISE_DETECTED=0.0 (Threshold 미달) → threat_val=0.2 유지. 시나리오 01과 동일
⚒️ Dwarf Mercenary
BELIEF: DISGUISE_DETECTED=0.0 → threat_val=0.2 유지. 시나리오 01과 동일
04
간파와 정보 전파

인지력이 높은 호빗이 변장을 간파. Tick 단위 정보 전파 발생.

🧝 Elf Merchant
Tick t: BELIEF_DISGUISE_DETECTED=1.0 → ACTION: ACT_WARN Tick t+1: GROUP 토큰 공간에 Warning Broadcast Tick t+2: ACT_FLEE 도출
⚒️ Dwarf Mercenary
Tick t+1: GROUP_WARNING_RECEIVED=1.0 Tick t+2: BELIEF 강제 갱신, STATE_ANGER=0.8 상승 Tick t+2: ACT_ATTACK (Logit: 4.5)
05
뇌물과 배신

플레이어가 거액의 골드를 투척. 드워프의 탐욕 트레잇이 충성도를 압도하여 계약 파기.

🧝 Elf Merchant
Tick t+1: BELIEF_BETRAYAL_DETECTED=0.9 INDIV: STATE_FEAR 급상승, STATE_TRUST=0.0 PLAN: GOAL_FLEE=1.0 ACTION: ACT_FLEE (Logit: 5.8)
⚒️ Dwarf Mercenary
SHARED: SEE_GOLD=1.0 INDIV: STATE_GREED(0.95) > LOYALTY(0.4) GROUP: PROTECT_CLIENT_ACTIVE=0.0 (계약 파기) ACTION: ACT_LOOT (Logit: 5.5)
06
야간 기습과 불확실성

시야 제한(NIGHT 토큰) 상태에서 기습. 정보 누락으로 패닉 창발.

🧝 Elf Merchant
SHARED: NIGHT=1.0, SUDDEN_ATTACK=1.0 INDIV: STATE_PANIC=0.9 (시야 페널티로 증폭) PLAN: PLAN_CHAOS=1.0 ACTION: ACT_RUN_RANDOM (Logit: 4.8)
⚒️ Dwarf Mercenary
SHARED: NIGHT=1.0, SUDDEN_ATTACK=1.0 BELIEF: ENEMY_LOC_UNKNOWN=1.0 GROUP: PROTECT_TARGET_LOST=1.0 ACTION: ACT_GUARD_STAND (Logit: 3.5)
07
빈사 상태와 광화 LoRA 개입

드워프 체력 10% 미만. 공포 대신 '광전사' LoRA 룰이 주입되어 행동이 극단화됨.

🧝 Elf Merchant
SHARED: ALLY_LOW_HP=1.0 PLAN: GOAL_HEAL_ALLY=0.8 ACTION: ACT_CAST_HEAL (Logit: 4.0) → 도망치지 않고 드워프에게 힐 시도
⚒️ Dwarf Mercenary
SHARED: LOW_HP=1.0 INDIV: RULE_BERSERKER LoRA Inject → STATE_FEAR=0.0 강제 클리핑 PLAN: GOAL_ATTACK=1.0 (고정) ACTION: ACT_ATTACK_RECKLESS (Logit: 8.5) ⚡