์ด๋ฒˆ ํŽธ์€ **โ€œ์—์ด์ „ํŠธ 1๊ฐœ๋กœ ๋‹ค ํ•˜๋ ค๋‹ค ๋ณต์žกํ•ด์ง€๋Š” ๋ฌธ์ œโ€**๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
ํ•ต์‹ฌ์€ ๊ฐ„๋‹จํ•˜๋‹ค: ์—ญํ• ์„ ๋‚˜๋ˆˆ ๋‘ ์ „๋ฌธ ์—์ด์ „ํŠธ(risk_analyst, response_planner)๋ฅผ ๋งค๋‹ˆ์ € ์—์ด์ „ํŠธ๊ฐ€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

ํ•œ ์ค„ ๊ฒฐ๋ก 

smolagents์˜ managed_agents ํŒจํ„ด์œผ๋กœ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๋ฉด, ์ดˆ๋ณด์ž๋„ **์žฅ์•  ๋Œ€์‘ ์˜์‚ฌ๊ฒฐ์ •(type/severity/lane/comms/eta/rollback)**์„ ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณต์‹ ๊ทผ๊ฑฐ ๋ฐ”๋กœ๋ณด๊ธฐ

์™œ ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ๊ฐ€ ์‹ค๋ฌด์—์„œ ์œ ๋ฆฌํ•œ๊ฐ€

smolagents ํŠœํ† ๋ฆฌ์–ผ์˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค์ฒ˜๋Ÿผ, ์ข‹์€ ์‹œ์Šคํ…œ์€ โ€œ๋ณต์žกํ•œ ํŒ๋‹จ์„ ์ž‘๊ณ  ๋ช…ํ™•ํ•œ ์—ญํ• โ€๋กœ ์ชผ๊ฐค์ˆ˜๋ก ์•ˆ์ •์ ์ด๋‹ค.

  • risk_analyst: ์žฅ์•  ํƒ€์ž…/์‹ฌ๊ฐ๋„/ETA ์‚ฐ์ •
  • response_planner: ๋Œ€์‘ lane/์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜/๋กค๋ฐฑ ์ •์ฑ… ์ถ”์ฒœ
  • manager: ๋‘ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์ณ ์ตœ์ข… ์˜์‚ฌ๊ฒฐ์ • ํฌ๋งท์œผ๋กœ ์ •๋ฆฌ
flowchart LR
  A[์žฅ์•  ์ž…๋ ฅ: issue/users/payment] --> B[manager agent]
  B --> C[risk_analyst]
  C --> D[type/severity/eta]
  B --> E[response_planner]
  D --> E
  E --> F[lane/comms/rollback]
  F --> G[FINAL: ์šด์˜๊ฒฐ์ • 6ํ•„๋“œ]

์‰ฌ์šด ๋น„์œ 

  • ํ•œ ๋ช…์—๊ฒŒ โ€œ์ง„๋‹จ+๋Œ€์‘+๋ณด๊ณ โ€๋ฅผ ๋ชจ๋‘ ๋งก๊ธฐ๋ฉด ์‹ค์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.
  • ๋ณ‘์›์ฒ˜๋Ÿผ ์ง„๋‹จํŒ€๊ณผ ์ฒ˜์น˜ํŒ€์„ ๋‚˜๋ˆ„๊ณ , ๋งˆ์ง€๋ง‰์— ๋‹น์ง ์ด๊ด„์ด ํ™•์ •ํ•˜๋ฉด ์šด์˜ ํ’ˆ์งˆ์ด ์˜ฌ๋ผ๊ฐ„๋‹ค.

์‹ค์Šต: 25~35๋ถ„ ์žฌํ˜„ (๋„๊ตฌ/์ž…๋ ฅ/์‹คํ–‰๋ช…๋ น/์„ฑ๊ณตํŒ์ •)

์‹ค์Šต ํŒŒ์ผ ๊ฒฝ๋กœ:
/home/tw2/Documents/n8n/data/shared/syn/8.quartz/Agent/๐Ÿค— HF-Agents-Course/downloads

Step 1) ํ™˜๊ฒฝ ์ค€๋น„

  • ๋„๊ตฌ: Python 3.10+, ํ„ฐ๋ฏธ๋„
  • ์ž…๋ ฅ: requirements.txt
  • ์‹คํ–‰๋ช…๋ น:
cd /home/tw2/Documents/n8n/data/shared/syn/8.quartz/Agent/๐Ÿค—\ HF-Agents-Course/downloads
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt
  • ์„ฑ๊ณตํŒ์ •: ์„ค์น˜ ์—๋Ÿฌ ์—†์ด ์ข…๋ฃŒ, (.venv) ํ‘œ์‹œ

Step 2) ๋„๊ตฌ ์…€ํ”„์ฒดํฌ (๋ชจ๋ธ ํ˜ธ์ถœ ์ „)

  • ๋„๊ตฌ: day8_multiagent_incident_commander.py
  • ์ž…๋ ฅ: ๋‚ด์žฅ ๊ทœ์น™ ํ…Œ์ŠคํŠธ(incident type/severity/lane/comms/rollback)
  • ์‹คํ–‰๋ช…๋ น:
python day8_multiagent_incident_commander.py --mode selfcheck
  • ์„ฑ๊ณตํŒ์ •: ์ถœ๋ ฅ JSON์— "tools_ok": true

Step 3) ๋‹จ์ผ ์žฅ์•  ์š”์ฒญ ์‹คํ–‰

  • ๋„๊ตฌ: day8_multiagent_incident_commander.py
  • ์ž…๋ ฅ:
    • issue: ๊ฒฐ์ œ ์Šน์ธ ์‹คํŒจ๊ฐ€ ๊ธ‰์ฆํ•˜๊ณ  ๊ณ ๊ฐ ๋ถˆ๋งŒ์ด ์ ‘์ˆ˜๋ฉ๋‹ˆ๋‹ค.
    • users: 3200
    • payment: 1
  • ์‹คํ–‰๋ช…๋ น:
# .env์— OPENAI_API_KEY ๋˜๋Š” HF_TOKEN ํ•„์š”
python day8_multiagent_incident_commander.py \
  --mode single \
  --provider auto \
  --issue "๊ฒฐ์ œ ์Šน์ธ ์‹คํŒจ๊ฐ€ ๊ธ‰์ฆํ•˜๊ณ  ๊ณ ๊ฐ ๋ถˆ๋งŒ์ด ์ ‘์ˆ˜๋ฉ๋‹ˆ๋‹ค." \
  --users 3200 \
  --payment 1
  • ์„ฑ๊ณตํŒ์ •:
    • parsed.parse_ok = true
    • parsed.severity = "sev1"์— ๊ทผ์ ‘
    • parsed.lane = "WAR_ROOM"์— ๊ทผ์ ‘

Step 4) ๋ฐฐ์น˜ ํ‰๊ฐ€ (์žฌํ˜„์„ฑ ํ™•์ธ)

  • ๋„๊ตฌ: day8_multiagent_incident_commander.py, sample_tasks_day8.json
  • ์ž…๋ ฅ: ์žฅ์•  ์‹œ๋‚˜๋ฆฌ์˜ค 3๊ฑด + ๊ธฐ๋Œ€๊ฐ’
  • ์‹คํ–‰๋ช…๋ น:
python day8_multiagent_incident_commander.py \
  --mode eval \
  --provider auto \
  --input sample_tasks_day8.json
  • ์„ฑ๊ณตํŒ์ •:
    • "pass": true ๋˜๋Š”
    • "score" >= 0.66

์‹ค๋ฌด ์ ์šฉ ํฌ์ธํŠธ

  1. SRE/์˜จ์ฝœ ์šด์˜: sev1/sev2/sev3 ๊ธฐ์ค€์„ ํ•จ์ˆ˜๋กœ ๊ณ ์ •ํ•ด ๊ฐœ์ธ์ฐจ ์ค„์ด๊ธฐ
  2. ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ‘œ์ค€ํ™”: status page ๊ณต๊ฐœ ๊ธฐ์ค€์„ choose_comms_channel๋กœ ๊ทœ์น™ํ™”
  3. ๋ฆด๋ฆฌ์ฆˆ/๋กค๋ฐฑ ์•ˆ์ „์žฅ์น˜: ๊ฒฐ์ œ ๊ฒฝ๋กœ ์˜ํ–ฅ(payment_path)์„ ๋กค๋ฐฑ ์ •์ฑ…๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ

ํ˜„์žฅํ˜• ๋ฏธ๋‹ˆ ์‚ฌ๋ก€

์‚ฌ๋ก€ A) ์žฅ์•  ์‹ฌ๊ฐ๋„ ๋ถ„๋ฅ˜๊ฐ€ ์‚ฌ๋žŒ๋งˆ๋‹ค ๋‹ฌ๋ž๋˜ ํŒ€

assess_severity ๊ทœ์น™์„ ์ฝ”๋“œ๋กœ ๊ณ ์ •ํ•œ ๋’ค, ์žฅ์•  ํšŒ์˜์—์„œ โ€œ์™œ sev1์ธ์ง€โ€๋ฅผ ํ•จ์ˆ˜ ๋กœ์ง์œผ๋กœ ์ฆ‰์‹œ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค.

์‚ฌ๋ก€ B) ๊ณต์ง€ ์ฑ„๋„์ด ๋Šฆ์–ด์ง€๋Š” ๋ฌธ์ œ

choose_comms_channel์— ์‚ฌ์šฉ์ž ์˜ํ–ฅ ์ˆ˜ ๊ธฐ์ค€์„ ๋„ฃ์–ด, ๋Œ€๊ทœ๋ชจ ์žฅ์• ์—์„œ status page ๊ณต์ง€๊ฐ€ ์ž๋™์œผ๋กœ ์šฐ์„ ๋˜๋„๋ก ๋ฐ”๊ฟจ๋‹ค.

์ž์ฃผ ๋ง‰ํžˆ๋Š” 4๊ฐ€์ง€

  1. ๋ชจ๋ธ ํ‚ค๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค
    • .env์— OPENAI_API_KEY ๋˜๋Š” HF_TOKEN ์„ค์ • ํ•„์š”
  2. parse_ok = false
    • FINAL: ์ถœ๋ ฅ ๊ณ„์•ฝ์„ ํ”„๋กฌํ”„ํŠธ์—์„œ ์ž„์˜ ๋ณ€๊ฒฝํ–ˆ๋Š”์ง€ ํ™•์ธ
  3. ๊ฒฝ๋กœ ๊ณต๋ฐฑ/์ด๋ชจ์ง€ ์˜ค๋ฅ˜
    • ๐Ÿค— HF-Agents-Course ๊ฒฝ๋กœ๋ฅผ ๋”ฐ์˜ดํ‘œ ๋˜๋Š” \ ๋กœ ์ด์Šค์ผ€์ดํ”„
  4. eval ์ ์ˆ˜ ๋‚ฎ์Œ
    • sample_tasks_day8.json์— ์‹ค์ œ ํŒ€ ์žฅ์•  ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ทœ์น™ ๋ณด์ •

์ ์šฉ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • selfcheck ์„ฑ๊ณต (tools_ok=true)
  • single์—์„œ parse_ok=true ํ™•์ธ
  • eval ์ ์ˆ˜ ๊ธฐ๋ก (score)
  • ์šฐ๋ฆฌ ํŒ€ ๊ธฐ์ค€์œผ๋กœ severity/comms/rollback ๊ทœ์น™ 1๊ฐœ ์ด์ƒ ์ˆ˜์ •

์ฐธ๊ณ  ๋งํฌ (์šฐ์„ ์ˆœ์œ„)

  1. https://github.com/huggingface/agents-course
  2. https://huggingface.co/learn/agents-course
  3. https://huggingface.co/docs/smolagents

์‹ค์Šต ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ

์ƒ์„ฑํ˜• AI ํ™œ์šฉ ๊ณ ์ง€

์ด ๋ฌธ์„œ๋Š” ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ ์ž‘์„ฑ๊ณผ ๊ตฌ์กฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ, ์ตœ์ข… ๋ฐœํ–‰ ์ „ ์‚ฌ๋žŒ์ด ์‚ฌ์‹ค๊ด€๊ณ„์™€ ์žฌํ˜„ ์ ˆ์ฐจ๋ฅผ ๊ฒ€ํ† ํ–ˆ๋‹ค.