Spaces:
Sleeping
Sleeping
Initial commit
Browse files
README.md
CHANGED
|
@@ -8,4 +8,103 @@ pinned: false
|
|
| 8 |
license: mit
|
| 9 |
---
|
| 10 |
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
license: mit
|
| 9 |
---
|
| 10 |
|
| 11 |
+
## βοΈ AI μλ² (ai_server/)
|
| 12 |
+
|
| 13 |
+
### μν & λ°μ΄ν° νλ¦
|
| 14 |
+
|
| 15 |
+
1. **κ²μ μλ² μμ² μμ (`app.py`)**
|
| 16 |
+
- μ΅μ μ
λ ₯λ§ μλ λμ: `{ text, npc_id, player_id, ... }`
|
| 17 |
+
- μ΅μ
: μν/컨ν
μ€νΈ λΆμ‘± μ `rag/docs/npc_config.json` λ±μμ NPC λ©νλ₯Ό μ‘°νν΄ λ³΄κ°
|
| 18 |
+
|
| 19 |
+
2. **μ μ²λ¦¬Β·ν둬ννΈ κ΅¬μ±(`pipeline/preprocess.py`, `utils/context_parser.py`, `manager/prompt_builder.py`)**
|
| 20 |
+
- νκ·Έ/컨ν
μ€νΈ/νλ μ΄μ΄ λ°νλ₯Ό λ¬Άμ΄ `<SYS>`, `<CTX>`, `<PLAYER>`, `<NPC>` ν¬λ§·μΌλ‘ ꡬμ±
|
| 21 |
+
|
| 22 |
+
3. **μΆλ‘ μμ²(`utils/hf_client.py`, `models/fallback_model.py`, `pipeline/generator.py`)**
|
| 23 |
+
- 쑰건 λΆμΆ©μ‘± input β `fallback_model.py`μμ λ체 μλ΅ μμ±
|
| 24 |
+
- 쑰건 μΆ©μ‘± input β `generator.py`μμ payload κ΅¬μ± ν HF Space `/predict_main` POST
|
| 25 |
+
|
| 26 |
+
4. **νμ²λ¦¬(`pipeline/postprocess.py`)**
|
| 27 |
+
- λͺ¨λΈ μλ΅μμ **λμ¬ ν
μ€νΈ, delta, flag**λ₯Ό νμ±Β·μ κ·ν
|
| 28 |
+
- flags β μκ·Έλͺ¨μ΄λ+threshold, delta β λ²μ ν΄λ¨νΒ·λΌμ΄λ©
|
| 29 |
+
|
| 30 |
+
5. **κ²μ μλ² μλ΅(`schemas.py`)**
|
| 31 |
+
- νμ€ JSONμΌλ‘ λ°ν
|
| 32 |
+
```json
|
| 33 |
+
{
|
| 34 |
+
"text": "NPCμ λλ΅...",
|
| 35 |
+
"delta": {"trust": 0.10, "relationship": 0.08},
|
| 36 |
+
"flags": {"give_item": true, "npc_main_story": false},
|
| 37 |
+
"meta": {"npc_id": "mother_abandoned_factory"}
|
| 38 |
+
}
|
| 39 |
+
```
|
| 40 |
+
|
| 41 |
+
---
|
| 42 |
+
|
| 43 |
+
### π λλ ν 리 ꡬ쑰
|
| 44 |
+
|
| 45 |
+
```bash
|
| 46 |
+
ai-server/
|
| 47 |
+
βββ app.py # FastAPI μνΈλ¦¬ν¬μΈνΈ
|
| 48 |
+
βββ config.py # μλ² μ€μ λ° λͺ¨λΈ κ²½λ‘ κ΄λ¦¬
|
| 49 |
+
βββ schemas.py # μμ²/μλ΅ λ°μ΄ν° ꡬ쑰 μ μ
|
| 50 |
+
βββ requirements.txt # μμ‘΄μ± ν¨ν€μ§ λͺ©λ‘
|
| 51 |
+
βββ pipeline/ # λν νλ¦ μ²λ¦¬ λͺ¨λ
|
| 52 |
+
β βββ preprocess.py # μ
λ ₯ μ μ²λ¦¬ λ° ν둬ννΈ κ΅¬μ±
|
| 53 |
+
β βββ postprocess.py # λͺ¨λΈ μΆλ ₯ νμ²λ¦¬
|
| 54 |
+
β βββ generator.py # λͺ¨λΈ μΆλ‘ μμ² μ²λ¦¬
|
| 55 |
+
βββ rag/ # RAG κΈ°λ° flag ν΄μ λͺ¨λ
|
| 56 |
+
β βββ rag_manager.py
|
| 57 |
+
β βββ docs/npc_config.json
|
| 58 |
+
βββ utils/ # μ νΈλ¦¬ν° λͺ¨λ
|
| 59 |
+
β βββ hf_client.py # HF API ν΅μ
|
| 60 |
+
β βββ context_parser.py # λν λ§₯λ½ νμ±
|
| 61 |
+
βββ models/ # λͺ¨λΈ λ‘λ© λ° fallback μ²λ¦¬
|
| 62 |
+
β βββ model_loader.py
|
| 63 |
+
```
|
| 64 |
+
|
| 65 |
+
---
|
| 66 |
+
|
| 67 |
+
### π§© μ΅μ RAG νμ
λ³ λ§€ν (11μ’
)
|
| 68 |
+
|
| 69 |
+
| **type** | **μ‘°ν μμ ** | **μ‘°ν 쑰건** | **μ¬μ© λͺ¨λ/ν¨μ** | **μ£Όμ λͺ©μ ** |
|
| 70 |
+
|----------|--------------|---------------|--------------------|---------------|
|
| 71 |
+
| `trigger_def` | preprocess_input | npc_id, quest_stage | retrieve(...) | λ©μΈ κ²½λ‘ μ‘°κ±΄ νμ |
|
| 72 |
+
| `fallback` | preprocess_input | npc_id, quest_stage | retrieve(...) | fallback prompt κ΅¬μ± |
|
| 73 |
+
| `forbidden_trigger_list` | preprocess_input | npc_id | _load_forbidden_trigger_data | κΈμ§ νΈλ¦¬κ±° κ°μ§ |
|
| 74 |
+
| `trigger_meta` | preprocess_input | npc_id, trigger | _load_trigger_meta | νΉμ fallback μ delta/action νμ |
|
| 75 |
+
| `lore` | build_main_prompt | npc_id, quest_stage/any | RAG main docs | μΈκ³κ΄/λ°°κ²½ μ€λͺ
|
|
| 76 |
+
| `description` | build_main_prompt | npc_id, quest_stage | RAG main docs | νμ¬ μν© μ€λͺ
|
|
| 77 |
+
| `flag_def` | postprocess_pipeline | npc_id, quest_stage, flag_name | pre_data["rag_main_docs"] | flag threshold/μμ λ¬Έμ₯ |
|
| 78 |
+
| `main_res_validate` | postprocess_pipeline | npc_id, quest_stage | pre_data["rag_main_docs"] | μλ΅ κ²μ¦ κΈ°μ€ |
|
| 79 |
+
| `npc_persona` | build_main_prompt | npc_id | retrieve(...) | NPC μ±κ²©Β·νΉμ± λ°μ |
|
| 80 |
+
| `dialogue_turn` | postprocess_pipeline | npc_id, quest_stage | retrieve(...) | λν μμ μ°Έμ‘° |
|
| 81 |
+
| *(μμ)* | fallback_final_check | pre_data["trigger_meta"] | - | μλ΅ μλ―Έ μΌμΉ κ²μ¦ |
|
| 82 |
+
|
| 83 |
+
---
|
| 84 |
+
|
| 85 |
+
### π λ°μ΄ν° νλ¦ μμ½
|
| 86 |
+
|
| 87 |
+
1. **preprocess_input()**
|
| 88 |
+
- trigger_def β λ©μΈ 쑰건 νμ
|
| 89 |
+
- forbidden_trigger_list + trigger_meta β νΉμ fallback κ°μ§
|
| 90 |
+
- fallback β μΌλ° fallback μ€νμΌ
|
| 91 |
+
|
| 92 |
+
2. **build_main_prompt()**
|
| 93 |
+
- lore + description + npc_persona β λ©μΈ prompt 컨ν
μ€νΈ ꡬμ±
|
| 94 |
+
|
| 95 |
+
3. **build_fallback_prompt()**
|
| 96 |
+
- fallback_style + trigger_meta β fallback prompt ꡬμ±
|
| 97 |
+
|
| 98 |
+
4. **postprocess_pipeline()**
|
| 99 |
+
- flag_def β flag threshold/μμ
|
| 100 |
+
- main_res_validate β μλ΅ κ²μ¦
|
| 101 |
+
|
| 102 |
+
5. **fallback_final_check()**
|
| 103 |
+
- trigger_meta β delta/action μλ―Έ μΌμΉ κ²μ¦
|
| 104 |
+
|
| 105 |
+
---
|
| 106 |
+
|
| 107 |
+
### π ν
μ€νΈ
|
| 108 |
+
μ
λ°μ΄νΈ μμ
|
| 109 |
+
|
| 110 |
+
---
|