Spaces:
Sleeping
Sleeping
# ๐ง README - NPC ์์ ๋คํธ์ํฌ AI ์๋ฎฌ๋ ์ด์ | |
๋ณธ ๋ฌธ์๋ ๋ณธ ํ๋ก์ ํธ๋ฅผ **์ ๋ก ๋ฒ ์ด์ค์์ ์์ ์ฌํ**ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. | |
์ง๊ธ๊น์ง์ ๊ตฌ์กฐ, ์ค๊ณ ์ฒ ํ, ๊ตฌํ ๋จ๊ณ, ๊ฐ ํ์ผ ๊ธฐ๋ฅ์ **๋จ ํ๋์ ๋ฌธ์๋ก ์์ ํ๊ฒ ์ ๋ฆฌ**ํ ๊ณต์ ๋ฌธ์์ ๋๋ค. | |
--- | |
## ๐ ํ๋ก์ ํธ ๊ฐ์ (Overview) | |
์ด ํ๋ก์ ํธ๋ ๊ฐ์ , ๊ธฐ์ต, ์ฑ๊ฒฉ, ๊ด๊ณ, ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ํ **์ธ๊ฐ ์ ์ฌ NPC ์๋ฎฌ๋ ์ด์ **์ ๋๋ค. | |
๋จ์ํ ์ ํด์ง ๋์ฌ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ NPC๋ฅผ ๋์ด, ์์ฒด์ ์ธ ๊ฐ์ , ๊ธฐ์ต, ์ฑ๊ฒฉ, ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ๋ค๋ฅธ NPC๋ ํ๋ ์ด์ด์ ์ํธ์์ฉํ๋ฉฐ ์ค์ค๋ก ํ๋จํ๊ณ ์ฑ์ฅํ๋ ๊ฐ์ ์ธ๊ฐ(AI Agent)์ ๊ตฌํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ AI ์๋ฎฌ๋ ์ด์ ์ ๋๋ค. | |
๋ชจ๋ NPC์ ๋ด๋ฉด ์ํ์ ๊ด๊ณ ๋ณํ๋ ์น ๊ธฐ๋ฐ์ **'์๋ ๊ด์ฐฐ์ ๋์๋ณด๋'**๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก ์๊ฐํ๋๊ณ ๋ถ์๋ฉ๋๋ค. | |
ํต์ฌ ๊ธฐ์ : Python, Flask, LLM (Google Gemini), Sentence-Transformers, FAISS | |
์ฃผ์ ๊ธฐ๋ฅ: | |
- ์์ฒด ์ค๊ณ๋ 4๊ณ์ธต ๊ฐ์ ๋ชจ๋ธ์ ๋ฐ๋ฅธ ๋์ ์ธ ๊ฐ์ ๋ณํ | |
- ์๋ฏธ ๊ธฐ๋ฐ ๊ฒ์(Vector Search)์ ํ์ฉํ ์ฅ/๋จ๊ธฐ ๊ธฐ์ต ์์คํ | |
- ์ํธ์์ฉ์ ๋ฐ๋ผ ๋ณํํ๋ ์ฌํ์ ๊ด๊ณ๋ง | |
- ๊ฒฝํ์ ํตํด ์ ์ง์ ์ผ๋ก ๋ณํํ๋ ๋ค์ฐจ์ ์ฑ๊ฒฉ ๋ชจ๋ธ | |
- LLM์ ์ด์ฉํ ์์จ์ ์ธ ๋ชฉํ ์ค์ ๋ฐ ๋ํ ์์ฑ | |
--- | |
## ๐ ํด๋ ๊ตฌ์กฐ | |
``` | |
portfolio/ | |
โโโ templates/ | |
โ โโโ main.html # ํฌํธํด๋ฆฌ์ค ๋ฉ์ธ ํ์ด์ง | |
โ | |
โโโ app.py # Flask ์ง์ ์ | |
โโโ requirements.txt | |
โโโ test.ipynb | |
โโโ npc_social_network/ | |
โ | |
โโโ __init__.py | |
โโโ simulation_core.py # โ ์๋ฎฌ๋ ์ด์ ์ '์ฌ์ฅ'. ์ํ ๊ด๋ฆฌ ๋ฐ ์๊ฐ ํ๋ฆ(tick) ๋ด๋น | |
โโโ README.txt | |
โ | |
โโโ data/ | |
โ โโโ saves/ | |
โ โ โโโ simulation_state.pkl # NPC ์๋์ ์ํ๊ฐ ์ ์ฅ๋๋ ํ์ผ | |
โ โโโ vectorstores/ | |
โ โโโ ์๋ฌธ ์บ๋ฆญํฐ๋ช # ๊ฐ๊ฐ์ ์บ๋ฆญํฐ์ ๋ํ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ ํ์ผ | |
โ | |
โโโ routes/ | |
โ โโโ npc_route.py # โ '์๋ ๊ด์ฐฐ์' ๋์๋ณด๋์ ๋ชจ๋ ์น API ์ ์ | |
โ | |
โโโ manager/ | |
โ โโโ conversation_manager.py # ๋ํ์ ์์, ์งํ, ์ข ๋ฃ๋ฅผ ์ด๊ดํ๋ ์ญํ | |
โ โโโ simulation_manager.py # ์๋ฎฌ๋ ์ด์ ์ํ๋ฅผ ์ ์ฅ/๋ก๋ํ๋ ๊ธฐ๋ฅ | |
โ | |
โโโ scenarios/ | |
โ โโโ scenario_setup.py # ์๋ฎฌ๋ ์ด์ ์ด๊ธฐ ์๋(NPC, ๊ด๊ณ) ์ค์ | |
โ | |
โโโ npc/ # NPC์ '๋๋'๋ฅผ ๊ตฌ์ฑํ๋ ํต์ฌ ๋ก์ง | |
โ โโโ npc_base.py # NPC ๋ณธ์ฒด (๊ฐ์ /๊ธฐ์ต/๊ด๊ณ ํฌํจ) | |
โ โโโ npc_manager.py # NPC ๋ฆฌ์คํธ ๊ด๋ฆฌ | |
โ โโโ npc_emotion.py # EmotionManager | |
โ โโโ npc_memory.py # Memory / MemoryStore | |
โ โโโ npc_behavior.py # ๊ฐ์ โ ํ๋ ๋งคํ | |
โ โโโ npc_relationship.py # ๊ด๊ณ ์ ์ ๊ด๋ฆฌ | |
โ โโโ npc_memory_embedder.py # ๊ธฐ์ต ์๋ฒ ๋ฉ + FAISS ๊ฒ์ | |
โ โโโ emotion_config.py # ๊ฐ์ ๊ตฌ์กฐ ์ ์ | |
โ โโโ personality_config.py # ์ฑ๊ฒฉ ๋ฐ ๋์ด ํ๋กํ | |
โ โโโ npc_planner.py # ๋ชฉํ์ ๊ด๋ จ๋ ๊ตฌ์กฐ | |
โ | |
โโโ models/ # LLM ๋ฐ ์๋ฒ ๋ฉ ๋ชจ๋ธ ๊ด๋ จ | |
โ โโโ gemini_setup.py # Gemini API ์ค์ | |
โ โโโ llm_helper.py # ๊ฐ์ ์ถ๋ก , ์๋ต ์์ฑ | |
โ | |
โโโ templates/ | |
โ โโโ dashboard.html # '์๋ ๊ด์ฐฐ์' ๋์๋ณด๋ HTML/CSS/JS | |
โ | |
โโโ static/ | |
โโโ css/style.css | |
โโโ js/npc_chat.js | |
โโโ images/ | |
โ โโโ npc/ # NPC ์ด๋ฏธ์ง ํ์ผ (์: npc_elin.png) | |
``` | |
--- | |
## ๐ก ๊ฐ์ ๊ตฌ์กฐ (๊ณ ์ฐจ์ ๊ฐ์ ๋ชจ๋ธ) | |
> โ **GoEmotions์์ ์๊ฐ์ ๋ฐ์ ์ง์ ์ฌ์ค๊ณํ 4๊ณ์ธต ๊ฐ์ ๋ชจ๋ธ (ComplexEmotions)** | |
| ๊ณ์ธต (Layer) | ๊ฐ์ ์์ | | |
|--------------|------------| | |
| `core` | joy, sadness, anger, fear, disgust, surprise, neutral | | |
| `social` | gratitude, shame, empathy, pride, jealousy, compassion, love, admiration, awe, attachment, comfort | | |
| `cognitive` | anticipation, curiosity, confusion, interest, engagement, boredom, relief, anxiety, calm, skepticism | | |
| `complex` | nostalgia, bittersweet, schadenfreude, resentment, anticipatory_joy, regret, rumination, hope, groundedness | | |
- ๊ฐ์ ์ ๊ฐ์ฑ(`sensitive`, `stoic`, `*_bias`)์ ๋ฐ๋ผ ๊ฐ์ ๋ฐ์ ๋ฐ decay ์๋๊ฐ ๋ฌ๋ผ์ง๋๋ค. | |
- ๊ฐ์ ์ ํ๋, ๊ธฐ์ต ์์ฑ, ๊ด๊ณ ๋ณํ, ์ฑ๊ฒฉ ๋ณํ์ ์ง์ ๋ฐ์๋ฉ๋๋ค. | |
--- | |
## ๐ง ํต์ฌ ์์คํ ์ค๋ช | |
### โ ๊ฐ์ ์์คํ | |
- `EmotionManager`: ๊ฐ์ ๋ฒํผ ๊ด๋ฆฌ, decay, ๊ฐ์ ์ ๋ฐ์ดํธ | |
- ๊ฐ์ ์ ์ต๋ 100.0๊น์ง ๋์ ๋๋ฉฐ, decay๋ personality์ ์ฐ๊ณ๋จ | |
- ๊ฐ์ ์ ํ๋ ์์ฑ, ๊ธฐ์ต ์ ์ฅ ๊ฐ๋, ๊ด๊ณ ์ํฅ, ์ฑ๊ฒฉ ๋ณํ์ ๊ธฐ๋ฐ์ด ๋จ | |
### โ ๊ธฐ์ต ์์คํ | |
- `Memory`: content, timestamp, importance, emotion, type ๋ณด์ | |
- `MemoryStore`: ๋จ๊ธฐ/์ฅ๊ธฐ ๊ธฐ์ต ๋ถ๋ฆฌ, decay, ์น๊ฒฉ, ๊ฒ์ ๊ธฐ๋ฅ ํฌํจ | |
- decay๋ memory_type๋ณ๋ก ๋ค๋ฅด๊ฒ ์ ์ฉ๋จ | |
### โ ์ฑ๊ฒฉ ์์คํ | |
- `PERSONALITY_PROFILE`: stable/emotional/logical | |
- `AGE_PROFILE`: ์ธ์ ๋จ๊ณ๋ณ ๋ณํ์จ (์: ์ด๋ฆฐ์ด๋ ๋น ๋ฆ) | |
- ๊ธฐ์ต์ ๊ธฐ๋ฐํด personality gradually drift (ex: ๊ฐ์ ์ ์ด๊ฑฐ๋ ์ด์ฑ์ ์ฑํฅ ๊ฐํ) | |
### โ ๊ด๊ณ ์์คํ | |
- `RelationshipManager`: -100 ~ +100 ๋ฒ์์ ๊ด๊ณ ์ ์ ๊ด๋ฆฌ | |
- ๊ฐ์ ํํ ๋ฐ ๊ธฐ์ต์ด ๊ด๊ณ์ ์ํฅ์ ์ค (`reflect_memory_on_relationship`) | |
### โ ํ๋ ์์คํ | |
- ๊ฐ์ โ ํ๋ ์ํ์ค๋ก ๋ณํ (`BehaviorManager`) | |
- ํ๋์ ๊ธฐ์ต์ ๊ธฐ๋ก๋๊ณ , ๋ค์ ๊ฐ์ ์ ์ํฅ์ ์ค (์ญ๋งคํ) | |
### โ LLM ์์คํ | |
- `query_llm_for_emotion`: ๊ฐ์ ์ถ๋ก ์ฉ LLM ํธ์ถ | |
- `query_llm_with_prompt`: ๋์ฌ ์์ฑ์ฉ LLM ํธ์ถ | |
- `build_npc_prompt`: ๊ฐ์ /๊ธฐ์ต ๊ธฐ๋ฐ ํ๋กฌํํธ ์์ฑ | |
- `summarize_memories`: ์ฅ๊ธฐ ๊ธฐ์ต ์์ฝ | |
### โ ์๋ฒ ๋ฉ ์์คํ | |
- `npc_memory_embedder.py`: | |
- `embed_npc_memories`: FAISS ์ ์ฅ | |
- `search_similar_memories`: ์ง์ ์ ์ฌ๋ ๊ฒ์ | |
- ๋ชจ๋ธ: `all-MiniLM-L6-v2` ์ฌ์ฉ ์ค | |
--- | |
์ฃผ์ ํ๋ฆ (generate_dialogue ํจ์ ๊ธฐ์ค): | |
1. ์ฌ๊ฑด ๋ฐ์: ํ๋ ์ด์ด๋ ๋ค๋ฅธ NPC๋ก๋ถํฐ ๋ํ(user_input)๊ฐ ์์๋ฉ๋๋ค. | |
2. ๊ธฐ์ต ํ์: ์ ๋ ฅ๋ ๋ํ ๋ด์ฉ๊ณผ ์๋ฏธ์ ์ผ๋ก ๊ฐ์ฅ ์ ์ฌํ ๊ณผ๊ฑฐ์ ๊ธฐ์ต๋ค์ ๋ฒกํฐ ๊ฒ์(FAISS)์ ํตํด ์ฆ์ ์ฐพ์๋ ๋๋ค. (npc_memory_embedder.py) | |
3. ์ํฉ ํ๋จ: ํ์ฌ NPC์ ๊ฐ์ ์ํ, ์ฑ๊ฒฉ, ์๋๋ฐฉ๊ณผ์ ๊ด๊ณ, ๋ฐฉ๊ธ ์ฐพ์๋ธ ๊ด๋ จ ๊ธฐ์ต ๋ฑ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ข ํฉํ์ฌ LLM์๊ฒ ์ ๋ฌํ ์์ธํ '์ํฉ ๋ณด๊ณ ์(Prompt)'๋ฅผ ์์ฑํฉ๋๋ค. (llm_prompt_builder.py) | |
4. ์์ฌ ๊ฒฐ์ (๋ํ ์์ฑ): LLM์ ์ด ์ํฉ ๋ณด๊ณ ์๋ฅผ ๋ฐํ์ผ๋ก, ํ์ฌ ์ํฉ์ ๊ฐ์ฅ ์ ์ ํ ๋์ฌ๋ฅผ ์์ฑํฉ๋๋ค. (llm_helper.py) | |
5. ๋ด๋ฉด์ ๋ณํ: | |
- ์์ฑ๋ ๋์ฌ์ ๋ด๊ธด ๊ฐ์ ์ ์ค์ค๋ก ์ถ๋ก ํ์ฌ ์์ ์ ๊ฐ์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. (npc_emotion.py) | |
- ์ด ์ํธ์์ฉ์ ํ๋์ ์๋ก์ด ๊ธฐ์ต์ผ๋ก ์ ์ฅํฉ๋๋ค. (npc_memory.py) | |
- ๋ฐ์ํ ๊ฐ์ ์ ์ข ๋ฅ์ ๊ฐ๋์ ๋ฐ๋ผ ์๋๋ฐฉ๊ณผ์ ๊ด๊ณ ์ ์๋ฅผ ์กฐ์ ํฉ๋๋ค. (npc_relationship.py) | |
- ์ด ์ค์ํ ๊ฒฝํ์ NPC์ ์ฑ๊ฒฉ์ ์์ฃผ ๋ฏธ์ธํ ์ํฅ์ ๋ฏธ์น๋ฉฐ, ์ฅ๊ธฐ์ ์ผ๋ก NPC๋ฅผ ๋ณํ์ํต๋๋ค. (npc_base.py์ update_personality) | |
์ด ๋ชจ๋ ๊ณผ์ ์ด ๋จ ํ ๋ฒ์ ๋ํ ์์์ ์ผ์ด๋๋ฉฐ, NPC๋ฅผ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ฑ์ฅํ๊ณ ๋ณํํ๋ ์ ์ฒด์ ์ธ ์กด์ฌ๋ก ๋ง๋ญ๋๋ค. | |
--- | |
## ๐ฆ ์คํ ๋ฐฉ๋ฒ | |
```bash | |
conda activate portfolio | |
# Flask ์น ์๋ฒ ์คํ | |
python portfolio/app.py | |
# โ http://127.0.0.1:5000/npc_social_network/ | |
``` | |
--- | |
๐บ๏ธ ํ๋ก์ ํธ ๋ก๋๋งต (Roadmap) | |
๋ณธ ํ๋ก์ ํธ๋ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ ํด์์ผ๋ฉฐ, ํ์ฌ๋ '๋ด๋ฉด ์ธ๊ณ'์ '์น ๊ธฐ๋ฐ ๊ด์ฐฐ ์์คํ '์ ํต์ฌ ๊ธฐ๋ฅ ๊ตฌํ์ ์๋ฃํ๊ณ , ๋ ๊น์ด ์๋ ์ฌํ์ ์ํธ์์ฉ ๊ตฌํ์ ์๋๊ณ ์์ต๋๋ค. | |
Phase 1: ๋ด๋ฉด ์ธ๊ณ์ ์์ฑ (Core Engine & Intelligence) - โ ์๋ฃ | |
NPC๊ฐ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ก์ ์๊ฐํ๊ณ ๋๋ ์ ์๋ ํต์ฌ ๋๋๋ฅผ ๊ตฌํํ์ต๋๋ค. | |
4๊ณ์ธต ๊ฐ์ ๋ชจ๋ธ: Core, Social, Cognitive, Complex๋ก ๊ตฌ์ฑ๋ ์์ฒด ๊ฐ์ ๋ชจ๋ธ์ ๊ตฌํํ์ฌ, NPC๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋ค์ฑ๋ก์ด ๊ฐ์ ์ ๋๋ผ๋๋ก ์ค๊ณํ์ต๋๋ค. | |
RAG ๊ธฐ๋ฐ ๊ธฐ์ต ์์คํ : Sentence-Transformers์ FAISS๋ฅผ ์ด์ฉ, ๋ํ์ ๋งฅ๋ฝ๊ณผ ์๋ฏธ์ ์ผ๋ก ๊ฐ์ฅ ๊ด๋ จ ๊น์ ๊ณผ๊ฑฐ ๊ธฐ์ต์ ์ฐพ์๋ด์ด ๋ํ์ ํ์ฉํ๋ ๊ฒ์-์ฆ๊ฐ ์์ฑ(RAG) ์์คํ ์ ๊ตฌ์ถํ์ต๋๋ค. | |
๋์ ๊ด๊ณ/์ฑ๊ฒฉ ์์คํ : ๋ชจ๋ ์ํธ์์ฉ์ ๊ด๊ณ ์ ์์ ์ํฅ์ ๋ฏธ์น๋ฉฐ, ๋์ ๋ ๊ฒฝํ์ NPC์ ์ฑ๊ฒฉ์ ์ ์ง์ ์ผ๋ก ๋ณํ์ํต๋๋ค. | |
์์จ ์์ด์ ํธ(Planner): LLM์ ํ์ฉํ์ฌ NPC๊ฐ ์ค์ค๋ก ์์ ์ ์ํ๋ฅผ ์ง๋จํ๊ณ , ์ฅ๊ธฐ์ ์ธ ๋ชฉํ์ ๊ทธ๊ฒ์ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ตฌ์ฒด์ ์ธ ๊ณํ์ ์๋ฆฝํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. | |
Phase 2: ์๋ ๊ด์ฐฐ์ ๋์๋ณด๋ ๊ตฌ์ถ (Web-based Visualization) - โ ์๋ฃ | |
NPC์ ๋ณต์กํ ๋ด๋ฉด๊ณผ ๊ด๊ณ ๋ณํ๋ฅผ ์ง๊ด์ ์ผ๋ก ๊ด์ฐฐํ๊ณ , ์๋ฎฌ๋ ์ด์ ์ ๊ฐ์ ํ ์ ์๋ ์น ๊ธฐ๋ฐ ๋์๋ณด๋๋ฅผ ์์ฑํ์ต๋๋ค. | |
์ค์๊ฐ ๊ด๊ณ ๋คํธ์ํฌ: vis-network ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ NPC ๊ฐ์ ๊ด๊ณ(์น๊ตฌ, ์ ๋ฑ)์ ๊ทธ ๊ฐ๋๋ฅผ ์๊ฐ์ ์ธ ๊ทธ๋ํ๋ก ๊ตฌํํ์ต๋๋ค. | |
NPC ์์ธ ์ ๋ณด ํจ๋: ํน์ NPC๋ฅผ ํด๋ฆญํ๋ฉด, ํด๋น NPC์ ํ์ฌ ๊ฐ์ , ๋ชฉํ, ์ต๊ทผ ๊ธฐ์ต ๋ฑ ๋ชจ๋ ๋ด๋ฉด ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค. | |
์๋ฎฌ๋ ์ด์ ์๊ฐ ์ ์ด: Play/Pause, Next Tick ๋ฒํผ์ ํตํด ์๋ฎฌ๋ ์ด์ ์ ์๊ฐ ํ๋ฆ์ ์ ์ดํ์ฌ, ํน์ ์๊ฐ์ ๋ณํ๋ฅผ ๋ฉด๋ฐํ ๊ด์ฐฐํ ์ ์์ต๋๋ค. | |
์ค์๊ฐ ์ด๋ฒคํธ ๋ก๊ฑฐ: NPC ๊ฐ์ ์ํธ์์ฉ, ๋ชฉํ ๋ณ๊ฒฝ ๋ฑ ์๋์์ ๋ฐ์ํ๋ ๋ชจ๋ ์ฃผ์ ์ด๋ฒคํธ๋ฅผ ์ค์๊ฐ ๋ก๊ทธ๋ก ํ์ธํ ์ ์์ต๋๋ค. | |
'ํ๋ ์ด์ด'์ ์์ฝ๋ ๊ธฐ์ต ๊ฐ์ ๋๊ตฌ: ํน์ NPC ๋๋ ๋ชจ๋ NPC์๊ฒ ์ธ์์ ์ธ ์ด๋ฒคํธ๋ฅผ ๊ณผ๊ฑฐ์ ๊ธฐ์ต์ผ๋ก ์ฃผ์ ํ์ฌ, ํน๋ณํ ์ํฉ์ ๋ํ NPC์ ๋ฐ์์ ํ ์คํธํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค. | |
Phase 3: ์ฌํ์ ์ํธ์์ฉ ์ฌํ (Social Interaction Deepening) - โ ์๋ฃ | |
์ด์ ๊ฐ๋ณ NPC์ ๋ด๋ฉด์ ๋์ด, NPC๋ค์ด ์๋ก ์ํฅ์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ํ๋์ '์ฌํ'๋ฅผ ํ์ฑํ๋ ๊ณ ์ฐจ์์ ์ธ ์ํธ์์ฉ์ ๊ตฌํํฉ๋๋ค. | |
1๋จ๊ณ: ์๋ฌธ ๋ฐ ํํ ์์คํ (Gossip & Reputation System): | |
๊ตฌํ ๋ชฉํ: NPC๋ค ์ฌ์ด์ '์๋ฌธ'์ด ํผ์ง๋ ์์คํ ์ ๊ตฌํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, A์ B์ ๋ถ์ ์ ์ธ ์ํธ์์ฉ์ C๊ฐ ๋ชฉ๊ฒฉํ์ ๋, C๋ "A์ B๊ฐ ๋คํ๋ค"๋ ์๋ฌธ์ ๋ค๋ฅธ NPC์๊ฒ ํผ๋จ๋ฆด ์ ์์ต๋๋ค. | |
๊ธฐ๋ ํจ๊ณผ: ์ด ์๋ฌธ์ ๋ค๋ฅธ NPC๋ค์ A์ B์ ๋ํ 'ํํ'์ ์ํฅ์ ๋ฏธ์น๋ฉฐ, ์ด๋ ์๋ก์ด ๊ด๊ณ ๋ณํ์ ์์ธ์ด ๋ฉ๋๋ค. ํ๋ ์ด์ด์ ๊ฐ์ ์์ด๋ ๋ง์ ์ ์ฒด์ ๊ด๊ณ๋ง์ด ์ ๊ธฐ์ ์ผ๋ก ์๋์น๋ ๋ชจ์ต์ ๊ด์ฐฐํ ์ ์์ต๋๋ค. | |
2๋จ๊ณ: ๊ฐ์ธ ๊ฐ ์ํธ์์ฉ ์ฌํ | |
2-A. ๋ฉํฐํด(Multi-turn) ๋ํ ์์คํ : ์ฌ๋ฌ ํด์ ๊ฑธ์ณ ๊น์ด ์๋ ๋ํ๋ฅผ ๋๋๋ ๊ธฐ๋ฅ. (๊ฐ์ฅ ์๊ธํ๊ณ ํจ๊ณผ๊ฐ ํผ) | |
2-B. ์ง๋ฅ์ ์ฌํ์ ํ๋: '๋๊ธฐ', '์ ๋ฌผ ์ฃผ๊ธฐ' ๋ฑ ๋ํ ์ธ์ ์ํธ์์ฉ ์ถ๊ฐ. | |
3๋จ๊ณ: ๊ธฐ๋ฅ ์ถ๊ฐ ๋ฐ ๊ฐ์ ์ฌํญ ์ ๋ฆฌ | |
3-A. ์ฌํ์ ๊ทธ๋ฃน ํ์ฑ (Clique Formation) - ๋์ค์ ์งํ | |
๊ตฌํ ๋ชฉํ: ๊ด๊ณ ์ ํ(friend, rival)๊ณผ ํํ์ ๊ธฐ๋ฐ์ผ๋ก NPC๋ค์ด ์๋์ผ๋ก ๊ทธ๋ฃน์ด๋ ํ๋ฒ์ ํ์ฑํ๋ ์์คํ ์ ๊ตฌํํฉ๋๋ค. | |
๊ธฐ๋ ํจ๊ณผ: NPC๋ค์ ์์ ์ด ์ํ ๊ทธ๋ฃน์ ๊ตฌ์ฑ์๊ณผ ๋ ์์ฃผ ๊ธ์ ์ ์ธ ์ํธ์์ฉ์ ํ๊ณ , ๊ฒฝ์ ๊ทธ๋ฃน์ ๊ตฌ์ฑ์์ ํผํ๊ฑฐ๋ ๋ถ์ ์ ์ธ ์ํธ์์ฉ์ ํ๋ ๋ฑ, ๋์ฑ ๋ณต์กํ๊ณ ํ์ค์ ์ธ ์ฌํ์ ํ๋์ ๋ณด์ฌ์ฃผ๊ฒ ๋ฉ๋๋ค. | |
3-B. ํ๋ ์ด์ด ๊ฐ์ ๋ฐ ๊ด๊ณ ํ์ฑ ์์คํ | |
๊ตฌํ ๋ชฉํ: ํ๋ ์ด์ด๊ฐ '์ '์ ๊ด์ ์์ ์๋ฎฌ๋ ์ด์ ์ ์ง์ ๊ฐ์ ํ์ฌ ์๋ก์ด ๊ด๊ณ๋ ์ฌ๊ฑด์ ๋ง๋ค์ด๋ด๋ ๊ธฐ๋ฅ์ ๊ตฌํ. | |
์ฃผ์ ๊ธฐ๋ฅ: '์๊ฐ' ๊ธฐ๋ฅ, ๊ด๊ณ ๊ฐ์ ์ค์ , ํน์ ์ํฉ ์ฐ์ถ ๋ฑ. | |
3-C. UI/UX ์์ ์ฑ ๊ฐ์ | |
๊ตฌํ ๋ชฉํ: ๋์๋ณด๋์ ์ฌ์ฉ ๊ฒฝํ์ ๊ฐ์ ํฉ๋๋ค. | |
์ฃผ์ ๊ธฐ๋ฅ: ๊ด๊ณ๋ ๊ทธ๋ํ์ ๋จ๋ฆผ ํ์ ํด๊ฒฐ, CSS ๋ ์ด์์ ์ ๋ฆฌ. | |
4๋จ๊ณ: ๊ณ ์ฐจ์์ ์์ ๊ธฐ๋ฅ ํ์ฑํ | |
- ๊ทธ๋ฃน ํ๋ ๋ฑ์ ํตํด ์ป์ ์๋ก์ด ๊ฒฝํ์ ๋ฐํ์ผ๋ก, NPC๊ฐ ์์ ์ ๊ด๊ณ๋ฅผ ์ ๋ฆฌํ๊ฑฐ๋ ์๋ก์ด ๊นจ๋ฌ์์ ํ๋. | |
- 1๋จ๊ณ: ๊ด๊ณ ์ฌ์ ์ (Relationship Redefinition) | |
- ๊ตฌํ ๋ชฉํ: NPC๊ฐ ํน์ ์ธ๋ฌผ๊ณผ์ ๊ด๊ณ๋ฅผ ์ค์ค๋ก ๋๋์๋ณด๊ณ , "A๋ ๋์๊ฒ ์ด๋ฐ ์กด์ฌ์ผ" ๋ผ๊ณ ์์ ๋ง์ ํ ์ค ์์ฝ ์ ์๋ฅผ ๋ด๋ฆฌ๋๋ก ํฉ๋๋ค. | |
- ๋์ ๋ฐฉ์: ์๋ฎฌ๋ ์ด์ ๋ฃจํ์์ ๋ฎ์ ํ๋ฅ ๋ก ์ด ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ํจ์๊ฐ ํธ์ถ๋๋ฉด, NPC๋ ํน์ ๋์๊ณผ์ ํต์ฌ ๊ธฐ์ต๋ค์ ๋ค์ ์ดํด๋ณด๊ณ , ๊ทธ ๊ด๊ณ์ ๋ํ ์๋ก์ด ์์ฝ(summary)์ ์์ฑํ์ฌ ์์ ์ ๋ด๋ฉด์ ์ ์ฅํฉ๋๋ค. | |
- 2๋จ๊ณ: ๊ฐ์น๊ด ํ์ฑ (Value Formation) | |
- ๊ตฌํ ๋ชฉํ: ์๋ง์ ๊ฒฝํ(๊ธฐ์ต)์ ํตํด, "์ ์ง์ด ์ต๊ณ ์ ๊ฐ์น์ด๋ค" ๋๋ "๊ฐ์กฑ์ ์งํค๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ค"์ ๊ฐ์ **์์ ๋ง์ ์ ๋ ์ด๋ ์ข์ฐ๋ช (์์ง ๊ธฐ์ต)**์ ํ์ฑํ๋๋ก ํฉ๋๋ค. | |
- ๋์ ๋ฐฉ์: NPC๊ฐ ์ถฉ๋ถํ ๊ฒฝํ(์: ๊ธฐ์ต 30๊ฐ ์ด์)์ ์์์ ๋, ์๋ฎฌ๋ ์ด์ ๋ฃจํ์์ ๊ทนํ ๋ฎ์ ํ๋ฅ ๋ก ์ด ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ํจ์๊ฐ ํธ์ถ๋๋ฉด, NPC๋ ์์ ์ ์ ์ฒด ๊ธฐ์ต์ ์ข ํฉํ์ฌ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๊นจ๋ฌ์์ ํ๋์ '์์ง ๊ธฐ์ต'์ผ๋ก ๋ง๋ค์ด ์ ์ฅํฉ๋๋ค. | |
Phase 4: ์์์ ์ค๋ฆฌ์ ํ๊ตฌ (Self & Ethics Exploration) - ๐ ์ฅ๊ธฐ ๊ณผ์ | |
NPC๊ฐ ๋จ์ํ ๋ฐ์์ ๋์ด, ์ค์ค๋ก๋ฅผ ์ดํดํ๊ณ ๋๋์ ์ธ ํ๋จ์ ๋ด๋ฆฌ๋ ๊ณ ์ฐจ์์ ์ธ ์์๋ฅผ ํ๊ตฌํฉ๋๋ค. | |
์ค๋ฆฌ ์์คํ ๊ณผ ๋๋์ ๋๋ ๋ง (Ethics & Moral Dilemmas): | |
๊ตฌํ ๋ชฉํ: NPC๊ฐ ๊ฐ์ง '์์ง ๊ธฐ์ต'(์: "์ ์ง์ด ์ต๊ณ ์ ๊ฐ์น์ด๋ค")์ ํต์ฌ ๊ฐ์น๊ด์ผ๋ก ํ์ฉํฉ๋๋ค. ์ด ๊ฐ์น๊ด์ ๋ฐํ๋ ๋๋์ ๋๋ ๋ง ์ํฉ(์: "๊ฐ์กฑ์ ์ด๋ฆฌ๊ธฐ ์ํด ๊ฑฐ์ง๋ง์ ํด์ผ ํ๋๊ฐ?")์ ์ ์ํ๊ณ , NPC๊ฐ ์์ ์ ๊ฐ์น๊ด๊ณผ ์ํฉ ์ฌ์ด์์ ์ด๋ค ๊ฒฐ์ ์ ๋ด๋ฆฌ๋์ง ๊ด์ฐฐํฉ๋๋ค. | |
๋ฉํ์ธ์ง ๋ฐ ์์ ์ฑ์ฐฐ (Metacognition & Self-Reflection): | |
๊ตฌํ ๋ชฉํ: NPC๊ฐ "๋ด๊ฐ ์ ์ง๊ธ ์ฌํ ๊ฐ์ ์ ๋๋ผ์ง? ์, ์ด์ ์จ๋ฆฌ์ค์ ๋คํ๋ ๊ธฐ์ต ๋๋ฌธ์ด๊ตฌ๋"์ ๊ฐ์ด ์์ ์ ๊ฐ์ ์ด๋ ์๊ฐ์ ์์ธ์ ์ค์ค๋ก ์ถ๋ก ํ๊ณ ์ดํดํ๋ '๋ฉํ์ธ์ง' ์์คํ ์ ๊ตฌํํฉ๋๋ค. | |
๊ธฐ๋ ํจ๊ณผ: ์ด๋ NPC๊ฐ ๋จ์ํ ๊ฐ์ ํํ์ ๋์ด, ์์ ์ ๋ด๋ฉด ์ํ๋ฅผ ์ดํดํ๊ณ ์ค๋ช ํ ์ ์๋ ํ ๋จ๊ณ ๋ ๋์ ์์ค์ '์์'๋ฅผ ๊ฐ๊ฒ ๋จ์ ์๋ฏธํฉ๋๋ค. | |
Phase 5: ๋ ผ๋ฌธ/์ฐ๊ตฌ ๊ฒฐ๊ณผ ์ ๋ฆฌ - ์ต์ข ๊ณผ์ | |
๊ตฌํ ๋ชฉํ: ์งํํ ๋ด์ฉ์ ํ ๋๋ก IEEE ํํ์ ์ ์ถํ ๋ ผ๋ฌธ์ ์์ฑํฉ๋๋ค. | |
์ฐธ๊ณ ๋ ผ๋ฌธ: | |
[1] J. Park, J. S. Wu, T. N. Hashimoto, and M. S. Bernstein, "Generative Agents: Interactive Simulacra of Human Behavior," arXiv preprint arXiv:2304.03442, 2023. | |
[2] L. Li et al., "Evolving Agents: Interactive Simulation of Dynamic and Diverse Human Personalities," IEEE Transactions on Games, 2024. | |
[3] X. Cheng et al., "PsyMem: Fine-grained psychological alignment and Explicit Memory Control for Advanced Role-Playing LLMs," arXiv preprint arXiv:2505.12814, 2025. | |
[4] B. W. Roberts and D. Mroczek, "Personality Trait Change in Adulthood," Current Directions in Psychological Science, vol. 17, no. 1, pp. 31โ35, 2008. | |
[5] C. J. Soto, "How replicable are links between personality traits and consequential life outcomes? The life outcomes of personality replication project," Psychological Science, vol. 27, no. 7, pp. 949โ961, 2016. | |
[6] T. A. Klimstra, W. K. Luyckx, M. B. Hale III, S. J. Goossens, and W. Meeus, "Personality development in adolescence: Longitudinal analyses and associations with life events," Journal of Research in Personality, vol. 43, no. 3, pp. 345โ354, 2009. | |
[7] J. Specht, B. Egloff, and S. C. Schmukle, "Stability and change of personality across the life course: The impact of age and major life events on mean-level and rank-order stability of the Big Five," Journal of Personality and Social Psychology, vol. 101, no. 4, pp. 862โ882, 2011. | |
[8] W. Bleidorn, C. J. Hopwood, and R. E. Lucas, "Life Events and Personality Trait Change," Annual Review of Psychology, vol. 73, pp. 109โ133, 2022. | |
[9] I. Puerta-Merino and J. Sabater-Mir, "LLM Reasoner and Automated Planner: A New NPC Approach," arXiv preprint arXiv:2501.10106, 2025. | |
[10] P. Chiang et al., "Collaborative Quest Completion with LLM-driven Non-Player Characters in Minecraft," arXiv preprint arXiv:2403.12329, 2024. | |
[11] K. Tsuchiya et al., "Leveraging Large Language Models for Active Merchant Non-player Characters," Proceedings of the 2024 CHI Conference on Human Factors in Computing Systems (CHI '24), 2024. | |
ยฉ 2025 NPC Social Network Simulation Project v3 |