hpce-dev / scripts /build_worker_scenario.py
์ด๋™ํ˜„
[FEAT] ์ง์žฅ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ๋ชจ ๊ฐ•ํ™” (๋ถ„์„ ์„œ์‚ฌยท๋น„์ฆˆ๋‹ˆ์Šค ์ž„ํŒฉํŠธยท๋ฉ€ํ‹ฐ์ฑ„๋„)
1503eeb
Raw
History Blame Contribute Delete
11.4 kB
#!/usr/bin/env python3
"""
์ง์žฅ์ธ(worker-v3) ์‹œ๋‚˜๋ฆฌ์˜ค ์นดํƒˆ๋กœ๊ทธ ์ƒ์„ฑ๊ธฐ.
๋‹จ์ผ TAXONOMY ์ •์˜๋กœ๋ถ€ํ„ฐ intents.json / actions.json / behavior_intents.json ์ƒ์„ฑ.
์‹œ๋‚˜๋ฆฌ์˜ค_์ง์žฅ์ธ:
1.1 ์ง์žฅ์ธ Domain Intent Taxonomy (L1 2 ยท L2 9)
3.1 ์•ฑ ์„ ํƒ์ง€ (10๊ฐœ ์•ฑ ๋‹จ์ผ ์„ ํƒ)
4.2 ํ™œ์šฉ ๋ฐฉ์•ˆ (MyKT ์•ฑ Push ๋‹จ์ผ ์ฑ„๋„)
์‹คํ–‰:
cd roadshow-server-v3
python scripts/build_worker_scenario.py
"""
from __future__ import annotations
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from scripts._scenario_common import emit_layers # noqa: E402
SCENARIO_ID = "worker-v3"
OUT_DIR = Path(__file__).parent.parent / "scenarios" / SCENARIO_ID
L1 = {
"1": ("INT-W100", "๋ฒˆ์•„์›ƒ ์‹ฌํ™”"),
"2": ("INT-W200", "๋ฒˆ์•„์›ƒ ์™„ํ™” ์‹œ๋„"),
}
# L3(=L2 ์ˆ˜์ค€) Intent:
# key : ์ฝ”๋“œ (์•ž 1์ž๋ฆฌ๊ฐ€ L1)
# name : Intent ๋ช…
# type : Rule | Model
# features : ์ถ”๋ก  ํ•ต์‹ฌ batch feature (Index/Score)
# apps : ์ด Intent๋กœ ์ง์ ‘ ์‹ ํ˜ธ๋ฅผ ์ฃผ๋Š” ์•ฑ entity
# service : ์ถ”์ฒœ ์„œ๋น„์Šค
# push : MyKT ์•ฑ Push ๋ฌธ๊ตฌ
# gmusic : ๐ŸŽต ์ง€๋‹ˆ๋ฎค์ง ์ฑ„๋„ โ€” {playlist, desc} (์—†์œผ๋ฉด ์ƒ๋žต)
# genie : ๐Ÿ  ๊ธฐ๊ฐ€์ง€๋‹ˆยทํ™ˆIoT ์ฑ„๋„ โ€” {command, devices[], desc} (์—†์œผ๋ฉด ์ƒ๋žต)
# biz : ๐Ÿ’ผ ๋น„์ฆˆ๋‹ˆ์Šค ์ž„ํŒฉํŠธ โ€” {tag, kpi, note}
TAX = [
dict(key="110", name="๋™๊ตด์† ํœด์‹", type="Model",
features=["Burnout Deep Score", "Isolation Tendency Index", "Sleep Disturbance Index"],
apps=[], service="์ง€๋‹ˆ๋ฎค์ง ํž๋งยทASMR ์ฝ˜ํ…์ธ ",
push="์˜ค๋Š˜ ํ•˜๋ฃจ๋„ ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. MyKT ์ง€๋‹ˆ๋ฎค์ง ASMR ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ๋กœ ์กฐ์šฉํ•œ ํœด์‹ ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด์„ธ์š”.",
genie=dict(command="๋™๊ตด ๋ชจ๋“œ ์ผœ์ค˜",
devices=["๐ŸชŸ ์ปคํŠผ ๋‹ซ๊ธฐ", "๐Ÿ’ก ์กฐ๋ช… ์–ด๋‘ก๊ฒŒ", "๐Ÿ”’ ๋„์–ด๋ฝ ์ด์ค‘์ž ๊ธˆ"],
desc="์™ธ๋ถ€๋ฅผ ๋‹ซ๊ณ  ์•„๋Š‘ํ•˜๊ฒŒ โ€” ํ˜ผ์ž ์žˆ๊ณ  ์‹ถ์€ ์ƒํƒœ๋ฅผ ์ง‘ ํ™˜๊ฒฝ์œผ๋กœ ๋ฐ›์ณ์ค๋‹ˆ๋‹ค."),
biz=dict(tag="ํ™ˆIoT ํ™œ์šฉ", kpi="๊ธฐ๊ฐ€์ง€๋‹ˆ ์‚ฌ์šฉ โ†‘", note="๋™๊ตด ๋ชจ๋“œ ์ž๋™ ์„ธํŒ…์œผ๋กœ ๊ธฐ๊ฐ€์ง€๋‹ˆ ํ™œ์šฉ")),
dict(key="120", name="์—๋„ˆ์ง€ ์ ˆ์•ฝ ๋ชจ๋“œ", type="Model",
features=["Fatigue Load Index", "Burnout Deep Score"],
apps=["delivery"], service="๋ฐฐ๋‹ฌ ์ œํœด ํ• ์ธ ํ˜œํƒ",
push="์ง€์นœ ์ €๋…, ์ง์ ‘ ์ค€๋น„ํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์•„์š”. MyKT ๋ฉค๋ฒ„์‹ญ ๋ฐฐ๋‹ฌ ํ• ์ธ ์ฟ ํฐ์ด ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.",
genie=dict(command="์ฒญ์†Œ ์ข€ ํ•ด์ค˜",
devices=["๐Ÿค– ๋กœ๋ด‡์ฒญ์†Œ๊ธฐ ๊ฐ€๋™"],
desc="๊ธฐ๋ ฅ์ด ์—†์„ ๋•Œ ์ง‘์•ˆ์ผ์„ ๋Œ€์‹  โ€” ์ตœ์†Œํ•œ์˜ ๋ถ€๋‹ด์œผ๋กœ ์ •๋ˆ๋œ ํ™˜๊ฒฝ ์œ ์ง€."),
biz=dict(tag="์ œํœด์ˆ˜์ต", kpi="๋ฉค๋ฒ„์‹ญ โ†‘", note="๋ฐฐ๋‹ฌยท์ƒํ™œ ์ œํœด ์ „ํ™˜")),
dict(key="130", name="๋Šฆ์€ ๋ฐค ๋””์ง€ํ„ธ ํ™œ๋™", type="Rule",
features=["Sleep Disturbance Index", "Digital Escape Score"],
apps=["sns", "ott"], service="์ˆ˜๋ฉดยท๋ช…์ƒ ์ฝ˜ํ…์ธ ",
push="๋Šฆ์€ ์‹œ๊ฐ„๊นŒ์ง€ ๊นจ์–ด ๊ณ„์‹œ๋„ค์š”. ์ง€๋‹ˆ๋ฎค์ง ์ˆ˜๋ฉด ์œ ๋„ ์ฝ˜ํ…์ธ ๋กœ ํŽธ์•ˆํ•œ ๋ฐค์„ ์ค€๋น„ํ•ด๋ณด์„ธ์š”.",
gmusic=dict(playlist="์ˆ˜๋ฉด ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ",
desc="์ƒˆ๋ฒฝ ์‹œ๊ฐ„๋Œ€ ์ฒญ์ทจ ์ด๋ ฅ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž ๋“ค๊ธฐ ์ข‹์€ ์‚ฌ์šด๋“œ๋ฅผ ํ๋ ˆ์ด์…˜."),
genie=dict(command="์ทจ์นจ ํ™˜๊ฒฝ์œผ๋กœ ๋ฐ”๊ฟ”์ค˜",
devices=["๐Ÿ“บ ์˜ฌ๋ ˆtv OFF", "๐ŸŽต ์ง€๋‹ˆ๋ฎค์ง ์ˆ˜๋ฉด์‚ฌ์šด๋“œ", "๐Ÿ›๏ธ ๋ชจ์…˜๋ฒ ๋“œ ์ฝฐ์ด์–ดํŠธ ์Šฌ๋ฆฝ"],
desc="TV์—์„œ ์ˆ˜๋ฉด ์Œ์•…์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•ธ๋“œ์˜คํ”„ โ€” ํ™”๋ฉด์„ ๋„๊ณ  ์ˆ™๋ฉด ๋ชจ๋“œ๋กœ."),
biz=dict(tag="๊ตฌ๋… ARPU", kpi="์ง€๋‹ˆ๋ฎค์ง โ†‘", note="์ˆ˜๋ฉด ์ฝ˜ํ…์ธ  ๊ตฌ๋… ์ „ํ™˜")),
dict(key="140", name="์ƒํ™œ ๋ฆฌ๋“ฌ ๋ถˆ๊ทœ์น™", type="Model",
features=["Fatigue Load Index", "Isolation Tendency Index", "weekend_out"],
apps=["sns", "ott"], service="๊ฑด๊ฐ•ยท์šด๋™ ์ œํœด ํ˜œํƒ",
push="์ตœ๊ทผ ์ƒํ™œ ๋ฆฌ๋“ฌ์ด ๋ถˆ๊ทœ์น™ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์šด๋™ยท๊ฑด๊ฐ• ์ œํœด ํ˜œํƒ์œผ๋กœ ๊ฐ€๋ฒผ์šด ์‚ฐ์ฑ…๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณด์„ธ์š”.",
genie=dict(command="์•„์นจ ๋ฃจํ‹ด ๊ทœ์น™์ ์œผ๋กœ",
devices=["โฐ 7์‹œ ์•Œ๋žŒ", "๐ŸชŸ 7์‹œ ๋ธ”๋ผ์ธ๋“œ ์—ด๊ธฐ", "๐Ÿ’ก ์กฐ๋ช… ์ ๋“ฑ"],
desc="์•„์นจ์„ ์ผ์ •ํ•˜๊ฒŒ โ€” ๋ถˆ๊ทœ์น™ํ•ด์ง„ ์ƒํ™œ ๋ฆฌ๋“ฌ์„ ํ™˜๊ฒฝ์œผ๋กœ ๋‹ค์žก์Šต๋‹ˆ๋‹ค."),
biz=dict(tag="ํ™ˆIoT ํ™œ์šฉ", kpi="๊ธฐ๊ฐ€์ง€๋‹ˆ ์‚ฌ์šฉ โ†‘", note="์•„์นจ ๋ฃจํ‹ด ์ž๋™ํ™”๋กœ ๊ธฐ๊ฐ€์ง€๋‹ˆ๋ฅผ ๋งค์ผ ํ™œ์šฉ")),
dict(key="210", name="์ฆ‰๊ฐ ์ŠคํŠธ๋ ˆ์Šค ํ•ด์†Œ", type="Rule",
features=["Burnout Deep Score", "Fatigue Load Index"],
apps=["delivery", "shopping"], service="๋ฐฐ๋‹ฌยท์‡ผํ•‘ ๋ฉค๋ฒ„์‹ญ ํ• ์ธ",
push="์˜ค๋Š˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ๋‹ฌยท์‡ผํ•‘ ๋ฉค๋ฒ„์‹ญ ํ• ์ธ ํ˜œํƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€ ๋ณด์ƒ์œผ๋กœ ํ•˜๋ฃจ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•ด๋ณด์„ธ์š”.",
gmusic=dict(playlist="์‹ ๋‚˜๋Š” ํ”Œ๋ฆฌ",
desc="๊ธฐ๋ถ„ ์ „ํ™˜์šฉ ์—…๋น„ํŠธ โ€” ๋„ํŒŒ๋ฏผ์„ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ."),
biz=dict(tag="๊ตฌ๋… ARPU", kpi="์ง€๋‹ˆ๋ฎค์ง โ†‘", note="๊ธฐ๋ถ„ ์ „ํ™˜ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ๋กœ ์ง€๋‹ˆ๋ฎค์ง ํ™œ์šฉ")),
dict(key="220", name="ํ™˜๊ฒฝ ์ „ํ™˜ ์š•๊ตฌ", type="Rule",
features=["Recovery Motivation Score", "Isolation Tendency Index"],
apps=["travel"], service="์—ฌํ–‰ยท์ˆ™๋ฐ• ํ”„๋กœ๋ชจ์…˜",
push="์ด๋ฒˆ ์ฃผ๋ง ์ž ์‹œ ๋– ๋‚˜๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? MyKT ์ „์šฉ ์ˆ™๋ฐ• ํ• ์ธ ํ˜œํƒ์„ ํ™•์ธํ•ด๋ณด์„ธ์š”.",
genie=dict(command="์™ธ์ถœ๋ชจ๋“œ๋กœ ๋ฐ”๊ฟ”์ค˜",
devices=["๐Ÿ’ก ์กฐ๋ช… OFF", "๐Ÿ”Œ ํ”Œ๋Ÿฌ๊ทธ OFF", "๐Ÿ”’ ๋„์–ด๋ฝ ์ž ๊ธˆ"],
desc="์ฆ‰ํฅ ๋‚˜๋“ค์ด๋ฅผ ๊ฐ€๋ณ๊ฒŒ โ€” ๊ธธ์•ˆ๋‚ดยท๋‚ ์”จ์™€ ํ•จ๊ป˜ ์™ธ์ถœ ํ™˜๊ฒฝ์„ ํ•œ ๋ฒˆ์— ์ •๋ฆฌ."),
biz=dict(tag="์ œํœด์ˆ˜์ต", kpi="์—ฌํ–‰ยท์ˆ™๋ฐ• โ†‘", note="์—ฌํ–‰ยท์ˆ™๋ฐ• ์ œํœด ํ”„๋กœ๋ชจ์…˜ ์ „ํ™˜")),
dict(key="230", name="์‹ ์ฒด ํšŒ๋ณต ์‹œ๋„", type="Rule",
features=["Recovery Motivation Score", "Fatigue Load Index"],
apps=["exercise"], service="ํ—ฌ์Šคยท๋Ÿฌ๋‹ ์ œํœด ์ฟ ํฐ",
push="์šด๋™์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ข‹์€ ํƒ€์ด๋ฐ์ž…๋‹ˆ๋‹ค. ํ—ฌ์Šคยท๋Ÿฌ๋‹ ์ œํœด ์ฟ ํฐ์ด ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.",
gmusic=dict(playlist="์šด๋™ํ•  ๋•Œ ๋“ฃ๋Š” ์Œ์•…",
desc="๋Ÿฌ๋‹ยทํ™ˆํŠธ ํ…œํฌ์— ๋งž์ถ˜ ์šด๋™ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ."),
genie=dict(command="์šด๋™ ํƒ€์ด๋จธ ๋งž์ถฐ์ค˜",
devices=["โฑ๏ธ ์šด๋™ ํƒ€์ด๋จธ ์„ค์ •"],
desc="๊ฐ€๋ณ๊ฒŒ ๋ชธ์„ ์›€์ง์ด๋Š” ๋ฃจํ‹ด์„ ์ง€์›."),
biz=dict(tag="์ œํœด์ˆ˜์ต", kpi="ํ—ฌ์Šค ์ œํœด โ†‘", note="ํ—ฌ์Šคยท๋Ÿฌ๋‹ ์ œํœด ์ „ํ™˜")),
dict(key="240", name="์‹ฌ๋ฆฌยท๊ฐ์ • ํšŒ๋ณต", type="Rule",
features=["Recovery Motivation Score", "Isolation Tendency Index"],
apps=["mental_recovery", "music"], service="์ง€๋‹ˆ๋ฎค์ง ๋ช…์ƒยทํž๋ง ์ฝ˜ํ…์ธ ",
push="๋งˆ์Œ์„ ์‰ฌ๊ฒŒ ํ•ด์ค„ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์ง€๋‹ˆ๋ฎค์ง ๋ช…์ƒ ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.",
gmusic=dict(playlist="ํž๋ง ์Œ์•…",
desc="๋งˆ์Œ์„ ๊ฐ€๋ผ์•‰ํžˆ๋Š” ๋ช…์ƒยทํž๋ง ์‚ฌ์šด๋“œ."),
genie=dict(command="ํž๋ง ๋ชจ๋“œ๋กœ ๋ฐ”๊ฟ”์ค˜",
devices=["๐ŸŒซ๏ธ ๋””ํ“จ์ € ON", "๐Ÿ’ก ์กฐ๋ช… ๋”ฐ๋œปํ•˜๊ฒŒยท๋‚ฎ์ถค"],
desc="๊ฐ์ •์„ ์‰ฌ๊ฒŒ ํ•˜๋Š” ๋ถ„์œ„๊ธฐ๋กœ โ€” ํ–ฅ๊ณผ ๋น›์œผ๋กœ ์•ˆ์ •๊ฐ์„ ๋”ํ•ฉ๋‹ˆ๋‹ค."),
biz=dict(tag="๊ตฌ๋… ARPU", kpi="์ง€๋‹ˆ๋ฎค์ง โ†‘", note="ํž๋งยท๋ช…์ƒ ๊ตฌ๋… ์ „ํ™˜")),
dict(key="250", name="์ผ์ƒ ํšŒ๋ณต", type="Rule",
features=["Recovery Motivation Score", "Isolation Tendency Index"],
apps=["messenger", "reading", "exercise"], service="์นดํŽ˜ยท๋ฌธํ™” ๋ฉค๋ฒ„์‹ญ ํ˜œํƒ",
push="์˜ค๋žœ๋งŒ์— ์ง€์ธ๊ณผ ์—ฐ๋ฝํ•ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ์นดํŽ˜ ๋ฉค๋ฒ„์‹ญ ํ• ์ธ ํ˜œํƒ์„ ํ™œ์šฉํ•ด๋ณด์„ธ์š”.",
genie=dict(command="์•ˆ๋ถ€ ์ฑ™๊ธฐ๊ธฐ ์ผ์ • ์ถ”๊ฐ€ํ•ด์ค˜",
devices=["๐Ÿ“… ์บ˜๋ฆฐ๋”: ์ด๋ฒˆ ์ฃผ๋ง ์นœ๊ตฌ ๋งŒ๋‚˜๊ธฐ"],
desc="๊ด€๊ณ„ ํšŒ๋ณต์˜ ์ฒซ๊ฑธ์Œ์„ ์ผ์ •์œผ๋กœ โ€” ์ผ์ƒ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์ž‘์€ ๊ณ„๊ธฐ."),
biz=dict(tag="ํ™ˆIoT ํ™œ์šฉ", kpi="๊ธฐ๊ฐ€์ง€๋‹ˆ ์‚ฌ์šฉ โ†‘", note="์•ˆ๋ถ€ ์ผ์ • ๋“ฑ๋ก์œผ๋กœ ๊ธฐ๊ฐ€์ง€๋‹ˆ ํ™œ์šฉ")),
]
def build_intents():
intents = []
for t in TAX:
l1_id, l1_name = L1[t["key"][0]]
iid = f"INT-W{t['key']}"
intents.append({
"id": iid, "name": t["name"],
"L1_id": l1_id, "L1_name": l1_name,
"L2_id": iid, "L2_name": t["name"],
"inference_type": t["type"], "features": t["features"],
})
return {"scenario_id": SCENARIO_ID, "version": "0.1.0",
"description": "์ง์žฅ์ธ ๋ฒˆ์•„์›ƒ/ํšŒ๋ณต ์‹œ๋‚˜๋ฆฌ์˜ค Intent Taxonomy",
"intents": intents}
# ์ฑ„๋„ โ€” kind: ํ”„๋ก ํŠธ์˜ ๋ฒ”์šฉ ๋ Œ๋”๋Ÿฌ๊ฐ€ ์ฑ„๋„ ์ข…๋ฅ˜๋ณ„ ๋ชฉ์—…์„ ๊ฒฐ์ • (์‹œ๋‚˜๋ฆฌ์˜ค ํŠนํ™” ์ฝ”๋“œ ์ง€์–‘)
# phone-push : ํœด๋Œ€ํฐ ๋ฝ์Šคํฌ๋ฆฐ ํ‘ธ์‹œ ๋ชฉ์—…
# music-card : ์ง€๋‹ˆ๋ฎค์ง ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ ์นด๋“œ
# device-voice: ๊ธฐ๊ฐ€์ง€๋‹ˆ ์Œ์„ฑ ๋ช…๋ น + ํ™ˆIoT ๊ธฐ๊ธฐ ๋™์ž‘ ์นฉ
CHANNELS = [
{"id": "push", "name": "์•ฑ Push", "icon": "๐Ÿ“ฑ", "kind": "phone-push",
"characteristic": "๊ณ ๊ฐ ์ƒํƒœ์— ๋งž๋Š” ์ถ”์ฒœ ์„œ๋น„์Šค๋ฅผ MyKT ์•ฑ Push ๋ฉ”์‹œ์ง€๋กœ ์ œ๊ณต โ€” ๋ฒˆ์•„์›ƒ ์™„ํ™”ยท์ผ์ƒ ํšŒ๋ณต ์ง€์›"},
{"id": "genie_music", "name": "์ง€๋‹ˆ๋ฎค์ง", "icon": "๐ŸŽต", "kind": "music-card",
"characteristic": "ํ‰์†Œ ์ฒญ์ทจ ์ด๋ ฅยท์‹œ๊ฐ„๋Œ€ ์ทจํ–ฅ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ง€๊ธˆ ์ƒํƒœ์— ๋งž๋Š” ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ๋ฅผ ํ๋ ˆ์ด์…˜"},
{"id": "gigagenie", "name": "๊ธฐ๊ฐ€์ง€๋‹ˆ ยท ํ™ˆIoT", "icon": "๐Ÿ ", "kind": "device-voice",
"characteristic": "์Œ์„ฑ ํ•œ๋งˆ๋””๋กœ ์ง‘์•ˆ ํ™˜๊ฒฝ(์กฐ๋ช…ยท์ปคํŠผยท๋„์–ด๋ฝยท๊ฐ€์ „)์„ ์ƒํƒœ์— ๋งž๊ฒŒ ์ž๋™ ์„ธํŒ…"},
]
def build_actions():
actions = {}
for t in TAX:
iid = f"INT-W{t['key']}"
act = {"push": t["push"], "service": t["service"]}
if t.get("gmusic"):
act["genie_music"] = t["gmusic"]
if t.get("genie"):
act["gigagenie"] = t["genie"]
if t.get("biz"):
act["business_value"] = t["biz"]
actions[iid] = act
return {"scenario_id": SCENARIO_ID, "version": "0.1.0",
"description": "์ง์žฅ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค Intent๋ณ„ ๋ฉ€ํ‹ฐ์ฑ„๋„ ํ™œ์šฉ ์˜ˆ์‹œ (Pushยท์ง€๋‹ˆ๋ฎค์งยท๊ธฐ๊ฐ€์ง€๋‹ˆ) + ๋น„์ฆˆ๋‹ˆ์Šค ์ž„ํŒฉํŠธ",
"channels": CHANNELS, "actions": actions}
def build_behavior_intents():
entity_intents = {}
for t in TAX:
iid = f"INT-W{t['key']}"
for app in t["apps"]:
entity_intents.setdefault(app, []).append(iid)
return {"scenario_id": SCENARIO_ID, "version": "0.1.0",
"description": "์ง์žฅ์ธ ์•ฑ ์„ ํƒ(entity) โ†’ ์ง์ ‘ ์‹ ํ˜ธ Intent ๋งคํ•‘",
"entity_intents": entity_intents}
def main():
emit_layers(
OUT_DIR / "engine",
taxonomy=build_intents(),
context_library=build_actions(),
behavior_signals=build_behavior_intents()["entity_intents"],
)
from collections import Counter
ints = build_intents()["intents"]
print("inference_type:", Counter(i["inference_type"] for i in ints))
bi = build_behavior_intents()["entity_intents"]
print("app entities mapped:", list(bi.keys()))
if __name__ == "__main__":
main()