m97j's picture
Initial commit
361d672
---
title: PersonaChatEngine Ai Server
emoji: πŸ‘€
colorFrom: green
colorTo: green
sdk: docker
pinned: false
license: mit
---
## βš™οΈ AI μ„œλ²„ (ai_server/)
### μ—­ν•  & 데이터 흐름
1. **κ²Œμž„ μ„œλ²„ μš”μ²­ μˆ˜μ‹ (`app.py`)**
- μ΅œμ†Œ μž…λ ₯만 와도 λ™μž‘: `{ text, npc_id, player_id, ... }`
- μ˜΅μ…˜: μƒνƒœ/μ»¨ν…μŠ€νŠΈ λΆ€μ‘± μ‹œ `rag/docs/npc_config.json` λ“±μ—μ„œ NPC 메타λ₯Ό μ‘°νšŒν•΄ 보강
2. **μ „μ²˜λ¦¬Β·ν”„λ‘¬ν”„νŠΈ ꡬ성(`pipeline/preprocess.py`, `utils/context_parser.py`, `manager/prompt_builder.py`)**
- νƒœκ·Έ/μ»¨ν…μŠ€νŠΈ/ν”Œλ ˆμ΄μ–΄ λ°œν™”λ₯Ό λ¬Άμ–΄ `<SYS>`, `<CTX>`, `<PLAYER>`, `<NPC>` 포맷으둜 ꡬ성
3. **μΆ”λ‘  μš”μ²­(`utils/hf_client.py`, `models/fallback_model.py`, `pipeline/generator.py`)**
- 쑰건 뢈좩쑱 input β†’ `fallback_model.py`μ—μ„œ λŒ€μ²΄ 응닡 생성
- 쑰건 μΆ©μ‘± input β†’ `generator.py`μ—μ„œ payload ꡬ성 ν›„ HF Space `/predict_main` POST
4. **ν›„μ²˜λ¦¬(`pipeline/postprocess.py`)**
- λͺ¨λΈ μ‘λ‹΅μ—μ„œ **λŒ€μ‚¬ ν…μŠ€νŠΈ, delta, flag**λ₯Ό νŒŒμ‹±Β·μ •κ·œν™”
- flags β†’ μ‹œκ·Έλͺ¨μ΄λ“œ+threshold, delta β†’ λ²”μœ„ ν΄λž¨ν”„Β·λΌμš΄λ”©
5. **κ²Œμž„ μ„œλ²„ 응닡(`schemas.py`)**
- ν‘œμ€€ JSON으둜 λ°˜ν™˜
```json
{
"text": "NPC의 λŒ€λ‹΅...",
"delta": {"trust": 0.10, "relationship": 0.08},
"flags": {"give_item": true, "npc_main_story": false},
"meta": {"npc_id": "mother_abandoned_factory"}
}
```
---
### πŸ“ 디렉토리 ꡬ쑰
```bash
ai-server/
β”œβ”€β”€ app.py # FastAPI μ—”νŠΈλ¦¬ν¬μΈνŠΈ
β”œβ”€β”€ config.py # μ„œλ²„ μ„€μ • 및 λͺ¨λΈ 경둜 관리
β”œβ”€β”€ schemas.py # μš”μ²­/응닡 데이터 ꡬ쑰 μ •μ˜
β”œβ”€β”€ requirements.txt # μ˜μ‘΄μ„± νŒ¨ν‚€μ§€ λͺ©λ‘
β”œβ”€β”€ pipeline/ # λŒ€ν™” 흐름 처리 λͺ¨λ“ˆ
β”‚ β”œβ”€β”€ preprocess.py # μž…λ ₯ μ „μ²˜λ¦¬ 및 ν”„λ‘¬ν”„νŠΈ ꡬ성
β”‚ β”œβ”€β”€ postprocess.py # λͺ¨λΈ 좜λ ₯ ν›„μ²˜λ¦¬
β”‚ └── generator.py # λͺ¨λΈ μΆ”λ‘  μš”μ²­ 처리
β”œβ”€β”€ rag/ # RAG 기반 flag 해석 λͺ¨λ“ˆ
β”‚ β”œβ”€β”€ rag_manager.py
β”‚ └── docs/npc_config.json
β”œβ”€β”€ utils/ # μœ ν‹Έλ¦¬ν‹° λͺ¨λ“ˆ
β”‚ β”œβ”€β”€ hf_client.py # HF API 톡신
β”‚ └── context_parser.py # λŒ€ν™” λ§₯락 νŒŒμ‹±
β”œβ”€β”€ models/ # λͺ¨λΈ λ‘œλ”© 및 fallback 처리
β”‚ β”œβ”€β”€ emotion_model.py # emotion model을 μ΄μš©ν•œ inference μ§„ν–‰
β”‚ β”œβ”€β”€ fallback_model.py # fallback model을 μ΄μš©ν•œ inference μ§„ν–‰
β”‚ └── model_loader.py
└── manager/
β”œβ”€β”€ agent_manager.py
β”œβ”€β”€ dialogue_manager.py # 전체 pipeline λͺ¨λ“ˆ 관리
└── prompt_builder.py
```
---
### 🧩 μ΅œμ‹  RAG νƒ€μž…λ³„ λ§€ν•‘ (11μ’…)
| **type** | **쑰회 μ‹œμ ** | **쑰회 쑰건** | **μ‚¬μš© λͺ¨λ“ˆ/ν•¨μˆ˜** | **μ£Όμš” λͺ©μ ** |
|----------|--------------|---------------|--------------------|---------------|
| `trigger_def` | preprocess_input | npc_id, quest_stage | retrieve(...) | 메인 경둜 쑰건 νŒμ • |
| `fallback` | preprocess_input | npc_id, quest_stage | retrieve(...) | fallback prompt ꡬ성 |
| `forbidden_trigger_list` | preprocess_input | npc_id | _load_forbidden_trigger_data | κΈˆμ§€ 트리거 감지 |
| `trigger_meta` | preprocess_input | npc_id, trigger | _load_trigger_meta | 특수 fallback μ‹œ delta/action ν™•μ • |
| `lore` | build_main_prompt | npc_id, quest_stage/any | RAG main docs | 세계관/λ°°κ²½ μ„€λͺ… |
| `description` | build_main_prompt | npc_id, quest_stage | RAG main docs | ν˜„μž¬ 상황 μ„€λͺ… |
| `flag_def` | postprocess_pipeline | npc_id, quest_stage, flag_name | pre_data["rag_main_docs"] | flag threshold/μ˜ˆμ‹œ λ¬Έμž₯ |
| `main_res_validate` | postprocess_pipeline | npc_id, quest_stage | pre_data["rag_main_docs"] | 응닡 검증 κΈ°μ€€ |
| `npc_persona` | build_main_prompt | npc_id | retrieve(...) | NPC μ„±κ²©Β·νŠΉμ„± 반영 |
| `dialogue_turn` | postprocess_pipeline | npc_id, quest_stage | retrieve(...) | λŒ€ν™” μ˜ˆμ‹œ μ°Έμ‘° |
| *(μ—†μŒ)* | fallback_final_check | pre_data["trigger_meta"] | - | 응닡 의미 일치 검증 |
---
### πŸ“Œ 데이터 흐름 μš”μ•½
1. **preprocess_input()**
- trigger_def β†’ 메인 쑰건 νŒμ •
- forbidden_trigger_list + trigger_meta β†’ 특수 fallback 감지
- fallback β†’ 일반 fallback μŠ€νƒ€μΌ
2. **build_main_prompt()**
- lore + description + npc_persona β†’ 메인 prompt μ»¨ν…μŠ€νŠΈ ꡬ성
3. **build_fallback_prompt()**
- fallback_style + trigger_meta β†’ fallback prompt ꡬ성
4. **postprocess_pipeline()**
- flag_def β†’ flag threshold/μ˜ˆμ‹œ
- main_res_validate β†’ 응닡 검증
5. **fallback_final_check()**
- trigger_meta β†’ delta/action 의미 일치 검증
---
### πŸ”— ν…ŒμŠ€νŠΈ
μ—…λ°μ΄νŠΈ μ˜ˆμ •
---
<!-- app-tab:start -->
# πŸ‘€ PersonaChatEngine AI Server
κ²Œμž„ λ‚΄ NPC λŒ€ν™” μ—”μ§„ API μ„œλ²„μž…λ‹ˆλ‹€.
μ΅œμ†Œ μž…λ ₯λ§ŒμœΌλ‘œλ„ λ™μž‘ν•˜λ©°, RAG 기반 λ¬Έμ„œμ™€ NPC 메타데이터λ₯Ό ν™œμš©ν•΄ λŒ€ν™”λ₯Ό λ³΄κ°•ν•©λ‹ˆλ‹€.
### βš™οΈ μ£Όμš” κΈ°λŠ₯
- κ²Œμž„ μ„œλ²„ μš”μ²­ μˆ˜μ‹  및 μ „μ²˜λ¦¬
- 쑰건 νŒμ • ν›„ 메인/폴백 λͺ¨λΈ μΆ”λ‘ 
- RAG 기반 세계관·상황·NPC 성격 반영
- 응닡 ν›„μ²˜λ¦¬ 및 JSON ν‘œμ€€ 응닡 λ°˜ν™˜
<!-- app-tab:end -->
---