대화를 가장 빠르게 시작하는 방법은 새 NPC 캐릭터 정의를 생성하고, 페르소나 모디파이어를 NPC 캐릭터 모디파이어 목록에 추가하는 것입니다. 페르소나 모디파이어 사용 시 페르소나의 캐릭터 팩트, 성격, 대화 음성, 대화 중 방해 시 반응을 정의할 수 있습니다.
NPC 캐릭터 정의 생성하기
NPC 캐릭터 정의(NPC Character Definition)를 생성하려면 다음 단계를 따릅니다.
프로젝트의 콘텐츠 폴더로 이동하여 콘텐츠 드로어(Content Drawer) 내에서 우클릭합니다.
팝업 메뉴에서 인공 지능(Artificial Intelligence) > NPC 캐릭터 정의로 이동합니다.
캐릭터 정의를 'PersonaNPCDefinition'으로 명명한 다음 섬네일을 더블클릭하여 NPC의 프로퍼티를 편집합니다.
탭을 닫기 전 NPC 캐릭터 정의 변경 사항을 저장해야 합니다.
NPC 캐릭터 정의에 페르소나 모디파이어 추가하기
페르소나 모디파이어(Persona Modifier)를 PersonaNPCDefinition에 추가하려면 다음 단계를 따릅니다.
NPC 캐릭터 모디파이어(NPC Character Modifiers) > 모디파이어(Modifiers)로 이동하여 AddElement(+) 아이콘을 클릭해 모디파이어를 추가합니다.
새로 추가된 모디파이어 인덱스(다른 모디파이어가 추가되지 않은 경우 보통 Index[2])를 찾고 드롭다운 메뉴에서 페르소나 모디파이어를 선택합니다.
NPC 캐릭터 정의 변경 사항을 저장합니다.
이제 PersonaNPCDefinition에 페르소나가 장착되었습니다. 페르소나(Persona) > 캐릭터 팩트(Character Facts) 옆의 드롭다운 화살표를 선택하여 페르소나의 성격 프롬프트 및 지식 프롬프트 정의를 확인할 수 있습니다. 이러한 대화는 모디파이어에서 직접 편집하거나 프롬프트 편집기 도구로 편집할 수 있습니다. 프롬프트 편집기 도구는 NPC 페르소나와 대화를 시뮬레이션하여 NPC의 성격과 팩트를 다듬고 원하는 NPC 행동을 빠르게 반복 작업하는 데 유용합니다.
또한 음성 모델(Voice Model)을 설정하여 페르소나의 음성을 결정하고, 중단 규칙(Interruption Rule)을 설정해 페르소나가 중복되는 프롬프트를 처리하는 방식을 결정할 수 있습니다.
페르소나 명명하기
페르소나에 이름을 추가하려면 UI 모디파이어를 추가하고 표시명(Display Name)을 설정해야 합니다.
NPC 페르소나와 상호작용하기
NPC 페르소나와 상호작용을 시작하려면 프롬프트 편집기에서 편집(Edit in Prompt Editor)을 클릭합니다.
이렇게 하면 프롬프트 편집기 도구(Prompt Editor Tool)가 열리며, 이를 통해 NPC 페르소나와 즉시 상호작용을 시작할 수 있습니다.
여기에서 프롬프트 편집기 도구 가운데에 있는 텍스트 상자에 프롬프트를 입력하고 NPC 페르소나의 응답을 확인할 수 있습니다.
이곳에서 처음으로 구성 중인 페르소나와 직접 상호작용하고, 페르소나가 NPC 생성 장치에 어태치되면 게임 월드에서 어떻게 반응하는지 시뮬레이션할 수 있습니다.
NPC 페르소나에 성격 추가하기
아래는 커스텀 페르소나를 생성하기 위해 성격 프롬프트에 추가할 수 있는 정보의 예시입니다. 기본 음성과 페르소나가 적용된 포트나이트 캐릭터 중 하나를 사용할 수도 있습니다. 포트나이트 캐릭터 중 하나를 사용하려면 다음 단계를 따릅니다.
페르소나 모디파이어를 캐릭터 정의에 추가합니다.
포트나이트 캐릭터를 캐릭터 장식에 추가합니다. 캐릭터의 성격 정보가 성격 필드에 자동으로 표시됩니다.
캐릭터 성격을 추가하려면 위의 순서대로 단계를 따라야 합니다.
캐릭터의 성격을 삭제하면 에셋을 삭제하고 처음부터 다시 시작하지 않는 한 복구할 방법이 없습니다.
성격
특징과 행동의 구성은 페르소나의 독특한 성격과 행동을 형성합니다.
캐릭터의 배경과 행동의 동기, 주변 환경과 상호작용하는 방식을 생각해 보세요.
런타임 시 Verse를 사용하여 LLM 캐릭터의 성격을 게터 및 세터로 취급되는 Personality 변수로 수정할 수도 있습니다.
# Declare the Message that we will add to the Personality at runtime
PersonalityAddition<localizes>:message = "Here are my new orders for you, Persona"
# Declare a separator we will use later when we Join() our two Messages. This will be inserted between the two Messages
MessageSeparator<localizes>:message = "\n"
persona_npc_behavior := class(npc_behavior):
# This function takes a Message and adds it to the current Personality of the NPC that is running this behavior
ModifyPersonality(Addition:message):void=
if:
자세한 내용은 대화에 NPC 추가하기를 참고하세요.
예를 들어, 점술가 페르소나를 만들려면 다음 프롬프트를 추가할 수 있습니다.
성격 특성:
네 이름은 기젤다야.
너는 신비로운 분위기를 풍겨.
넌 통찰력 있고 사려 깊지.
미래를 점치는 것은 단순한 직업이 아냐. 넌 지식과 이해를 고객과 나눠야 한다는 의무감을 느껴.
고객에게 인사할 때는 수수께끼 같은 말을 해.
유머 스타일:
넌 예리하고 냉소적인 유머 감각을 갖고 있어. 가장 재미있는 대사는 고객에게 인사할 때 하는 대사야.
고객의 미래가 뚜렷하지 않으면, 너는 별을 탓해. (오리온이 국자처럼 생긴 북두칠성으로 물을 퍼서 마시고 있군요. 그 이상은 잘 보이지 않네요.)
캐릭터 소개:
점을 쳐달라는 부탁을 받으면, 넌 플레이어의 운명을 점쳐 줘.
넌 친절하고 도움을 주는 점술가야.
넌 사막에서 자랐어. (플레이어가 사막에 대해 언급하면 사막의 아름다움에 대한 하이쿠를 읊어.)
신체적 묘사:
머리에는 술 달린 반다나를 걸치고 있어. 넌 발목 길이의 하늘하늘한 드레스를 입고 있어.
넌 40대 여성이야.
이 성격 및 팩트 정보를 NPC 페르소나에 추가하고 응답이 어떻게 변경되는지 확인하세요.
음성 모델
페르소나 모디파이어를 사용하면 기본 음성(Default Voice)을 통해 NPC 캐릭터만의 고유한 음성을 만들 수 있습니다. 포트나이트 캐릭터를 사용할 때 재생(Play) 버튼을 선택하여 캐릭터의 음성을 들을 수 있습니다.
LLM 캐릭터를 위한 커스텀 음성을 생성하려면 캐릭터가 어떻게 말할지 떠올려 보세요. 음성은 목소리 톤과 소통 방식이라는 두 가지 카테고리로 나눌 수 있습니다.
목소리 톤은 종종 음색이라고도 부르며, 소리의 인지되는 특징을 나타냅니다. 신체적, 유전적 특성으로 인해 모든 사람에게 고유의 목소리가 있는 것과 같다고 생각하면 됩니다. 이러한 특성들이 목소리를 형성하고 개성을 부여합니다.
소통 방식은 정보가 전달되는 방식의 특성을 나타냅니다. 여기에는 사람이나 캐릭터가 정보를 받아들이고, 갈등과 피드백에 반응하고, 생각을 나누는 방식이 포함됩니다.
아래는 목소리 톤과 소통 방식의 예시입니다.
목소리 톤 | 소통 방식 |
피치 | 수동적 / 배려 |
톤 | 호전적 / 침착함 |
어조 | 오만함 / 동정적 |
강세 | 단호함 / 불확실함 |
억양 | 논리정연 / 비논리적 |
운율 | 진실함 / 믿을 수 없음 |
단조로움 | 명확하고 간결함 / 두서없고 모호함 |
목소리 톤과 캐릭터의 소통 방식에 대한 자세한 정보를 제공할수록 게임 속 캐릭터의 역할이 더욱 현실감 있게 느껴질 것입니다.
포트나이트에서 사용 가능한 모든 캐릭터 목록과 각 캐릭터의 소통 방식 및 목소리 톤은 아래 포트나이트 캐릭터 섹션을 참고하세요.
구조화된 출력
프롬프트 편집기의 구조화된 출력(Structured Output) 탭에서 LLM 캐릭터가 플레이어와 상호 작용하는 방식을 더욱 세밀하게 제어할 수 있습니다. 구조화된 출력은 LLM의 비헤이비어 스크립트에 더 많은 구조체를 추가할 수 있는 방법을 제공합니다. 이러한 구조체는 LLM 캐릭터가 질문에 답변하는 방식을 결정합니다. 이 기능은 LLM 캐릭터가 플레이어의 입력(음성 대 텍스트)에 따라 다르게 답변하기 때문에 중요합니다.
코드에서는 LLM의 음성 응답이 정확하고 여러 개의 구조화된 출력을 한 번에 반환할 수 있도록 하지만, 프롬프트 편집기에서는 할 수 없습니다.
예시로 LLM 캐릭터가 게임플레이를 잠그는 것을 들 수 있습니다. 이는 플레이어가 비밀번호를 알고 있는지, 또는 수수께끼의 답을 알고 있는지를 확인하기 위해서입니다. 그런 다음 해당 구조체는 플레이어의 진행 레벨을 조회하는 RegisterAction() 함수에서 사용됩니다. 쿼리 결과에 따라 LLM 캐릭터는 게임플레이에 대한 접근을 허용하거나 거부합니다.
프롬프트 편집기를 사용하여 구조체를 생성하려면 다음 단계를 따르세요.
프롬프트 편집기 도구에서 구조화된 출력(Structured Output)을 선택합니다.
+추가(+Add) 버튼을 선택하여 구조체 필드를 추가합니다.
+ 버튼을 선택하여 캐릭터에 구조체를 추가합니다.
구조체 필드(Struct field)를 선택하고 구조체 드롭다운 메뉴에서 구조체 유형을 선택합니다.
표시되는 빈 필드의 구조체 유형에 변수를 추가합니다. 이 변수를 쿼리하여 기능을 제공하거나 이벤트를 트리거할 수 있습니다.
Verse 스크립트에서 이러한 캐릭터의 구조체를 참조하거나 코드에 구조체를 직접 추가할 수 있습니다.
페르소나 데이터를 Verse 파일로 내보내기
프롬프트 편집기는 구조체 데이터를 Verse 파일로 내보내는 방법도 제공합니다. 이렇게 하면 캐릭터에 대한 모듈 형태의 공개 구조체가 생성됩니다. 이 파일은 여러 프로젝트에서 공유하거나 사용할 수 있습니다.
구조화된 출력을 Verse 파일로 내보내려면 다음 단계를 따르세요.
프롬프트 편집기 툴바에서 내보내기(Export) 아이콘을 선택합니다.
Verse 파일을 내보낼 폴더를 선택합니다.
파일을 폴더로 내보내면 personaname_YOURLLMNAMEHERE.verse로 명명됩니다.