Merge pull request #36 from mata-1223/develop
Browse files- core/feature_trace.py +114 -0
- routes/sessions.py +5 -0
- scenarios/worker-v3/engine/L3_serving.json +151 -10
- scripts/build_worker_scenario.py +78 -19
core/feature_trace.py
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
"""
|
| 3 |
+
ํ์ ๋ณ์(Index/Score) ์ฐ์ถ ๊ทผ๊ฑฐ trace โ ์๋๋ฆฌ์ค ๋ฌด๊ด.
|
| 4 |
+
|
| 5 |
+
L1 batch_builder ์ ์ ์ธํ step formula ์ ์ค์ ์
๋ ฅ๊ฐ์ ํ์ด,
|
| 6 |
+
๊ฐ ์ต์ข
ํ์ ๋ณ์๊ฐ "์ด๋ค ์
๋ ฅ์ผ๋ก ์ด๋ป๊ฒ ๊ณ์ฐ๋๋์ง"๋ฅผ ์ฌ๋์ด ์ฝ์ ์ ์๋
|
| 7 |
+
๊ตฌ์กฐ๋ก ๋ฐํํ๋ค. (ํ๋ก ํธ ๋ถ์ ์ค๋ฒ๋ ์ด์ ๋ณ์ ํด๋ฆญ โ ์ฐ์ ํ์ค๋ฒ์ฉ)
|
| 8 |
+
|
| 9 |
+
๋ฐํ: { ํ์๋ณ์๋ช
: {
|
| 10 |
+
"value": float, # ์ต์ข
๊ฐ
|
| 11 |
+
"clamp": [lo,hi] | None, # ๋ฒ์ ์ ํ(์์ผ๋ฉด)
|
| 12 |
+
"kind": "passthrough" | "weighted_sum",
|
| 13 |
+
"terms": [ { # ๊ธฐ์ฌ ํญ
|
| 14 |
+
"ref": str, # ์
๋ ฅ ๋ณ์๋ช
(base ๋๋ ๋
ธ์ถ Index๋ช
)
|
| 15 |
+
"ref_value": float, # ๊ทธ ์
๋ ฅ์ ํ์ฌ ๊ฐ
|
| 16 |
+
"weight": float | None, # ๊ฐ์ค์น(์ ํ [w,0] ํญ์ผ ๋)
|
| 17 |
+
"contribution": float, # ์ด ํญ์ด ๊ฒฐ๊ณผ์ ๋ํ ๊ฐ
|
| 18 |
+
}, ... ],
|
| 19 |
+
} }
|
| 20 |
+
"""
|
| 21 |
+
from typing import Any
|
| 22 |
+
|
| 23 |
+
from core.engines import config
|
| 24 |
+
from core.engines.extract import survey_base
|
| 25 |
+
from core.engines.formula import eval_formula, _load_py
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
def build_feature_trace(scenario_id: str, answers: dict[str, str]) -> dict[str, dict]:
|
| 29 |
+
survey = config.get_survey(scenario_id)
|
| 30 |
+
spec = config.get_batch_builder(scenario_id)
|
| 31 |
+
steps = spec.get("steps", [])
|
| 32 |
+
if not steps:
|
| 33 |
+
return {}
|
| 34 |
+
|
| 35 |
+
# 0) base feature โ ์ ํํ ์๋ต ๋ผ๋ฒจ (์ซ์๊ฐ ๋์ "22์ ์ดํ" ๊ฐ์ ์๋ฏธ ํ์์ฉ)
|
| 36 |
+
base_answer: dict[str, str] = {}
|
| 37 |
+
for q in survey.get("questions", []):
|
| 38 |
+
code = answers.get(q["id"])
|
| 39 |
+
if code is None:
|
| 40 |
+
continue
|
| 41 |
+
opt = next((o for o in q.get("options", []) if o.get("code") == code), None)
|
| 42 |
+
if not opt:
|
| 43 |
+
continue
|
| 44 |
+
for fname in (opt.get("features") or {}):
|
| 45 |
+
base_answer[fname] = opt.get("label")
|
| 46 |
+
|
| 47 |
+
# 1) ๋ชจ๋ step์ ์ค๊ฐ๊ฐ ํฌํจํด ํ๊ฐ (run_batch_builder ์ ๋์ผํ๋ intermediate ๋ณด์กด)
|
| 48 |
+
feats: dict[str, Any] = dict(survey_base(survey, answers))
|
| 49 |
+
for k, v in spec.get("defaults", {}).items():
|
| 50 |
+
feats.setdefault(k, v)
|
| 51 |
+
if "pre_hook" in spec:
|
| 52 |
+
feats.update(_load_py(spec["pre_hook"])(feats))
|
| 53 |
+
|
| 54 |
+
inter_names: set[str] = set()
|
| 55 |
+
step_formula: dict[str, Any] = {}
|
| 56 |
+
for st in steps:
|
| 57 |
+
val = eval_formula(st["formula"], feats)
|
| 58 |
+
if "round" in st:
|
| 59 |
+
val = round(val, st["round"])
|
| 60 |
+
feats[st["name"]] = val
|
| 61 |
+
step_formula[st["name"]] = st["formula"]
|
| 62 |
+
if st.get("intermediate"):
|
| 63 |
+
inter_names.add(st["name"])
|
| 64 |
+
|
| 65 |
+
# 2) ์ค๊ฐ๊ฐ(_FAT ๋ฑ) โ ๊ทธ๊ฒ์ ๊ทธ๋๋ก ๋
ธ์ถํ๋ ์ต์ข
Index๋ช
๋งคํ (passthrough)
|
| 66 |
+
inter_to_final: dict[str, str] = {}
|
| 67 |
+
for st in steps:
|
| 68 |
+
f = st["formula"]
|
| 69 |
+
if (not st.get("intermediate") and f.get("feat") in inter_names
|
| 70 |
+
and f.get("linear") == [1, 0] and "div" not in f and "mul" not in f):
|
| 71 |
+
inter_to_final[f["feat"]] = st["name"]
|
| 72 |
+
|
| 73 |
+
def _terms(formula: dict) -> list[dict]:
|
| 74 |
+
if "terms" in formula:
|
| 75 |
+
return formula["terms"]
|
| 76 |
+
return [formula] # ๋จ์ผ feat ๋
ธ๋
|
| 77 |
+
|
| 78 |
+
def _weight(term: dict):
|
| 79 |
+
lin = term.get("linear")
|
| 80 |
+
if lin and lin[1] == 0 and "div" not in term and "mul" not in term:
|
| 81 |
+
return lin[0]
|
| 82 |
+
return None
|
| 83 |
+
|
| 84 |
+
trace: dict[str, dict] = {}
|
| 85 |
+
for st in steps:
|
| 86 |
+
if st.get("intermediate"):
|
| 87 |
+
continue
|
| 88 |
+
name = st["name"]
|
| 89 |
+
f = st["formula"]
|
| 90 |
+
# passthrough Index ๋ ์ค๊ฐ๊ฐ ์ฐ์์ ์ธ๋ผ์ธํด base ์
๋ ฅ๊น์ง ๋
ธ์ถ
|
| 91 |
+
eff = f
|
| 92 |
+
kind = "weighted_sum"
|
| 93 |
+
if f.get("feat") in inter_names and f.get("linear") == [1, 0]:
|
| 94 |
+
eff = step_formula[f["feat"]]
|
| 95 |
+
kind = "passthrough"
|
| 96 |
+
clamp = eff["clamp"] if isinstance(eff, dict) and "clamp" in eff else None
|
| 97 |
+
|
| 98 |
+
terms = []
|
| 99 |
+
for t in _terms(eff):
|
| 100 |
+
ref = t.get("feat")
|
| 101 |
+
terms.append({
|
| 102 |
+
"ref": inter_to_final.get(ref, ref),
|
| 103 |
+
"ref_value": round(float(feats.get(ref, 0.0)), 2),
|
| 104 |
+
"ref_answer": base_answer.get(ref), # base ์
๋ ฅ์ด๋ฉด ์ ํ ์๋ต ๋ผ๋ฒจ (์์ผ๋ฉด None)
|
| 105 |
+
"weight": _weight(t),
|
| 106 |
+
"contribution": round(eval_formula(t, feats), 2),
|
| 107 |
+
})
|
| 108 |
+
trace[name] = {
|
| 109 |
+
"value": round(float(feats[name]), 2),
|
| 110 |
+
"clamp": clamp,
|
| 111 |
+
"kind": kind,
|
| 112 |
+
"terms": terms,
|
| 113 |
+
}
|
| 114 |
+
return trace
|
routes/sessions.py
CHANGED
|
@@ -122,10 +122,15 @@ async def submit_survey(session_id: str, submission: SurveySubmission) -> dict[s
|
|
| 122 |
_explain.attach_reasoning(_eng, _combined, top_items)
|
| 123 |
all_probabilities = to_probability_dict(intent_scores, scenario_id=scenario_id)
|
| 124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
return {
|
| 126 |
"session_id": session_id,
|
| 127 |
"stage": "initial",
|
| 128 |
"batch_features": batch_features,
|
|
|
|
| 129 |
"top_n": top_items,
|
| 130 |
"others": others,
|
| 131 |
"all_probabilities": all_probabilities,
|
|
|
|
| 122 |
_explain.attach_reasoning(_eng, _combined, top_items)
|
| 123 |
all_probabilities = to_probability_dict(intent_scores, scenario_id=scenario_id)
|
| 124 |
|
| 125 |
+
# ํ์ ๋ณ์ ์ฐ์ถ ๊ทผ๊ฑฐ(๋ถ์ ์ค๋ฒ๋ ์ด์ ๋ณ์ ํด๋ฆญ โ ์ฐ์ ํ์)
|
| 126 |
+
from core.feature_trace import build_feature_trace
|
| 127 |
+
feature_trace = build_feature_trace(scenario_id, submission.answers)
|
| 128 |
+
|
| 129 |
return {
|
| 130 |
"session_id": session_id,
|
| 131 |
"stage": "initial",
|
| 132 |
"batch_features": batch_features,
|
| 133 |
+
"feature_trace": feature_trace,
|
| 134 |
"top_n": top_items,
|
| 135 |
"others": others,
|
| 136 |
"all_probabilities": all_probabilities,
|
scenarios/worker-v3/engine/L3_serving.json
CHANGED
|
@@ -2,51 +2,192 @@
|
|
| 2 |
"context_library": {
|
| 3 |
"scenario_id": "worker-v3",
|
| 4 |
"version": "0.1.0",
|
| 5 |
-
"description": "์ง์ฅ์ธ ์๋๋ฆฌ์ค Intent๋ณ
|
| 6 |
"channels": [
|
| 7 |
{
|
| 8 |
"id": "push",
|
| 9 |
"name": "์ฑ Push",
|
| 10 |
"icon": "๐ฑ",
|
|
|
|
| 11 |
"characteristic": "๊ณ ๊ฐ ์ํ์ ๋ง๋ ์ถ์ฒ ์๋น์ค๋ฅผ MyKT ์ฑ Push ๋ฉ์์ง๋ก ์ ๊ณต โ ๋ฒ์์ ์ํยท์ผ์ ํ๋ณต ์ง์"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
}
|
| 13 |
],
|
| 14 |
"actions": {
|
| 15 |
"INT-W110": {
|
| 16 |
"push": "์ค๋ ํ๋ฃจ๋ ์๊ณ ํ์
จ์ต๋๋ค. MyKT ์ง๋๋ฎค์ง ASMR ํ๋ ์ด๋ฆฌ์คํธ๋ก ์กฐ์ฉํ ํด์ ์๊ฐ์ ๊ฐ์ ธ๋ณด์ธ์.",
|
| 17 |
-
"service": "์ง๋๋ฎค์ง ํ๋งยทASMR ์ฝํ
์ธ "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
},
|
| 19 |
"INT-W120": {
|
| 20 |
"push": "์ง์น ์ ๋
, ์ง์ ์ค๋นํ์ง ์์๋ ๊ด์ฐฎ์์. MyKT ๋ฉค๋ฒ์ญ ๋ฐฐ๋ฌ ํ ์ธ ์ฟ ํฐ์ด ๋์ฐฉํ์ต๋๋ค.",
|
| 21 |
-
"service": "๋ฐฐ๋ฌ ์ ํด ํ ์ธ ํํ"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
},
|
| 23 |
"INT-W130": {
|
| 24 |
"push": "๋ฆ์ ์๊ฐ๊น์ง ๊นจ์ด ๊ณ์๋ค์. ์ง๋๋ฎค์ง ์๋ฉด ์ ๋ ์ฝํ
์ธ ๋ก ํธ์ํ ๋ฐค์ ์ค๋นํด๋ณด์ธ์.",
|
| 25 |
-
"service": "์๋ฉดยท๋ช
์ ์ฝํ
์ธ "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
},
|
| 27 |
"INT-W140": {
|
| 28 |
"push": "์ต๊ทผ ์ํ ๋ฆฌ๋ฌ์ด ๋ถ๊ท์นํด ๋ณด์
๋๋ค. ์ด๋ยท๊ฑด๊ฐ ์ ํด ํํ์ผ๋ก ๊ฐ๋ฒผ์ด ์ฐ์ฑ
๋ถํฐ ์์ํด๋ณด์ธ์.",
|
| 29 |
-
"service": "๊ฑด๊ฐยท์ด๋ ์ ํด ํํ"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
},
|
| 31 |
"INT-W210": {
|
| 32 |
"push": "์ค๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฐ๋ฌยท์ผํ ๋ฉค๋ฒ์ญ ํ ์ธ ํํ์ด ์์ต๋๋ค. ์์ ๋ณด์์ผ๋ก ํ๋ฃจ๋ฅผ ๋ง๋ฌด๋ฆฌํด๋ณด์ธ์.",
|
| 33 |
-
"service": "๋ฐฐ๋ฌยท์ผํ ๋ฉค๋ฒ์ญ ํ ์ธ"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
},
|
| 35 |
"INT-W220": {
|
| 36 |
"push": "์ด๋ฒ ์ฃผ๋ง ์ ์ ๋ ๋๋ณด๋ ๊ฑด ์ด๋จ๊น์? MyKT ์ ์ฉ ์๋ฐ ํ ์ธ ํํ์ ํ์ธํด๋ณด์ธ์.",
|
| 37 |
-
"service": "์ฌํยท์๋ฐ ํ๋ก๋ชจ์
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
},
|
| 39 |
"INT-W230": {
|
| 40 |
"push": "์ด๋์ ์์ํ๊ธฐ ์ข์ ํ์ด๋ฐ์
๋๋ค. ํฌ์คยท๋ฌ๋ ์ ํด ์ฟ ํฐ์ด ์ค๋น๋์ด ์์ต๋๋ค.",
|
| 41 |
-
"service": "ํฌ์คยท๋ฌ๋ ์ ํด ์ฟ ํฐ"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
},
|
| 43 |
"INT-W240": {
|
| 44 |
"push": "๋ง์์ ์ฌ๊ฒ ํด์ค ์๊ฐ์ด ํ์ํด ๋ณด์
๋๋ค. ์ง๋๋ฎค์ง ๋ช
์ ์ฝํ
์ธ ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค.",
|
| 45 |
-
"service": "์ง๋๋ฎค์ง ๋ช
์ยทํ๋ง ์ฝํ
์ธ "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
},
|
| 47 |
"INT-W250": {
|
| 48 |
"push": "์ค๋๋ง์ ์ง์ธ๊ณผ ์ฐ๋ฝํด๋ณด๋ ๊ฑด ์ด๋จ๊น์? ์นดํ ๋ฉค๋ฒ์ญ ํ ์ธ ํํ์ ํ์ฉํด๋ณด์ธ์.",
|
| 49 |
-
"service": "์นดํยท๋ฌธํ ๋ฉค๋ฒ์ญ ํํ"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
}
|
| 51 |
}
|
| 52 |
}
|
|
|
|
| 2 |
"context_library": {
|
| 3 |
"scenario_id": "worker-v3",
|
| 4 |
"version": "0.1.0",
|
| 5 |
+
"description": "์ง์ฅ์ธ ์๋๋ฆฌ์ค Intent๋ณ ๋ฉํฐ์ฑ๋ ํ์ฉ ์์ (Pushยท์ง๋๋ฎค์งยท๊ธฐ๊ฐ์ง๋) + ๋น์ฆ๋์ค ์ํฉํธ",
|
| 6 |
"channels": [
|
| 7 |
{
|
| 8 |
"id": "push",
|
| 9 |
"name": "์ฑ Push",
|
| 10 |
"icon": "๐ฑ",
|
| 11 |
+
"kind": "phone-push",
|
| 12 |
"characteristic": "๊ณ ๊ฐ ์ํ์ ๋ง๋ ์ถ์ฒ ์๋น์ค๋ฅผ MyKT ์ฑ Push ๋ฉ์์ง๋ก ์ ๊ณต โ ๋ฒ์์ ์ํยท์ผ์ ํ๋ณต ์ง์"
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"id": "genie_music",
|
| 16 |
+
"name": "์ง๋๋ฎค์ง",
|
| 17 |
+
"icon": "๐ต",
|
| 18 |
+
"kind": "music-card",
|
| 19 |
+
"characteristic": "ํ์ ์ฒญ์ทจ ์ด๋ ฅยท์๊ฐ๋ ์ทจํฅ์ ๋ฐํ์ผ๋ก ์ง๊ธ ์ํ์ ๋ง๋ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ํ๋ ์ด์
"
|
| 20 |
+
},
|
| 21 |
+
{
|
| 22 |
+
"id": "gigagenie",
|
| 23 |
+
"name": "๊ธฐ๊ฐ์ง๋ ยท ํIoT",
|
| 24 |
+
"icon": "๐ ",
|
| 25 |
+
"kind": "device-voice",
|
| 26 |
+
"characteristic": "์์ฑ ํ๋ง๋๋ก ์ง์ ํ๊ฒฝ(์กฐ๋ช
ยท์ปคํผยท๋์ด๋ฝยท๊ฐ์ )์ ์ํ์ ๋ง๊ฒ ์๋ ์ธํ
"
|
| 27 |
}
|
| 28 |
],
|
| 29 |
"actions": {
|
| 30 |
"INT-W110": {
|
| 31 |
"push": "์ค๋ ํ๋ฃจ๋ ์๊ณ ํ์
จ์ต๋๋ค. MyKT ์ง๋๋ฎค์ง ASMR ํ๋ ์ด๋ฆฌ์คํธ๋ก ์กฐ์ฉํ ํด์ ์๊ฐ์ ๊ฐ์ ธ๋ณด์ธ์.",
|
| 32 |
+
"service": "์ง๋๋ฎค์ง ํ๋งยทASMR ์ฝํ
์ธ ",
|
| 33 |
+
"gigagenie": {
|
| 34 |
+
"command": "๋๊ตด ๋ชจ๋ ์ผ์ค",
|
| 35 |
+
"devices": [
|
| 36 |
+
"๐ช ์ปคํผ ๋ซ๊ธฐ",
|
| 37 |
+
"๐ก ์กฐ๋ช
์ด๋ก๊ฒ",
|
| 38 |
+
"๐ ๋์ด๋ฝ ์ด์ค์ ๊ธ"
|
| 39 |
+
],
|
| 40 |
+
"desc": "์ธ๋ถ๋ฅผ ๋ซ๊ณ ์๋ํ๊ฒ โ ํผ์ ์๊ณ ์ถ์ ์ํ๋ฅผ ์ง ํ๊ฒฝ์ผ๋ก ๋ฐ์ณ์ค๋๋ค."
|
| 41 |
+
},
|
| 42 |
+
"business_value": {
|
| 43 |
+
"tag": "ํIoT ํ์ฉ",
|
| 44 |
+
"kpi": "๊ธฐ๊ฐ์ง๋ ์ฌ์ฉ โ",
|
| 45 |
+
"note": "๋๊ตด ๋ชจ๋ ์๋ ์ธํ
์ผ๋ก ๊ธฐ๊ฐ์ง๋ ํ์ฉ"
|
| 46 |
+
}
|
| 47 |
},
|
| 48 |
"INT-W120": {
|
| 49 |
"push": "์ง์น ์ ๋
, ์ง์ ์ค๋นํ์ง ์์๋ ๊ด์ฐฎ์์. MyKT ๋ฉค๋ฒ์ญ ๋ฐฐ๋ฌ ํ ์ธ ์ฟ ํฐ์ด ๋์ฐฉํ์ต๋๋ค.",
|
| 50 |
+
"service": "๋ฐฐ๋ฌ ์ ํด ํ ์ธ ํํ",
|
| 51 |
+
"gigagenie": {
|
| 52 |
+
"command": "์ฒญ์ ์ข ํด์ค",
|
| 53 |
+
"devices": [
|
| 54 |
+
"๐ค ๋ก๋ด์ฒญ์๊ธฐ ๊ฐ๋"
|
| 55 |
+
],
|
| 56 |
+
"desc": "๊ธฐ๋ ฅ์ด ์์ ๋ ์ง์์ผ์ ๋์ โ ์ต์ํ์ ๋ถ๋ด์ผ๋ก ์ ๋๋ ํ๊ฒฝ ์ ์ง."
|
| 57 |
+
},
|
| 58 |
+
"business_value": {
|
| 59 |
+
"tag": "์ ํด์์ต",
|
| 60 |
+
"kpi": "๋ฉค๋ฒ์ญ โ",
|
| 61 |
+
"note": "๋ฐฐ๋ฌยท์ํ ์ ํด ์ ํ"
|
| 62 |
+
}
|
| 63 |
},
|
| 64 |
"INT-W130": {
|
| 65 |
"push": "๋ฆ์ ์๊ฐ๊น์ง ๊นจ์ด ๊ณ์๋ค์. ์ง๋๋ฎค์ง ์๋ฉด ์ ๋ ์ฝํ
์ธ ๋ก ํธ์ํ ๋ฐค์ ์ค๋นํด๋ณด์ธ์.",
|
| 66 |
+
"service": "์๋ฉดยท๋ช
์ ์ฝํ
์ธ ",
|
| 67 |
+
"genie_music": {
|
| 68 |
+
"playlist": "์๋ฉด ํ๋ ์ด๋ฆฌ์คํธ",
|
| 69 |
+
"desc": "์๋ฒฝ ์๊ฐ๋ ์ฒญ์ทจ ์ด๋ ฅ์ ๋ฐํ์ผ๋ก ์ ๋ค๊ธฐ ์ข์ ์ฌ์ด๋๋ฅผ ํ๋ ์ด์
."
|
| 70 |
+
},
|
| 71 |
+
"gigagenie": {
|
| 72 |
+
"command": "์ทจ์นจ ํ๊ฒฝ์ผ๋ก ๋ฐ๊ฟ์ค",
|
| 73 |
+
"devices": [
|
| 74 |
+
"๐บ ์ฌ๋ tv OFF",
|
| 75 |
+
"๐ต ์ง๋๋ฎค์ง ์๋ฉด์ฌ์ด๋",
|
| 76 |
+
"๐๏ธ ๋ชจ์
๋ฒ ๋ ์ฝฐ์ด์ดํธ ์ฌ๋ฆฝ"
|
| 77 |
+
],
|
| 78 |
+
"desc": "TV์์ ์๋ฉด ์์
์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ํธ๋์คํ โ ํ๋ฉด์ ๋๊ณ ์๋ฉด ๋ชจ๋๋ก."
|
| 79 |
+
},
|
| 80 |
+
"business_value": {
|
| 81 |
+
"tag": "๊ตฌ๋
ARPU",
|
| 82 |
+
"kpi": "์ง๋๋ฎค์ง โ",
|
| 83 |
+
"note": "์๋ฉด ์ฝํ
์ธ ๊ตฌ๋
์ ํ"
|
| 84 |
+
}
|
| 85 |
},
|
| 86 |
"INT-W140": {
|
| 87 |
"push": "์ต๊ทผ ์ํ ๋ฆฌ๋ฌ์ด ๋ถ๊ท์นํด ๋ณด์
๋๋ค. ์ด๋ยท๊ฑด๊ฐ ์ ํด ํํ์ผ๋ก ๊ฐ๋ฒผ์ด ์ฐ์ฑ
๋ถํฐ ์์ํด๋ณด์ธ์.",
|
| 88 |
+
"service": "๊ฑด๊ฐยท์ด๋ ์ ํด ํํ",
|
| 89 |
+
"gigagenie": {
|
| 90 |
+
"command": "์์นจ ๋ฃจํด ๊ท์น์ ์ผ๋ก",
|
| 91 |
+
"devices": [
|
| 92 |
+
"โฐ 7์ ์๋",
|
| 93 |
+
"๐ช 7์ ๋ธ๋ผ์ธ๋ ์ด๊ธฐ",
|
| 94 |
+
"๐ก ์กฐ๋ช
์ ๋ฑ"
|
| 95 |
+
],
|
| 96 |
+
"desc": "์์นจ์ ์ผ์ ํ๊ฒ โ ๋ถ๊ท์นํด์ง ์ํ ๋ฆฌ๋ฌ์ ํ๊ฒฝ์ผ๋ก ๋ค์ก์ต๋๋ค."
|
| 97 |
+
},
|
| 98 |
+
"business_value": {
|
| 99 |
+
"tag": "ํIoT ํ์ฉ",
|
| 100 |
+
"kpi": "๊ธฐ๊ฐ์ง๋ ์ฌ์ฉ โ",
|
| 101 |
+
"note": "์์นจ ๋ฃจํด ์๋ํ๋ก ๊ธฐ๊ฐ์ง๋๋ฅผ ๋งค์ผ ํ์ฉ"
|
| 102 |
+
}
|
| 103 |
},
|
| 104 |
"INT-W210": {
|
| 105 |
"push": "์ค๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฐ๋ฌยท์ผํ ๋ฉค๋ฒ์ญ ํ ์ธ ํํ์ด ์์ต๋๋ค. ์์ ๋ณด์์ผ๋ก ํ๋ฃจ๋ฅผ ๋ง๋ฌด๋ฆฌํด๋ณด์ธ์.",
|
| 106 |
+
"service": "๋ฐฐ๋ฌยท์ผํ ๋ฉค๋ฒ์ญ ํ ์ธ",
|
| 107 |
+
"genie_music": {
|
| 108 |
+
"playlist": "์ ๋๋ ํ๋ฆฌ",
|
| 109 |
+
"desc": "๊ธฐ๋ถ ์ ํ์ฉ ์
๋นํธ โ ๋ํ๋ฏผ์ ๋์ด์ฌ๋ฆฌ๋ ํ๋ ์ด๋ฆฌ์คํธ."
|
| 110 |
+
},
|
| 111 |
+
"business_value": {
|
| 112 |
+
"tag": "๊ตฌ๋
ARPU",
|
| 113 |
+
"kpi": "์ง๋๋ฎค์ง โ",
|
| 114 |
+
"note": "๊ธฐ๋ถ ์ ํ ํ๋ ์ด๋ฆฌ์คํธ๋ก ์ง๋๋ฎค์ง ํ์ฉ"
|
| 115 |
+
}
|
| 116 |
},
|
| 117 |
"INT-W220": {
|
| 118 |
"push": "์ด๋ฒ ์ฃผ๋ง ์ ์ ๋ ๋๋ณด๋ ๊ฑด ์ด๋จ๊น์? MyKT ์ ์ฉ ์๋ฐ ํ ์ธ ํํ์ ํ์ธํด๋ณด์ธ์.",
|
| 119 |
+
"service": "์ฌํยท์๋ฐ ํ๋ก๋ชจ์
",
|
| 120 |
+
"gigagenie": {
|
| 121 |
+
"command": "์ธ์ถ๋ชจ๋๋ก ๋ฐ๊ฟ์ค",
|
| 122 |
+
"devices": [
|
| 123 |
+
"๐ก ์กฐ๋ช
OFF",
|
| 124 |
+
"๐ ํ๋ฌ๊ทธ OFF",
|
| 125 |
+
"๐ ๋์ด๋ฝ ์ ๊ธ"
|
| 126 |
+
],
|
| 127 |
+
"desc": "์ฆํฅ ๋๋ค์ด๋ฅผ ๊ฐ๋ณ๊ฒ โ ๊ธธ์๋ดยท๋ ์จ์ ํจ๊ป ์ธ์ถ ํ๊ฒฝ์ ํ ๋ฒ์ ์ ๋ฆฌ."
|
| 128 |
+
},
|
| 129 |
+
"business_value": {
|
| 130 |
+
"tag": "์ ํด์์ต",
|
| 131 |
+
"kpi": "์ฌํยท์๋ฐ โ",
|
| 132 |
+
"note": "์ฌํยท์๋ฐ ์ ํด ํ๋ก๋ชจ์
์ ํ"
|
| 133 |
+
}
|
| 134 |
},
|
| 135 |
"INT-W230": {
|
| 136 |
"push": "์ด๋์ ์์ํ๊ธฐ ์ข์ ํ์ด๋ฐ์
๋๋ค. ํฌ์คยท๋ฌ๋ ์ ํด ์ฟ ํฐ์ด ์ค๋น๋์ด ์์ต๋๋ค.",
|
| 137 |
+
"service": "ํฌ์คยท๋ฌ๋ ์ ํด ์ฟ ํฐ",
|
| 138 |
+
"genie_music": {
|
| 139 |
+
"playlist": "์ด๋ํ ๋ ๋ฃ๋ ์์
",
|
| 140 |
+
"desc": "๋ฌ๋ยทํํธ ํ
ํฌ์ ๋ง์ถ ์ด๋ ํ๋ ์ด๋ฆฌ์คํธ."
|
| 141 |
+
},
|
| 142 |
+
"gigagenie": {
|
| 143 |
+
"command": "์ด๋ ํ์ด๋จธ ๋ง์ถฐ์ค",
|
| 144 |
+
"devices": [
|
| 145 |
+
"โฑ๏ธ ์ด๋ ํ์ด๋จธ ์ค์ "
|
| 146 |
+
],
|
| 147 |
+
"desc": "๊ฐ๋ณ๊ฒ ๋ชธ์ ์์ง์ด๋ ๋ฃจํด์ ์ง์."
|
| 148 |
+
},
|
| 149 |
+
"business_value": {
|
| 150 |
+
"tag": "์ ํด์์ต",
|
| 151 |
+
"kpi": "ํฌ์ค ์ ํด โ",
|
| 152 |
+
"note": "ํฌ์คยท๋ฌ๋ ์ ํด ์ ํ"
|
| 153 |
+
}
|
| 154 |
},
|
| 155 |
"INT-W240": {
|
| 156 |
"push": "๋ง์์ ์ฌ๊ฒ ํด์ค ์๊ฐ์ด ํ์ํด ๋ณด์
๋๋ค. ์ง๋๋ฎค์ง ๋ช
์ ์ฝํ
์ธ ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค.",
|
| 157 |
+
"service": "์ง๋๋ฎค์ง ๋ช
์ยทํ๋ง ์ฝํ
์ธ ",
|
| 158 |
+
"genie_music": {
|
| 159 |
+
"playlist": "ํ๋ง ์์
",
|
| 160 |
+
"desc": "๋ง์์ ๊ฐ๋ผ์ํ๋ ๋ช
์ยทํ๋ง ์ฌ์ด๋."
|
| 161 |
+
},
|
| 162 |
+
"gigagenie": {
|
| 163 |
+
"command": "ํ๋ง ๋ชจ๋๋ก ๋ฐ๊ฟ์ค",
|
| 164 |
+
"devices": [
|
| 165 |
+
"๐ซ๏ธ ๋ํจ์ ON",
|
| 166 |
+
"๐ก ์กฐ๋ช
๋ฐ๋ปํ๊ฒยท๋ฎ์ถค"
|
| 167 |
+
],
|
| 168 |
+
"desc": "๊ฐ์ ์ ์ฌ๊ฒ ํ๋ ๋ถ์๊ธฐ๋ก โ ํฅ๊ณผ ๋น์ผ๋ก ์์ ๊ฐ์ ๋ํฉ๋๋ค."
|
| 169 |
+
},
|
| 170 |
+
"business_value": {
|
| 171 |
+
"tag": "๊ตฌ๋
ARPU",
|
| 172 |
+
"kpi": "์ง๋๋ฎค์ง โ",
|
| 173 |
+
"note": "ํ๋งยท๋ช
์ ๊ตฌ๋
์ ํ"
|
| 174 |
+
}
|
| 175 |
},
|
| 176 |
"INT-W250": {
|
| 177 |
"push": "์ค๋๋ง์ ์ง์ธ๊ณผ ์ฐ๋ฝํด๋ณด๋ ๊ฑด ์ด๋จ๊น์? ์นดํ ๋ฉค๋ฒ์ญ ํ ์ธ ํํ์ ํ์ฉํด๋ณด์ธ์.",
|
| 178 |
+
"service": "์นดํยท๋ฌธํ ๋ฉค๋ฒ์ญ ํํ",
|
| 179 |
+
"gigagenie": {
|
| 180 |
+
"command": "์๋ถ ์ฑ๊ธฐ๊ธฐ ์ผ์ ์ถ๊ฐํด์ค",
|
| 181 |
+
"devices": [
|
| 182 |
+
"๐
์บ๋ฆฐ๋: ์ด๋ฒ ์ฃผ๋ง ์น๊ตฌ ๋ง๋๊ธฐ"
|
| 183 |
+
],
|
| 184 |
+
"desc": "๊ด๊ณ ํ๋ณต์ ์ฒซ๊ฑธ์์ ์ผ์ ์ผ๋ก โ ์ผ์์ผ๋ก ๋์์ค๋ ์์ ๊ณ๊ธฐ."
|
| 185 |
+
},
|
| 186 |
+
"business_value": {
|
| 187 |
+
"tag": "ํIoT ํ์ฉ",
|
| 188 |
+
"kpi": "๊ธฐ๊ฐ์ง๋ ์ฌ์ฉ โ",
|
| 189 |
+
"note": "์๋ถ ์ผ์ ๋ฑ๋ก์ผ๋ก ๊ธฐ๊ฐ์ง๋ ํ์ฉ"
|
| 190 |
+
}
|
| 191 |
}
|
| 192 |
}
|
| 193 |
}
|
scripts/build_worker_scenario.py
CHANGED
|
@@ -30,50 +30,94 @@ L1 = {
|
|
| 30 |
}
|
| 31 |
|
| 32 |
# L3(=L2 ์์ค) Intent:
|
| 33 |
-
# key
|
| 34 |
-
# name
|
| 35 |
-
# type
|
| 36 |
-
# features
|
| 37 |
-
# apps
|
| 38 |
-
# service
|
| 39 |
-
# push
|
|
|
|
|
|
|
|
|
|
| 40 |
TAX = [
|
| 41 |
dict(key="110", name="๋๊ตด์ ํด์", type="Model",
|
| 42 |
features=["Burnout Deep Score", "Isolation Tendency Index", "Sleep Disturbance Index"],
|
| 43 |
apps=[], service="์ง๋๋ฎค์ง ํ๋งยทASMR ์ฝํ
์ธ ",
|
| 44 |
-
push="์ค๋ ํ๋ฃจ๋ ์๊ณ ํ์
จ์ต๋๋ค. MyKT ์ง๋๋ฎค์ง ASMR ํ๋ ์ด๋ฆฌ์คํธ๋ก ์กฐ์ฉํ ํด์ ์๊ฐ์ ๊ฐ์ ธ๋ณด์ธ์."
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
dict(key="120", name="์๋์ง ์ ์ฝ ๋ชจ๋", type="Model",
|
| 46 |
features=["Fatigue Load Index", "Burnout Deep Score"],
|
| 47 |
apps=["delivery"], service="๋ฐฐ๋ฌ ์ ํด ํ ์ธ ํํ",
|
| 48 |
-
push="์ง์น ์ ๋
, ์ง์ ์ค๋นํ์ง ์์๋ ๊ด์ฐฎ์์. MyKT ๋ฉค๋ฒ์ญ ๋ฐฐ๋ฌ ํ ์ธ ์ฟ ํฐ์ด ๋์ฐฉํ์ต๋๋ค."
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
dict(key="130", name="๋ฆ์ ๋ฐค ๋์งํธ ํ๋", type="Rule",
|
| 50 |
features=["Sleep Disturbance Index", "Digital Escape Score"],
|
| 51 |
apps=["sns", "ott"], service="์๋ฉดยท๋ช
์ ์ฝํ
์ธ ",
|
| 52 |
-
push="๋ฆ์ ์๊ฐ๊น์ง ๊นจ์ด ๊ณ์๋ค์. ์ง๋๋ฎค์ง ์๋ฉด ์ ๋ ์ฝํ
์ธ ๋ก ํธ์ํ ๋ฐค์ ์ค๋นํด๋ณด์ธ์."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
dict(key="140", name="์ํ ๋ฆฌ๋ฌ ๋ถ๊ท์น", type="Model",
|
| 54 |
features=["Fatigue Load Index", "Isolation Tendency Index", "weekend_out"],
|
| 55 |
apps=["sns", "ott"], service="๊ฑด๊ฐยท์ด๋ ์ ํด ํํ",
|
| 56 |
-
push="์ต๊ทผ ์ํ ๋ฆฌ๋ฌ์ด ๋ถ๊ท์นํด ๋ณด์
๋๋ค. ์ด๋ยท๊ฑด๊ฐ ์ ํด ํํ์ผ๋ก ๊ฐ๋ฒผ์ด ์ฐ์ฑ
๋ถํฐ ์์ํด๋ณด์ธ์."
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
dict(key="210", name="์ฆ๊ฐ ์คํธ๋ ์ค ํด์", type="Rule",
|
| 58 |
features=["Burnout Deep Score", "Fatigue Load Index"],
|
| 59 |
apps=["delivery", "shopping"], service="๋ฐฐ๋ฌยท์ผํ ๋ฉค๋ฒ์ญ ํ ์ธ",
|
| 60 |
-
push="์ค๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฐ๋ฌยท์ผํ ๋ฉค๋ฒ์ญ ํ ์ธ ํํ์ด ์์ต๋๋ค. ์์ ๋ณด์์ผ๋ก ํ๋ฃจ๋ฅผ ๋ง๋ฌด๋ฆฌํด๋ณด์ธ์."
|
|
|
|
|
|
|
|
|
|
| 61 |
dict(key="220", name="ํ๊ฒฝ ์ ํ ์๊ตฌ", type="Rule",
|
| 62 |
features=["Recovery Motivation Score", "Isolation Tendency Index"],
|
| 63 |
apps=["travel"], service="์ฌํยท์๋ฐ ํ๋ก๋ชจ์
",
|
| 64 |
-
push="์ด๋ฒ ์ฃผ๋ง ์ ์ ๋ ๋๋ณด๋ ๊ฑด ์ด๋จ๊น์? MyKT ์ ์ฉ ์๋ฐ ํ ์ธ ํํ์ ํ์ธํด๋ณด์ธ์."
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
dict(key="230", name="์ ์ฒด ํ๋ณต ์๋", type="Rule",
|
| 66 |
features=["Recovery Motivation Score", "Fatigue Load Index"],
|
| 67 |
apps=["exercise"], service="ํฌ์คยท๋ฌ๋ ์ ํด ์ฟ ํฐ",
|
| 68 |
-
push="์ด๋์ ์์ํ๊ธฐ ์ข์ ํ์ด๋ฐ์
๋๋ค. ํฌ์คยท๋ฌ๋ ์ ํด ์ฟ ํฐ์ด ์ค๋น๋์ด ์์ต๋๋ค."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
dict(key="240", name="์ฌ๋ฆฌยท๊ฐ์ ํ๋ณต", type="Rule",
|
| 70 |
features=["Recovery Motivation Score", "Isolation Tendency Index"],
|
| 71 |
apps=["mental_recovery", "music"], service="์ง๋๋ฎค์ง ๋ช
์ยทํ๋ง ์ฝํ
์ธ ",
|
| 72 |
-
push="๋ง์์ ์ฌ๊ฒ ํด์ค ์๊ฐ์ด ํ์ํด ๋ณด์
๋๋ค. ์ง๋๋ฎค์ง ๋ช
์ ์ฝํ
์ธ ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
dict(key="250", name="์ผ์ ํ๋ณต", type="Rule",
|
| 74 |
features=["Recovery Motivation Score", "Isolation Tendency Index"],
|
| 75 |
apps=["messenger", "reading", "exercise"], service="์นดํยท๋ฌธํ ๋ฉค๋ฒ์ญ ํํ",
|
| 76 |
-
push="์ค๋๋ง์ ์ง์ธ๊ณผ ์ฐ๋ฝํด๋ณด๋ ๊ฑด ์ด๋จ๊น์? ์นดํ ๋ฉค๋ฒ์ญ ํ ์ธ ํํ์ ํ์ฉํด๋ณด์ธ์."
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
]
|
| 78 |
|
| 79 |
|
|
@@ -93,9 +137,17 @@ def build_intents():
|
|
| 93 |
"intents": intents}
|
| 94 |
|
| 95 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
CHANNELS = [
|
| 97 |
-
{"id": "push", "name": "์ฑ Push", "icon": "๐ฑ",
|
| 98 |
"characteristic": "๊ณ ๊ฐ ์ํ์ ๋ง๋ ์ถ์ฒ ์๋น์ค๋ฅผ MyKT ์ฑ Push ๋ฉ์์ง๋ก ์ ๊ณต โ ๋ฒ์์ ์ํยท์ผ์ ํ๋ณต ์ง์"},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
]
|
| 100 |
|
| 101 |
|
|
@@ -103,9 +155,16 @@ def build_actions():
|
|
| 103 |
actions = {}
|
| 104 |
for t in TAX:
|
| 105 |
iid = f"INT-W{t['key']}"
|
| 106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
return {"scenario_id": SCENARIO_ID, "version": "0.1.0",
|
| 108 |
-
"description": "์ง์ฅ์ธ ์๋๋ฆฌ์ค Intent๋ณ
|
| 109 |
"channels": CHANNELS, "actions": actions}
|
| 110 |
|
| 111 |
|
|
|
|
| 30 |
}
|
| 31 |
|
| 32 |
# L3(=L2 ์์ค) Intent:
|
| 33 |
+
# key : ์ฝ๋ (์ 1์๋ฆฌ๊ฐ L1)
|
| 34 |
+
# name : Intent ๋ช
|
| 35 |
+
# type : Rule | Model
|
| 36 |
+
# features : ์ถ๋ก ํต์ฌ batch feature (Index/Score)
|
| 37 |
+
# apps : ์ด Intent๋ก ์ง์ ์ ํธ๋ฅผ ์ฃผ๋ ์ฑ entity
|
| 38 |
+
# service : ์ถ์ฒ ์๋น์ค
|
| 39 |
+
# push : MyKT ์ฑ Push ๋ฌธ๊ตฌ
|
| 40 |
+
# gmusic : ๐ต ์ง๋๋ฎค์ง ์ฑ๋ โ {playlist, desc} (์์ผ๋ฉด ์๋ต)
|
| 41 |
+
# genie : ๐ ๊ธฐ๊ฐ์ง๋ยทํIoT ์ฑ๋ โ {command, devices[], desc} (์์ผ๋ฉด ์๋ต)
|
| 42 |
+
# biz : ๐ผ ๋น์ฆ๋์ค ์ํฉํธ โ {tag, kpi, note}
|
| 43 |
TAX = [
|
| 44 |
dict(key="110", name="๋๊ตด์ ํด์", type="Model",
|
| 45 |
features=["Burnout Deep Score", "Isolation Tendency Index", "Sleep Disturbance Index"],
|
| 46 |
apps=[], service="์ง๋๋ฎค์ง ํ๋งยทASMR ์ฝํ
์ธ ",
|
| 47 |
+
push="์ค๋ ํ๋ฃจ๋ ์๊ณ ํ์
จ์ต๋๋ค. MyKT ์ง๋๋ฎค์ง ASMR ํ๋ ์ด๋ฆฌ์คํธ๋ก ์กฐ์ฉํ ํด์ ์๊ฐ์ ๊ฐ์ ธ๋ณด์ธ์.",
|
| 48 |
+
genie=dict(command="๋๊ตด ๋ชจ๋ ์ผ์ค",
|
| 49 |
+
devices=["๐ช ์ปคํผ ๋ซ๊ธฐ", "๐ก ์กฐ๋ช
์ด๋ก๊ฒ", "๐ ๋์ด๋ฝ ์ด์ค์ ๊ธ"],
|
| 50 |
+
desc="์ธ๋ถ๋ฅผ ๋ซ๊ณ ์๋ํ๊ฒ โ ํผ์ ์๊ณ ์ถ์ ์ํ๋ฅผ ์ง ํ๊ฒฝ์ผ๋ก ๋ฐ์ณ์ค๋๋ค."),
|
| 51 |
+
biz=dict(tag="ํIoT ํ์ฉ", kpi="๊ธฐ๊ฐ์ง๋ ์ฌ์ฉ โ", note="๋๊ตด ๋ชจ๋ ์๋ ์ธํ
์ผ๋ก ๊ธฐ๊ฐ์ง๋ ํ์ฉ")),
|
| 52 |
dict(key="120", name="์๋์ง ์ ์ฝ ๋ชจ๋", type="Model",
|
| 53 |
features=["Fatigue Load Index", "Burnout Deep Score"],
|
| 54 |
apps=["delivery"], service="๋ฐฐ๋ฌ ์ ํด ํ ์ธ ํํ",
|
| 55 |
+
push="์ง์น ์ ๋
, ์ง์ ์ค๋นํ์ง ์์๋ ๊ด์ฐฎ์์. MyKT ๋ฉค๋ฒ์ญ ๋ฐฐ๋ฌ ํ ์ธ ์ฟ ํฐ์ด ๋์ฐฉํ์ต๋๋ค.",
|
| 56 |
+
genie=dict(command="์ฒญ์ ์ข ํด์ค",
|
| 57 |
+
devices=["๐ค ๋ก๋ด์ฒญ์๊ธฐ ๊ฐ๋"],
|
| 58 |
+
desc="๊ธฐ๋ ฅ์ด ์์ ๋ ์ง์์ผ์ ๋์ โ ์ต์ํ์ ๋ถ๋ด์ผ๋ก ์ ๋๋ ํ๊ฒฝ ์ ์ง."),
|
| 59 |
+
biz=dict(tag="์ ํด์์ต", kpi="๋ฉค๋ฒ์ญ โ", note="๋ฐฐ๋ฌยท์ํ ์ ํด ์ ํ")),
|
| 60 |
dict(key="130", name="๋ฆ์ ๋ฐค ๋์งํธ ํ๋", type="Rule",
|
| 61 |
features=["Sleep Disturbance Index", "Digital Escape Score"],
|
| 62 |
apps=["sns", "ott"], service="์๋ฉดยท๋ช
์ ์ฝํ
์ธ ",
|
| 63 |
+
push="๋ฆ์ ์๊ฐ๊น์ง ๊นจ์ด ๊ณ์๋ค์. ์ง๋๋ฎค์ง ์๋ฉด ์ ๋ ์ฝํ
์ธ ๋ก ํธ์ํ ๋ฐค์ ์ค๋นํด๋ณด์ธ์.",
|
| 64 |
+
gmusic=dict(playlist="์๋ฉด ํ๋ ์ด๋ฆฌ์คํธ",
|
| 65 |
+
desc="์๋ฒฝ ์๊ฐ๋ ์ฒญ์ทจ ์ด๋ ฅ์ ๋ฐํ์ผ๋ก ์ ๋ค๊ธฐ ์ข์ ์ฌ์ด๋๋ฅผ ํ๋ ์ด์
."),
|
| 66 |
+
genie=dict(command="์ทจ์นจ ํ๊ฒฝ์ผ๋ก ๋ฐ๊ฟ์ค",
|
| 67 |
+
devices=["๐บ ์ฌ๋ tv OFF", "๐ต ์ง๋๋ฎค์ง ์๋ฉด์ฌ์ด๋", "๐๏ธ ๋ชจ์
๋ฒ ๋ ์ฝฐ์ด์ดํธ ์ฌ๋ฆฝ"],
|
| 68 |
+
desc="TV์์ ์๋ฉด ์์
์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ํธ๋์คํ โ ํ๋ฉด์ ๋๊ณ ์๋ฉด ๋ชจ๋๋ก."),
|
| 69 |
+
biz=dict(tag="๊ตฌ๋
ARPU", kpi="์ง๋๋ฎค์ง โ", note="์๋ฉด ์ฝํ
์ธ ๊ตฌ๋
์ ํ")),
|
| 70 |
dict(key="140", name="์ํ ๋ฆฌ๋ฌ ๋ถ๊ท์น", type="Model",
|
| 71 |
features=["Fatigue Load Index", "Isolation Tendency Index", "weekend_out"],
|
| 72 |
apps=["sns", "ott"], service="๊ฑด๊ฐยท์ด๋ ์ ํด ํํ",
|
| 73 |
+
push="์ต๊ทผ ์ํ ๋ฆฌ๋ฌ์ด ๋ถ๊ท์นํด ๋ณด์
๋๋ค. ์ด๋ยท๊ฑด๊ฐ ์ ํด ํํ์ผ๋ก ๊ฐ๋ฒผ์ด ์ฐ์ฑ
๋ถํฐ ์์ํด๋ณด์ธ์.",
|
| 74 |
+
genie=dict(command="์์นจ ๋ฃจํด ๊ท์น์ ์ผ๋ก",
|
| 75 |
+
devices=["โฐ 7์ ์๋", "๐ช 7์ ๋ธ๋ผ์ธ๋ ์ด๊ธฐ", "๐ก ์กฐ๋ช
์ ๋ฑ"],
|
| 76 |
+
desc="์์นจ์ ์ผ์ ํ๊ฒ โ ๋ถ๊ท์นํด์ง ์ํ ๋ฆฌ๋ฌ์ ํ๊ฒฝ์ผ๋ก ๋ค์ก์ต๋๋ค."),
|
| 77 |
+
biz=dict(tag="ํIoT ํ์ฉ", kpi="๊ธฐ๊ฐ์ง๋ ์ฌ์ฉ โ", note="์์นจ ๋ฃจํด ์๋ํ๋ก ๊ธฐ๊ฐ์ง๋๋ฅผ ๋งค์ผ ํ์ฉ")),
|
| 78 |
dict(key="210", name="์ฆ๊ฐ ์คํธ๋ ์ค ํด์", type="Rule",
|
| 79 |
features=["Burnout Deep Score", "Fatigue Load Index"],
|
| 80 |
apps=["delivery", "shopping"], service="๋ฐฐ๋ฌยท์ผํ ๋ฉค๋ฒ์ญ ํ ์ธ",
|
| 81 |
+
push="์ค๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฐ๋ฌยท์ผํ ๋ฉค๋ฒ์ญ ํ ์ธ ํํ์ด ์์ต๋๋ค. ์์ ๋ณด์์ผ๋ก ํ๋ฃจ๋ฅผ ๋ง๋ฌด๋ฆฌํด๋ณด์ธ์.",
|
| 82 |
+
gmusic=dict(playlist="์ ๋๋ ํ๋ฆฌ",
|
| 83 |
+
desc="๊ธฐ๋ถ ์ ํ์ฉ ์
๋นํธ โ ๋ํ๋ฏผ์ ๋์ด์ฌ๋ฆฌ๋ ํ๋ ์ด๋ฆฌ์คํธ."),
|
| 84 |
+
biz=dict(tag="๊ตฌ๋
ARPU", kpi="์ง๋๋ฎค์ง โ", note="๊ธฐ๋ถ ์ ํ ํ๋ ์ด๋ฆฌ์คํธ๋ก ์ง๋๋ฎค์ง ํ์ฉ")),
|
| 85 |
dict(key="220", name="ํ๊ฒฝ ์ ํ ์๊ตฌ", type="Rule",
|
| 86 |
features=["Recovery Motivation Score", "Isolation Tendency Index"],
|
| 87 |
apps=["travel"], service="์ฌํยท์๋ฐ ํ๋ก๋ชจ์
",
|
| 88 |
+
push="์ด๋ฒ ์ฃผ๋ง ์ ์ ๋ ๋๋ณด๋ ๊ฑด ์ด๋จ๊น์? MyKT ์ ์ฉ ์๋ฐ ํ ์ธ ํํ์ ํ์ธํด๋ณด์ธ์.",
|
| 89 |
+
genie=dict(command="์ธ์ถ๋ชจ๋๋ก ๋ฐ๊ฟ์ค",
|
| 90 |
+
devices=["๐ก ์กฐ๋ช
OFF", "๐ ํ๋ฌ๊ทธ OFF", "๐ ๋์ด๋ฝ ์ ๊ธ"],
|
| 91 |
+
desc="์ฆํฅ ๋๋ค์ด๋ฅผ ๊ฐ๋ณ๊ฒ โ ๊ธธ์๋ดยท๋ ์จ์ ํจ๊ป ์ธ์ถ ํ๊ฒฝ์ ํ ๋ฒ์ ์ ๋ฆฌ."),
|
| 92 |
+
biz=dict(tag="์ ํด์์ต", kpi="์ฌํยท์๋ฐ โ", note="์ฌํยท์๋ฐ ์ ํด ํ๋ก๋ชจ์
์ ํ")),
|
| 93 |
dict(key="230", name="์ ์ฒด ํ๋ณต ์๋", type="Rule",
|
| 94 |
features=["Recovery Motivation Score", "Fatigue Load Index"],
|
| 95 |
apps=["exercise"], service="ํฌ์คยท๋ฌ๋ ์ ํด ์ฟ ํฐ",
|
| 96 |
+
push="์ด๋์ ์์ํ๊ธฐ ์ข์ ํ์ด๋ฐ์
๋๋ค. ํฌ์คยท๋ฌ๋ ์ ํด ์ฟ ํฐ์ด ์ค๋น๋์ด ์์ต๋๋ค.",
|
| 97 |
+
gmusic=dict(playlist="์ด๋ํ ๋ ๋ฃ๋ ์์
",
|
| 98 |
+
desc="๋ฌ๋ยทํํธ ํ
ํฌ์ ๋ง์ถ ์ด๋ ํ๋ ์ด๋ฆฌ์คํธ."),
|
| 99 |
+
genie=dict(command="์ด๋ ํ์ด๋จธ ๋ง์ถฐ์ค",
|
| 100 |
+
devices=["โฑ๏ธ ์ด๋ ํ์ด๋จธ ์ค์ "],
|
| 101 |
+
desc="๊ฐ๋ณ๊ฒ ๋ชธ์ ์์ง์ด๋ ๋ฃจํด์ ์ง์."),
|
| 102 |
+
biz=dict(tag="์ ํด์์ต", kpi="ํฌ์ค ์ ํด โ", note="ํฌ์คยท๋ฌ๋ ์ ํด ์ ํ")),
|
| 103 |
dict(key="240", name="์ฌ๋ฆฌยท๊ฐ์ ํ๋ณต", type="Rule",
|
| 104 |
features=["Recovery Motivation Score", "Isolation Tendency Index"],
|
| 105 |
apps=["mental_recovery", "music"], service="์ง๋๋ฎค์ง ๋ช
์ยทํ๋ง ์ฝํ
์ธ ",
|
| 106 |
+
push="๋ง์์ ์ฌ๊ฒ ํด์ค ์๊ฐ์ด ํ์ํด ๋ณด์
๋๋ค. ์ง๋๋ฎค์ง ๋ช
์ ์ฝํ
์ธ ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค.",
|
| 107 |
+
gmusic=dict(playlist="ํ๋ง ์์
",
|
| 108 |
+
desc="๋ง์์ ๊ฐ๋ผ์ํ๋ ๋ช
์ยทํ๋ง ์ฌ์ด๋."),
|
| 109 |
+
genie=dict(command="ํ๋ง ๋ชจ๋๋ก ๋ฐ๊ฟ์ค",
|
| 110 |
+
devices=["๐ซ๏ธ ๋ํจ์ ON", "๐ก ์กฐ๋ช
๋ฐ๋ปํ๊ฒยท๋ฎ์ถค"],
|
| 111 |
+
desc="๊ฐ์ ์ ์ฌ๊ฒ ํ๋ ๋ถ์๊ธฐ๋ก โ ํฅ๊ณผ ๋น์ผ๋ก ์์ ๊ฐ์ ๋ํฉ๋๋ค."),
|
| 112 |
+
biz=dict(tag="๊ตฌ๋
ARPU", kpi="์ง๋๋ฎค์ง โ", note="ํ๋งยท๋ช
์ ๊ตฌ๋
์ ํ")),
|
| 113 |
dict(key="250", name="์ผ์ ํ๋ณต", type="Rule",
|
| 114 |
features=["Recovery Motivation Score", "Isolation Tendency Index"],
|
| 115 |
apps=["messenger", "reading", "exercise"], service="์นดํยท๋ฌธํ ๋ฉค๋ฒ์ญ ํํ",
|
| 116 |
+
push="์ค๋๋ง์ ์ง์ธ๊ณผ ์ฐ๋ฝํด๋ณด๋ ๊ฑด ์ด๋จ๊น์? ์นดํ ๋ฉค๋ฒ์ญ ํ ์ธ ํํ์ ํ์ฉํด๋ณด์ธ์.",
|
| 117 |
+
genie=dict(command="์๋ถ ์ฑ๊ธฐ๊ธฐ ์ผ์ ์ถ๊ฐํด์ค",
|
| 118 |
+
devices=["๐
์บ๋ฆฐ๋: ์ด๋ฒ ์ฃผ๋ง ์น๊ตฌ ๋ง๋๊ธฐ"],
|
| 119 |
+
desc="๊ด๊ณ ํ๋ณต์ ์ฒซ๊ฑธ์์ ์ผ์ ์ผ๋ก โ ์ผ์์ผ๋ก ๋์์ค๋ ์์ ๊ณ๊ธฐ."),
|
| 120 |
+
biz=dict(tag="ํIoT ํ์ฉ", kpi="๊ธฐ๊ฐ์ง๋ ์ฌ์ฉ โ", note="์๋ถ ์ผ์ ๋ฑ๋ก์ผ๋ก ๊ธฐ๊ฐ์ง๋ ํ์ฉ")),
|
| 121 |
]
|
| 122 |
|
| 123 |
|
|
|
|
| 137 |
"intents": intents}
|
| 138 |
|
| 139 |
|
| 140 |
+
# ์ฑ๋ โ kind: ํ๋ก ํธ์ ๋ฒ์ฉ ๋ ๋๋ฌ๊ฐ ์ฑ๋ ์ข
๋ฅ๋ณ ๋ชฉ์
์ ๊ฒฐ์ (์๋๋ฆฌ์ค ํนํ ์ฝ๋ ์ง์)
|
| 141 |
+
# phone-push : ํด๋ํฐ ๋ฝ์คํฌ๋ฆฐ ํธ์ ๋ชฉ์
|
| 142 |
+
# music-card : ์ง๋๋ฎค์ง ํ๋ ์ด๋ฆฌ์คํธ ์นด๋
|
| 143 |
+
# device-voice: ๊ธฐ๊ฐ์ง๋ ์์ฑ ๋ช
๋ น + ํIoT ๊ธฐ๊ธฐ ๋์ ์นฉ
|
| 144 |
CHANNELS = [
|
| 145 |
+
{"id": "push", "name": "์ฑ Push", "icon": "๐ฑ", "kind": "phone-push",
|
| 146 |
"characteristic": "๊ณ ๊ฐ ์ํ์ ๋ง๋ ์ถ์ฒ ์๋น์ค๋ฅผ MyKT ์ฑ Push ๋ฉ์์ง๋ก ์ ๊ณต โ ๋ฒ์์ ์ํยท์ผ์ ํ๋ณต ์ง์"},
|
| 147 |
+
{"id": "genie_music", "name": "์ง๋๋ฎค์ง", "icon": "๐ต", "kind": "music-card",
|
| 148 |
+
"characteristic": "ํ์ ์ฒญ์ทจ ์ด๋ ฅยท์๊ฐ๋ ์ทจํฅ์ ๋ฐํ์ผ๋ก ์ง๊ธ ์ํ์ ๋ง๋ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ํ๋ ์ด์
"},
|
| 149 |
+
{"id": "gigagenie", "name": "๊ธฐ๊ฐ์ง๋ ยท ํIoT", "icon": "๐ ", "kind": "device-voice",
|
| 150 |
+
"characteristic": "์์ฑ ํ๋ง๋๋ก ์ง์ ํ๊ฒฝ(์กฐ๋ช
ยท์ปคํผยท๋์ด๋ฝยท๊ฐ์ )์ ์ํ์ ๋ง๊ฒ ์๋ ์ธํ
"},
|
| 151 |
]
|
| 152 |
|
| 153 |
|
|
|
|
| 155 |
actions = {}
|
| 156 |
for t in TAX:
|
| 157 |
iid = f"INT-W{t['key']}"
|
| 158 |
+
act = {"push": t["push"], "service": t["service"]}
|
| 159 |
+
if t.get("gmusic"):
|
| 160 |
+
act["genie_music"] = t["gmusic"]
|
| 161 |
+
if t.get("genie"):
|
| 162 |
+
act["gigagenie"] = t["genie"]
|
| 163 |
+
if t.get("biz"):
|
| 164 |
+
act["business_value"] = t["biz"]
|
| 165 |
+
actions[iid] = act
|
| 166 |
return {"scenario_id": SCENARIO_ID, "version": "0.1.0",
|
| 167 |
+
"description": "์ง์ฅ์ธ ์๋๋ฆฌ์ค Intent๋ณ ๋ฉํฐ์ฑ๋ ํ์ฉ ์์ (Pushยท์ง๋๋ฎค์งยท๊ธฐ๊ฐ์ง๋) + ๋น์ฆ๋์ค ์ํฉํธ",
|
| 168 |
"channels": CHANNELS, "actions": actions}
|
| 169 |
|
| 170 |
|