์ด๋ฒˆ ํŽธ์˜ ํ•ต์‹ฌ์€ ๊ฐ„๋‹จํ•˜๋‹ค. CodeAgent(์ฝ”๋“œ ์‹คํ–‰ํ˜•) ๋‹ค์Œ ๋‹จ๊ณ„๋กœ, ToolCallingAgent(JSON ํ˜ธ์ถœํ˜•)๋ฅผ ์จ์„œ ๋ผ์šฐํŒ… ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด๋‹ค.

์ด์ „ ํŽธ(๋ณธํŽธ 01)์ด โ€œ์ฒซ ์‹คํ–‰โ€์ด์—ˆ๋‹ค๋ฉด, ์ด๋ฒˆ ํŽธ์€ โ€œ์‹ค๋ฌดํ˜• ์šด์˜ ํŒจํ„ดโ€์ด๋‹ค.

ํ•œ ์ค„ ๊ฒฐ๋ก 

๊ณ ๊ฐ ๋ฌธ์˜/์—…๋ฌด ์š”์ฒญ์ฒ˜๋Ÿผ ์ •ํ•ด์ง„ ๋„๊ตฌ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ToolCallingAgent๊ฐ€ ์ดˆ๋ณด์ž์—๊ฒŒ ๋” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ถœ๋ฐœ์ ์ด๋‹ค.

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

์™œ ์ด ์ฃผ์ œ๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€

Hugging Face Agents Course(Unit 2 smolagents)์™€ smolagents ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๊ณตํ†ต์œผ๋กœ ๊ฐ•์กฐํ•˜๋Š” ์ง€์ ์€ ๋‹ค์Œ์ด๋‹ค.

  • CodeAgent: ์œ ์—ฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ์ฝ”๋“œ ์‹คํ–‰์ด ๊ฐœ์ž…๋จ
  • ToolCallingAgent: JSON ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์กฐํ™”๋˜์–ด ๊ฒ€์ฆ/์šด์˜์— ์œ ๋ฆฌ

์ฆ‰, โ€œ๋ณต์žกํ•œ ์ถ”๋ก โ€๋ณด๋‹ค โ€œ์ •ํ•ด์ง„ ์—…๋ฌด ๋ถ„๊ธฐโ€๊ฐ€ ์ค‘์š”ํ•œ ํŒ€์ด๋ผ๋ฉด ToolCallingAgent๊ฐ€ ๋น ๋ฅธ ์‹ค๋ฌด ์ ์šฉ์ ์ด ๋œ๋‹ค.

flowchart LR
  A[๊ณ ๊ฐ ๋ฌธ์˜ ์ž…๋ ฅ] --> B[detect_category]
  B --> C[assign_priority]
  C --> D[suggest_action]
  D --> E[FINAL: category/priority/action]
  E --> F[ํ—ฌํ”„๋ฐ์Šคํฌ ํ/์—์Šค์ปฌ๋ ˆ์ด์…˜]

์‰ฌ์šด ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ

  • CodeAgent: ์ˆ™๋ จ ์ง์›์ด ์ƒํ™ฉ ๋ณด๊ณ  ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ๊นŒ์ง€ ์ž‘์„ฑํ•ด์„œ ์ฒ˜๋ฆฌ
  • ToolCallingAgent: ์ฝœ์„ผํ„ฐ ์ƒ๋‹ด์‚ฌ๊ฐ€ ์ •ํ•ด์ง„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ(๋„๊ตฌ) ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ

์ฒ˜์Œ ์šด์˜ ์ž๋™ํ™”๋ฅผ ๋ถ™์ผ ๋•Œ๋Š” โ€œ์ž์œ ๋„โ€๋ณด๋‹ค โ€œ์ผ๊ด€์„ฑโ€์ด ๋จผ์ €๋‹ค.

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

์‹ค์Šต ํŒŒ์ผ ๊ฒฝ๋กœ: /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) ๋„๊ตฌ ๋กœ์ง ์…€ํ”„์ฒดํฌ

  • ๋„๊ตฌ: day6_toolcalling_triage.py
  • ์ž…๋ ฅ: ๋‚ด์žฅ ํ…Œ์ŠคํŠธ(์นดํ…Œ๊ณ ๋ฆฌ/์šฐ์„ ์ˆœ์œ„/์•ก์…˜ ์ฝ”๋“œ)
  • ์‹คํ–‰๋ช…๋ น:
python day6_toolcalling_triage.py --mode selfcheck
  • ์„ฑ๊ณตํŒ์ •: ์ถœ๋ ฅ JSON์— "tools_ok": true

Step 3) ๋‹จ์ผ ์š”์ฒญ ์‹คํ–‰ (ToolCallingAgent)

  • ๋„๊ตฌ: day6_toolcalling_triage.py
  • ์ž…๋ ฅ:
    • issue: ๊ฒฐ์ œ๊ฐ€ ๋‘ ๋ฒˆ ์ฒญ๊ตฌ๋์–ด์š”. ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
    • tier: vip
    • outage: 0
  • ์‹คํ–‰๋ช…๋ น:
# .env์— OPENAI_API_KEY ๋˜๋Š” HF_TOKEN ํ•„์š”
python day6_toolcalling_triage.py \
  --mode single \
  --provider auto \
  --issue "๊ฒฐ์ œ๊ฐ€ ๋‘ ๋ฒˆ ์ฒญ๊ตฌ๋์–ด์š”. ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•ด์ฃผ์„ธ์š”." \
  --tier vip \
  --outage 0
  • ์„ฑ๊ณตํŒ์ •:
    • parsed.parse_ok = true
    • parsed.priority๊ฐ€ P1์— ๊ทผ์ ‘ํ•œ ๊ฒฐ๊ณผ

Step 4) ๋ฐฐ์น˜ ํ‰๊ฐ€

  • ๋„๊ตฌ: day6_toolcalling_triage.py, sample_tasks_day6.json
  • ์ž…๋ ฅ: ์ƒ˜ํ”Œ ๋ฌธ์˜ 3๊ฑด(๊ธฐ๋Œ€ category/priority/action ํฌํ•จ)
  • ์‹คํ–‰๋ช…๋ น:
python day6_toolcalling_triage.py \
  --mode eval \
  --provider auto \
  --input sample_tasks_day6.json
  • ์„ฑ๊ณตํŒ์ •:
    • "pass": true ๋˜๋Š”
    • "score" >= 0.66

์ดˆ๋ณด์ž ์‹ค์ˆ˜ ๋ฐฉ์ง€ ์ฒดํฌํฌ์ธํŠธ

  1. .env ํ‚ค ์—†์ด single/eval ๋จผ์ € ์‹คํ–‰ํ•ด์„œ ์‹คํŒจ
  2. ํ”„๋กฌํ”„ํŠธ์— ์ตœ์ข… ์ถœ๋ ฅ ํ˜•์‹(FINAL ๋ผ์ธ)์„ ์•ˆ ๋ฐ•์•„์„œ ํŒŒ์‹ฑ ์‹คํŒจ
  3. ๊ธฐ๋Œ€๊ฐ’ JSON(sample_tasks_day6.json) ๊ตฌ์กฐ๋ฅผ ์ž„์˜ ๋ณ€๊ฒฝํ•ด์„œ ํ‰๊ฐ€ ์˜ค๋ฅ˜

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

  • ๊ณ ๊ฐ์ง€์›(CS) ํ‹ฐ์ผ“ triage: billing/technical/account ์ž๋™ ๋ถ„๋ฅ˜
  • ์˜จ์ฝœ ์šด์˜: P1/P2/P3 ๊ธฐ์ค€์œผ๋กœ ์—์Šค์ปฌ๋ ˆ์ด์…˜ ์ž๋™ํ™”
  • SLA ๋ฆฌํฌํŠธ: score๋ฅผ ์ฃผ๊ฐ„ ์ง€ํ‘œ๋กœ ์ถ”์ ํ•ด ํ’ˆ์งˆ ๊ฐœ์„ 

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

์‚ฌ๋ก€ A) VIP ๊ฒฐ์ œ ์ด์Šˆ ์šฐ์„ ์ˆœ์œ„ ๋ˆ„๋ฝ

์ดˆ๊ธฐ ๊ทœ์น™์—์„œ tier=vip ๋ฐ˜์˜์ด ์•ฝํ•ด ๊ธด๊ธ‰๋„๊ฐ€ ๊ณผ์†Œํ‰๊ฐ€๋๋‹ค. assign_priority์— ๊ณ ๊ฐ๋“ฑ๊ธ‰ ๊ฐ€์ค‘์น˜๋ฅผ ๋„ฃ์ž P1 ๋ผ์šฐํŒ…์ด ์•ˆ์ •ํ™”๋๋‹ค.

์‚ฌ๋ก€ B) FINAL ํŒŒ์‹ฑ ์‹คํŒจ๋กœ ์ž๋™ํ™” ์ค‘๋‹จ

๋ชจ๋ธ ์‘๋‹ต ๋งˆ์ง€๋ง‰ ์ค„ ํ˜•์‹์ด ํ”๋“ค๋ ค ํŒŒ์‹ฑ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ถœ๋ ฅ ๊ณ„์•ฝ(FINAL: category|priority|action)์„ ๊ฐ•์ œํ•˜๊ณ  ์ •๊ทœ์‹ ๊ฒ€์ฆ์„ ๋„ฃ์€ ๋’ค ์‹คํŒจ์œจ์ด ์ค„์—ˆ๋‹ค.

25๋ถ„ ๋ณด๊ฐ• ๋ฃจํ‹ด

  • 5๋ถ„: ์ง€๋‚œ์ฃผ ์˜ค๋ถ„๋ฅ˜ 3๊ฑด ์ถ”์ถœ
  • 5๋ถ„: ์นดํ…Œ๊ณ ๋ฆฌ/์šฐ์„ ์ˆœ์œ„ ๊ทœ์น™ ๋ณด์ •
  • 5๋ถ„: sample_tasks_day6.json์— ์‹ค์ œ ๋ฌธ์˜ 3๊ฑด ์ถ”๊ฐ€
  • 5๋ถ„: --mode eval ์žฌ์‹คํ–‰ ํ›„ ์ ์ˆ˜ ๊ธฐ๋ก
  • 5๋ถ„: ์‹คํŒจ ์ผ€์ด์Šค๋ฅผ ํŒ€ ์šด์˜ ๋ฃฐ ๋ฌธ์„œ์— ๋ฐ˜์˜

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

  • selfcheck ์„ฑ๊ณต
  • ๋‹จ์ผ ์š”์ฒญ์—์„œ FINAL ํ˜•์‹ ํŒŒ์‹ฑ ์„ฑ๊ณต
  • ๋ฐฐ์น˜ ํ‰๊ฐ€ ์ ์ˆ˜ ๊ธฐ๋ก(score)
  • ์‹ค์ œ ํŒ€ ๋ถ„๋ฅ˜ ๊ธฐ์ค€(์นดํ…Œ๊ณ ๋ฆฌ/์šฐ์„ ์ˆœ์œ„)์„ ๋„๊ตฌ ํ•จ์ˆ˜์— ๋ฐ˜์˜

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

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

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

๋ณด๊ฐ• ์ถ”๊ฐ€: FINAL ํŒŒ์‹ฑ ์‹คํŒจ ์žฌํ˜„/๋ณต๊ตฌ

FINAL ๊ณ„์•ฝ์ด ํ”๋“ค๋ฆฌ๋ฉด ์ž๋™ํ™”๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋ฉˆ์ถ˜๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ์‹คํŒจ ์ผ€์ด์Šค๋ฅผ ์žฌํ˜„ํ•ด ๋ณด๋ฉด ๋ณต๊ตฌ ๊ธฐ์ค€์ด ๋ช…ํ™•ํ•ด์ง„๋‹ค.

์‹คํŒจ ์ถœ๋ ฅ ์˜ˆ์‹œ

๊ฒฐ๋ก ์€ billing ์ด๊ณ  ์šฐ์„ ์ˆœ์œ„๋Š” P1๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ์กฐ์น˜๋Š” refund_team์œผ๋กœ ์ „๋‹ฌํ•˜์„ธ์š”.
  • ๋ฌธ์ œ: FINAL: ์ ‘๋‘/๊ตฌ๋ถ„์ž ๊ณ„์•ฝ์ด ์—†์–ด ํŒŒ์‹ฑ ๋ถˆ๊ฐ€

์ •์ƒ ์ถœ๋ ฅ ์˜ˆ์‹œ

FINAL: billing|P1|handoff_refund_team

์ •๊ทœ์‹ ์ ๊ฒ€ ์˜ˆ์‹œ

import re
line = "FINAL: billing|P1|handoff_refund_team"
ok = bool(re.match(r"^FINAL:\s*[^|]+\|P[123]\|.+$", line))
print(ok)  # True

์šด์˜์—์„œ๋Š” ๋‹จ์ˆœํžˆ ๋ชจ๋ธ ๋‹ต๋ณ€ ํ’ˆ์งˆ๋ณด๋‹ค, ์ด๋Ÿฐ ๊ณ„์•ฝ ์œ ์ง€ ์—ฌ๋ถ€๊ฐ€ ์žฅ์• ๋ฅผ ์ค„์ด๋Š” ํ•ต์‹ฌ์ด๋‹ค.

ํ’ˆ์งˆ ์ ๊ฒ€ํ‘œ (2026-02-28)

  • ์žฌํ˜„์„ฑ: 9.0/10
  • ๊ณต์‹ ๊ทผ๊ฑฐ ์—ฐ๊ฒฐ: 9.0/10
  • ์šด์˜ ์ ์šฉ์„ฑ: 9.0/10
  • ๋ฌธ์„œ ๊ฐ€๋…์„ฑ: 8.5/10

์ฆ‰์‹œ ๋ณด๊ฐ• ํฌ์ธํŠธ 1๊ฐœ

  • FINAL ๊ณ„์•ฝ ์œ„๋ฐ˜ ์‹œ ์ž๋™ ์žฌ์งˆ์˜(re-ask) ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•ด ์šด์˜ ์ค‘๋‹จ ์‹œ๊ฐ„์„ ๋” ์ค„์ธ๋‹ค.

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

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