Skip to content

Persona

Pawn Module / PersonaSystem

Persona

Pawn이 Collective Reasoning 파이프라인에 주입하는 판단 소스(judgment source). 성격 분산 파라미터를 보유하며, AI가 동일 상황에서도 개체마다 다른 판단을 내리도록 하는 입력 레이어다.

ScriptableObject IPersona IPawnModule 설계 진행 중

역할 개요

Pawn
Persona →
판단 소스 주입
🧠
Collective Reasoning
PawnEncode → State → Action
행동 결정
pawn_action_state

Persona가 없으면 Collective Reasoning 파이프라인은 모든 Pawn에게 동일한 판단 분포를 적용한다. Persona를 주입하면 성격 분산(personality variance) 파라미터가 PawnEncode 입력에 섞여, 같은 환경 상태에서도 Pawn마다 다른 행동 확률을 갖게 된다. 소극적·공격적·신중한 등의 행동 경향을 에셋 단위로 정의하고 재사용하는 것이 목적이다.

🚧
현재 상태 — 인터페이스 설계 진행 중

IPersona는 현재 멤버가 없는 마커 상태다. 코드 내 // TODO: add personality variance source 주석이 남아 있으며, 실제 판단 소스 필드 설계가 완료되지 않았다. Persona ScriptableObject 역시 현재 빈 구현체이며, 파이프라인 연결은 미구현이다.

인터페이스 & 구현체

interface IPersona
public interface IPersona
{
    // TODO: add personality variance source
}

현재 마커 인터페이스. 향후 성격 분산 파라미터(공격성, 신중함, 사회성 등) 접근자를 여기에 정의 예정.

ScriptableObject Persona
[CreateAssetMenu(menuName = "Forks/Pawn/Persona")]
public class Persona : ScriptableObject, IPersona, IPawnModule
{
    // 판단 소스 필드 — 미구현
}

IPersona + IPawnModule 동시 구현. Pawn에 직접 참조(SetPersona) 또는 AssetReference(SetPersonaRef)로 연결한다.

Collective Reasoning 파이프라인 연계

Persona는 Pawn이 CollectiveReasoning 파이프라인을 실행할 때 PawnEncode 패스의 입력 채널에 성격 분산 값을 제공할 예정이다. 파이프라인 구조는 아래와 같다.

1
PawnEncodePassAsset
Pawn의 상태 피처를 잠재 벡터로 인코딩. inputChannels 중 일부를 Persona 판단 소스가 채울 예정. 현재는 Persona 입력 없이 동작.
2
StatePassAsset
Pawn 잠재 벡터 + 환경 상태를 합산해 상황 표현 생성.
3
ActionPassAsset
최종 행동 확률 분포 출력 → pawn_action_state 결정. Persona 분산이 주입되면 같은 State에서도 Pawn마다 다른 행동 확률이 나온다.

Flow 노드

Persona 관련 노드는 모두 Pawn/Build 카테고리에 등록된다.

[FlowNode("Persona", "Pawn/Build")]
PersonaNode
입력 없음
0PersonaPersona

직렬화된 Persona 에셋을 그래프에 공급하는 소스 노드.

[FlowNode("Pawn Persona", "Pawn/Build")]
PawnPersonaNode
0PawnPawn
1PersonaPersona
0PawnPawn

기존 Pawn에 Persona를 연결한 뒤 반환. 내부적으로 pawn.SetPersona(persona)를 호출. Pawn 입력 없으면 빈 Pawn 자동 생성.

연계