> For the complete documentation index, see [llms.txt](https://rplaylive.gitbook.io/creatorguide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rplaylive.gitbook.io/creatorguide/storychat/storychat/samples/sample-orentech.md).

# 3. ORENTECH 뜯어보기

인물이 넷이고 구조가 큰 샘플입니다. **복잡도가 어느 방향으로 늘어나는지**를 배웁니다.

이 장을 마치면 이렇게 할 수 있습니다.

* 허브로 배선을 정리한다
* 인물이 여럿일 때 달라지는 점을 안다
* 업데이트 규칙을 **기록용**과 **생성용** 두 갈래로 쓴다
* 직접 만든 상태창으로 화면을 꾸민다
* 프리셋 노트로 이용자에게 톤 선택권을 준다
* 매크로 프롬프트의 `항상` 모드를 언제 쓰는지 안다

## 2장과 결정적으로 다른 점

{% hint style="success" %}
**이 캔버스에는 스토리 전환이 없습니다.**

시작 스토리 셋이 각각 독립이고, 하나뿐인 트리거는 업적만 줍니다. 2장 AVA가 "장면이 갈라지는" 복잡도였다면, 여기서 늘어난 것은 **인물 수 · 상태 수 · 화면**입니다.

"복잡한 작품 = 이야기가 많이 갈라진다"가 아닙니다. **내 작품에 필요한 복잡도가 어느 쪽인지** 먼저 정하세요.
{% endhint %}

세 시작 스토리는 `중요 정보`가 완전히 같고 **시작 메시지와 제목만** 다릅니다. 1장 Dr. Mia와 같은 방식입니다.

## 허브

```
[인물] 미아 ─┐
[인물] AVA  ─┤
[인물] 이츠키─┤                  ┌─> [스토리] 의뢰인의 방문 *
[인물] 히이라기┤                  │
[유저]       ─┼─> [허브] ────────┼─> [스토리] AVA 점검일 *
[매크로]     ─┤                  │
[프리셋 노트] ─┤                  └─> [스토리] 마감과 회식 *
[업데이트 규칙]×2 ─┘
```

허브가 없으면 (인물4 + 매크로1 + 프리셋1 + 규칙2) × 스토리3 = **선 24개**가 됩니다. 허브를 쓰면 그림이 "허브 하나에서 스토리로 다발 셋"이 되고, 스토리를 하나 더 넣을 때 이어야 할 선도 크게 줍니다.

{% hint style="info" %}
**허브는 필수가 아닙니다.** 이 샘플도 상태창과 업적은 허브를 거치지 않고 스토리 셋에 직접 물렸습니다.

기준 하나만 기억하세요 — **여러 스토리가 똑같이 쓰는 부품이 세 종류 이상이면 허브를 고려한다.**
{% endhint %}

{% hint style="warning" %}
**허브를 거쳐도 업데이트 규칙 7개와 변수 50개 제한은 계산됩니다.** 상태창·프리셋 노트가 허브를 거쳤다는 이유만으로 동작하지 않는 것은 아닙니다. 연결을 바꿨다면 컴파일 뒤 실제 표시와 선택 결과를 확인하세요.
{% endhint %}

## 인물 넷

| 인물     | 표시 순서 | 중요 정보 | 상세 설명  |
| ------ | ----- | ----- | ------ |
| Dr. 미아 | 5     | 420자  | 1,856자 |
| AVA    | 4     | 398자  | 1,085자 |
| 이츠키    | 3     | 360자  | 1,502자 |
| 히이라기   | 2     | 393자  | 1,636자 |

새로 배울 세 가지입니다.

{% hint style="success" %}
**1. 인물 카드에는 글칸이 두 개입니다.**

`중요 정보`에는 최대 300토큰까지, `상세 설명`에는 최대 3만 토큰까지 입력할 수 있습니다.

긴 설정을 전부 프롬프트에 밀어 넣지 않고 **나눠 담는 것**이 인물 많은 작품의 요령입니다.
{% endhint %}

**2. 표시 순서는 목록에 보이는 순서일 뿐입니다.** 프롬프트에서의 비중이 아닙니다. 큰 숫자가 앞입니다.

**3. 인물이 여럿이면 그 턴에 등장한 인물의 설정이 우선 실립니다.** 넷 전원의 설정이 매 턴 통째로 들어가지 않습니다. 각 인물의 `중요 정보`는 300토큰 한도 안에서 핵심만 정리하세요.

### 인물 설정을 쓰는 틀

이 샘플의 인물 `중요 정보`는 넷 다 같은 틀입니다.

```
핵심 / 사람됨 / 말투 / 예시 대사
```

그리고 **서로를 어떻게 부르는지**까지 적혀 있습니다.

{% hint style="info" %}
인물끼리의 관계는 각자의 칸에 나눠 적는 것보다 **한 곳에 모아 적는 편**이 낫습니다. 이 샘플은 그 역할을 매크로 프롬프트의 `항상` 항목에 맡겼습니다.
{% endhint %}

### 인물별 이미지

인물 넷 × (감정 세트 + 상황 세트) = 이미지 세트 여덟 개입니다.

{% hint style="success" %}
**감정 태그는 인물 사이에 통일하고, 상황 태그는 인물 전용으로 짓습니다.**

감정 세트는 넷 모두 같은 10개 태그(웃음·혼란·화남·기대·노려봄·놀람·무표정·미소·수줍음·슬픔)를 쓰고, 상황 태그는 `미아_커피타주기`·`히이라기_도게자`처럼 인물 이름을 붙였습니다.
{% endhint %}

등록한 장수와 **실제로 쓰는 장수가 다를 수 있다**는 점도 함께 보세요. AVA의 상황 세트는 28장이 등록되어 있지만 사용으로 켜 둔 것은 24장입니다.

### 태그 분류를 인물로 나누기

2장에서는 카테고리를 "AVA의 모드"로 나눴습니다. 여기서는 **인물**로 나눕니다.

| 카테고리 | 설명                         |
| ---- | -------------------------- |
| 공용   | "언제든지 사용 가능"               |
| 미아   | "subject가 '미아'일 때 사용 가능"   |
| AVA  | "subject가 'AVA'일 때 사용 가능"  |
| 이츠키  | "subject가 '이츠키'일 때 사용 가능"  |
| 히이라기 | "subject가 '히이라기'일 때 사용 가능" |

같은 기능을 **상태 축**(2장)과 **인물 축**(3장) 두 가지로 쓴 사례입니다. 내 작품에서 이미지를 가르는 기준이 무엇인지 정하고 그 기준으로 묶으세요.

## 업데이트 규칙 두 개 — 기록과 생성

변수가 여덟 개입니다.

| 변수                                        | 형식 | 처음 값 | 성격      |
| ----------------------------------------- | -- | ---- | ------- |
| `호감_미아` · `호감_AVA` · `호감_이츠키` · `호감_히이라기` | 숫자 | 30   | 측정값     |
| `프로젝트_진행도`                                | 숫자 | 0    | 측정값     |
| `선택지_애사심` · `선택지_연구원` · `선택지_방항아`         | 문자 | `-`  | **생성물** |

**규칙 A — 옮겨 적기**

> 매 턴 응답 끝의 상태창에서 인물별 호감 값과 진행도를 같은 이름 변수에 옮겨 적어라.

2장 AVA와 같은 계열입니다.

**규칙 B — 지어내기**

> 매 턴, 이전 응답에 이어질 수 있는 이용자의 후속 발언·행동으로 적절한 세 가지 선택지를 변수에 출력하라. 행동은 일반 문장, 대사는 큰따옴표. 100자 이내 한국어.

{% hint style="success" %}
**변수는 값을 담는 칸일 뿐이고, 무엇을 담을지는 업데이트 규칙이 정합니다.**

측정한 값을 담을 수도, **매 턴 새로 지어낸 문장**을 담을 수도 있습니다. 이 발상이 이 샘플의 핵심입니다.

세 선택지 변수의 이름(`애사심`·`연구원`·`방항아`)이 곧 **세 가지 성격 축**입니다. 선택지를 아무거나 세 개가 아니라 **축이 다른 세 개**로 만든 설계입니다.
{% endhint %}

## 직접 만든 상태창

상태창 노드가 고급 모드이고, HTML로 화면을 직접 짰습니다. 탭과 게이지, 접히는 목록에 더해 **선택지 변수를 버튼으로 그려 누르면 그 문장이 그대로 전송됩니다.**

{% hint style="info" %}
고급 모드로 할 수 있는 일은 크게 둘입니다.

* **값이 갱신될 때 화면을 다시 그리기** — 변수가 바뀌면 그 값을 받아 표시를 갱신합니다
* **이용자가 누른 것을 대화로 보내기** — 버튼을 누르면 정해진 문장이 입력된 것처럼 전송됩니다

**외부 서비스와 직접 통신하는 호출은 막혀 있습니다.** 다만 HTTPS 이미지·폰트·스타일시트는 외부 주소에서 불러올 수 있으며, 이때 해당 외부 서버에 접속이 발생합니다.
{% endhint %}

{% hint style="warning" %}
고급 모드 편집 창에는 **저장 버튼이 없습니다.** 창을 닫으면 저장되고, 재생 버튼을 누르면 미리보기 창이 따로 열립니다.

상태창 코드를 수정하고 컴파일하면 같은 캔버스를 사용하는 진행 중 대화방에도 변경이 영향을 줄 수 있습니다. 편집 전에는 반드시 기존 코드를 별도 파일로 백업하고, 반영 후 표시를 확인하세요. 상태창 HTML을 만들 때는 [상태창 기술 명세](/creatorguide/storychat/storychat/status-view/status-view-spec.md)를 LLM에 함께 제공할 수 있습니다.
{% endhint %}

## 프리셋 노트

항목 세 개입니다.

| 제목          | 이용자에게 보이는 설명        |
| ----------- | ------------------- |
| 시트콤 톤 강화    | "시트콤 분위기를 강화합니다."   |
| 업무 집중       | "프로젝트와 회사일에 집중합니다." |
| 로맨스 서브플롯 허용 | "오피스 로맨스물이 됩니다."    |

{% hint style="success" %}
**설명은 이용자에게 보이고, 실제 지시문은 보이지 않습니다.**

이용자가 켤지 말지 판단할 근거가 **설명 문구 하나뿐**입니다. 지시문보다 설명을 더 공들여 쓰세요.
{% endhint %}

이 기능은 작품을 기존과 다른 맛으로 다양하게 즐길 수 있는 `모드`를 제공하거나, 추가적인 요소를 더하는 도구입니다.

한 스토리에 프리셋 노트는 10개까지 붙습니다. 트리거를 걸면 조건이 맞을 때만 살아 있게 할 수도 있습니다(이 샘플은 쓰지 않습니다).

## 매크로 프롬프트의 두 모드

매크로 프롬프트 하나에 항목이 둘입니다.

| 항목    | 모드     | 낱말                             | 지속     |
| ----- | ------ | ------------------------------ | ------ |
| 기업 배경 | 키워드    | 오렌테크 · ORENTECH · 기업 · 회사 · 상부 | **5턴** |
| 관계망   | **항상** | (없음)                           | 1턴     |

* **키워드 + 5턴** — 회사 얘기가 나오면 배경 설명을 넣고 **5턴 동안 유지**합니다. 대화가 그 주제에 머무는 동안 설명이 사라지지 않게 하는 설정입니다. 1장 Dr. Mia는 1턴이었습니다
* **항상** — 인물 관계망처럼 언제 필요할지 모르고 늘 필요한 정보는 낱말을 걸지 않고 상시로 둡니다

## 무엇을 어디에 쓸 것인가

**이 표가 교재 전체의 결론입니다.**

| 정보의 성격                                 | 넣을 곳            |
| -------------------------------------- | --------------- |
| 매 턴 반드시 필요한 규칙 · 문체 · 출력 형식 · 인물 기본 정보 | 스토리 노드 `중요 정보`  |
| 인물의 성격과 말투 등 캐릭터 구현 정보                 | 인물 노드 `중요 정보`   |
| 인물의 긴 배경                               | 인물 노드 `상세 설명`   |
| 늘 필요하지만 `중요 정보`가 이미 긴 경우               | 매크로 프롬프트 `항상`   |
| 특정 주제가 나올 때만 필요한 배경                    | 매크로 프롬프트 `키워드`  |
| 길고 가끔 필요한 세계관 자료                       | 스토리 노드 `전체 스토리` |
| 이용자가 고르게 할 톤 · 방향                      | 프리셋 노트          |

## 직접 해보기

1. **허브에 스토리 추가** — 스토리를 하나 더 만들고 허브 출력만 이어 봅니다. 인물·매크로·프리셋이 한 번에 붙는 것을 확인하세요
2. **인물 하나 빼 보기** — 인물 하나를 허브에서 떼고 그 인물이 등장하지 않게 되는지 봅니다
3. **선택지 축 바꾸기** — 선택지 변수 하나의 이름과 규칙 B의 해당 부분을 바꿉니다. **상태창 코드에서 그 변수를 부르는 곳도 같이 고쳐야 한다**는 것을 확인하세요
4. **프리셋 노트 추가** — "심각한 톤" 항목을 만들고, 설명 문구만으로 이용자가 판단할 수 있는지 검토합니다
5. **매크로 프롬프트 추가** — `항상` 모드로 짧은 항목을 하나 더 넣고, 항목이 늘수록 매 턴 실리는 분량이 어떻게 되는지 생각해 봅니다
6. **업적 조건 완화** — 호감 조건을 낮춰 업적이 실제로 떨어지는지 봅니다

## 다음 장

[자주 하는 실수](/creatorguide/storychat/storychat/samples/mistakes.md)로 마무리합니다.

***
