ํ•œ ์ค„๋กœ ๋งํ•˜๋ฉด, ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์€ ์‹คํ–‰ ์ฃผ๊ธฐ + ์ƒํƒœ ๊ณต์œ  + ์˜ค๋ฅ˜ ๋ณต๊ตฌ๋งŒ ์„ค๊ณ„ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ํ˜‘์—…ํ•œ๋‹ค. ์ด๋ฒˆ ๋ณธํŽธ 13์€ โ€œ๊ฐœ๋ณ„ ์—์ด์ „ํŠธโ€๋ฅผ ๋„˜์–ด โ€œํŒ€์˜ ๋ฆฌ๋”โ€๊ฐ€ ๋˜๋Š” ๋ฒ•์„ ๋‹ค๋ฃฌ๋‹ค.

ํ•œ ์ค„ ๊ฒฐ๋ก 

ManagedAgent๋กœ ์ฃผ๊ธฐ๋ณ„ ๊ณ„ํš์„ ๋งŒ๋“ค๊ณ , ToolCollection์œผ๋กœ ๋„๊ตฌ๋ฅผ ๊ณต์œ ํ•˜๋ฉด, ์‹คํŒจ ๊ฐ์ง€ ์‹œ ์ž๋™์œผ๋กœ ๋ณต๊ตฌํ•˜๋Š” ์•ˆ์ •์ ์ธ ์—์ด์ „ํŠธ ํŒ€์„ 30๋ถ„์— ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งฅ๋ฝ ๋ณด์™„

Hugging Face Agents Course์—์„œ ํ•ต์‹ฌ์€ ํ•ญ์ƒ ๊ฐ™๋‹ค.

  • ๋‹จ์ผ ์—์ด์ „ํŠธ๋Š” ๋„๊ตฌ ํ˜ธ์ถœ๋กœ ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ ๊ฐ„์˜ ์ƒํƒœ ๋™๊ธฐํ™”์™€ ์‹คํŒจ ๋ณต๊ตฌ๊ฐ€ ์žˆ์–ด์•ผ ์‹ค๋ฌด์— ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • smolagents์˜ ManagedAgent๋Š” ์ด ํ๋ฆ„์„ ์„ ์–ธํ˜•์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ ์ข‹๋‹ค.

์ด๋ฒˆ ๊ธ€์€ ๊ณ ๊ธ‰ ์—์ด์ „ํŠธ ์„ค๊ณ„ ์ „ํ™˜์šฉ์œผ๋กœ, โ€œ์ž์œจ์ ์ธ ํŒ€์›Œํฌโ€๋ฅผ ์†์— ์ตํžˆ๋Š” ๋ชฉ์ ์ด๋‹ค.

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

ํ•ต์‹ฌ ์š”์•ฝ (MECE)

1) ๊ฐœ๋…

  • ManagedAgent: ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๋ฅผ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๋Š” ์ค‘์•™ ๊ด€๋ฆฌ์ž
  • ToolCollection: ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋„๊ตฌ ์ง‘ํ•ฉ
  • Execution Cycle: ๊ณ„ํš โ†’ ์‹คํ–‰ โ†’ ๊ฒ€์ฆ โ†’ ์ˆ˜์ •์˜ ๋ฐ˜๋ณต ๋ฃจํ”„
  • State Sharing: ์—์ด์ „ํŠธ ๊ฐ„์˜ ์ƒํƒœ ์ •๋ณด ๊ณต์œ  ๋ฉ”์ปค๋‹ˆ์ฆ˜

2) ์›์ธ

์—์ด์ „ํŠธ ํŒ€์ด ๋ง‰ํžˆ๋Š” ์ด์œ ๋Š” ๋ณดํ†ต 3๊ฐ€์ง€๋‹ค.

  1. ๊ฐ ์—์ด์ „ํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•ด ์ƒํƒœ๊ฐ€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Œ
  2. ์‹คํŒจ ์‹œ ๋ณต๊ตฌ ๋กœ์ง์ด ์—†์–ด ์ค‘๋‹จ๋˜๊ณ  ํ™•์ธ ๋ถˆ๊ฐ€๋Šฅํ•จ
  3. ๋„๊ตฌ ํ˜ธ์ถœ์ด ์ค‘๋ณต๋˜์–ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋จ

3) ๋Œ€์‘

  • ManagedAgent โ†’ ์ค‘์•™ ๊ณ„ํš ์ƒ์„ฑ ๋ฐ ํ• ๋‹น
  • ToolCollection โ†’ ๋„๊ตฌ ์ค‘๋ณต ํ˜ธ์ถœ ์ œ๊ฑฐ
  • State โ†’ ์‹คํ–‰ ์ƒํƒœ ๊ณต์œ  ๋ฐ ๋™๊ธฐํ™”
  • Error Recovery โ†’ ์‹คํŒจ ๊ฐ์ง€์™€ ์ž๋™ ๋ณต๊ตฌ

4) ์‹คํ–‰

์ด๋ฒˆ ๋ฌธ์„œ์˜ day13_agent_orchestration.py๋ฅผ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋ฉด,

  • ์—์ด์ „ํŠธ ํŒ€ ๊ตฌ์ถ•
  • ์ฃผ๊ธฐ๋ณ„ ์‹คํ–‰ ์ œ์–ด
  • ์ƒํƒœ ๊ณต์œ  ๋ฐ ์‹คํŒจ ๋ณต๊ตฌ ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
flowchart TB
  A[์‚ฌ์šฉ์ž ์š”์ฒญ] --> B[ManagedAgent]
  B --> C{๊ณ„ํš ์ƒ์„ฑ}
  C --> D[ToolCollection ๋„๊ตฌ ํ• ๋‹น]
  D --> E[Agent1 ์‹คํ–‰]
  E --> F{์„ฑ๊ณต?}
  F -->|Yes| G[์ƒํƒœ ์ €์žฅ]
  F -->|No| H[๋ณต๊ตฌ ์‹œ๋„]
  H --> I{๋ณต๊ตฌ ์„ฑ๊ณต?}
  I -->|Yes| G
  I -->|No| J[์—๋Ÿฌ ๋กœ๊น…]
  G --> K[๋‹ค์Œ ์—์ด์ „ํŠธ]
  K --> L[์ตœ์ข… ๊ฒฐ๊ณผ]

์šฉ์–ด/๋น„์œ  ์„ค๋ช…

  • ManagedAgent: ํ”„๋กœ์ ํŠธ ๋งค๋‹ˆ์ €
  • ToolCollection: ๊ณต์šฉ ๋„๊ตฌํ•จ
  • Execution Cycle: ์ฃผ๊ฐ„ ์Šคํ”„๋ฆฐํŠธ
  • State: ์ง„ํ–‰ ์ƒํ‘œ์‹œํŒ
  • Error Recovery: ๋ฒ„๊ทธ ํŒจ์น˜ ์ž๋™ํ™”

์ฆ‰, ํ”„๋กœ์ ํŠธ ๋งค๋‹ˆ์ €(ManagedAgent)๊ฐ€ ์ฃผ๊ฐ„ ์Šคํ”„๋ฆฐํŠธ(Execution Cycle)๋ฅผ ๊ณ„ํšํ•˜๊ณ , ํŒ€์›๋“ค์—๊ฒŒ ๊ณต์šฉ ๋„๊ตฌํ•จ(ToolCollection)์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ง„ํ–‰ ์ƒํ‘œ์‹œํŒ(State)์„ ๊ณต์œ ํ•˜๊ณ , ๋ฒ„๊ทธ ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ ํŒจ์น˜(Error Recovery)ํ•˜๋Š” ํ๋ฆ„์ด๋‹ค.

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

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) ๋„๊ตฌ ์…€ํ”„์ฒดํฌ (๊ธฐ๋Šฅ ๋ชจ๋“ˆ ํ…Œ์ŠคํŠธ)

  • ๋„๊ตฌ: day13_agent_orchestration.py
  • ์ž…๋ ฅ: ๋‚ด์žฅ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค(๋„๊ตฌ ํ˜ธ์ถœ ํ…Œ์ŠคํŠธ)
  • ์‹คํ–‰๋ช…๋ น:
python day13_agent_orchestration.py --mode selfcheck
  • ์„ฑ๊ณตํŒ์ •: ์ถœ๋ ฅ JSON์— "tools_ok": true, "orchestration_ok": true

Step 3) ๋‹จ์ผ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹คํ–‰

  • ๋„๊ตฌ: day13_agent_orchestration.py
  • ์ž…๋ ฅ: ๋‹จ์ผ ๋ณตํ•ฉ ์—…๋ฌด ์š”์ฒญ
  • ์‹คํ–‰๋ช…๋ น:
# .env์— OPENAI_API_KEY ๋˜๋Š” HF_TOKEN ํ•„์š”
python day13_agent_orchestration.py \
  --mode single \
  --provider auto \
  --task "์ตœ๊ทผ AI ๊ธฐ์ˆ  ๋™ํ–ฅ์„ ์กฐ์‚ฌํ•˜๊ณ  ๊ฐ ๊ธฐ์ˆ ์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•œ ๋ณด๊ณ ์„œ ์ž‘์„ฑ"
  • ์„ฑ๊ณตํŒ์ •: ๊ฒฐ๊ณผ์— ๋ณด๊ณ ์„œ ๊ตฌ์กฐ ํฌํ•จ, ๊ฐ ์—์ด์ „ํŠธ ์‹คํ–‰ ๋กœ๊ทธ ํ™•์ธ ๊ฐ€๋Šฅ

Step 4) ๋ฐฐ์น˜ ํ‰๊ฐ€ (์•ˆ์ •์„ฑ ํ…Œ์ŠคํŠธ)

  • ๋„๊ตฌ: day13_agent_orchestration.py, sample_tasks_day13.json
  • ์ž…๋ ฅ: ๋ณตํ•ฉ ์š”์ฒญ 3๊ฐœ(์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ ํ˜‘์—… ํ•„์š”)
  • ์‹คํ–‰๋ช…๋ น:
python day13_agent_orchestration.py \
  --mode eval \
  --provider auto \
  --input sample_tasks_day13.json
  • ์„ฑ๊ณตํŒ์ •:
    • "pass": true ๋˜๋Š”
    • "score" >= 0.66

์น ํŒ ํŒ์„œํ˜• ์น˜ํŠธ์‹œํŠธ

์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„ฑ๊ณต ๊ณต์‹

  1. ManagedAgent๋กœ ๋ฉ”์ธ ๊ณ„ํš ์ƒ์„ฑ
  2. ToolCollection์œผ๋กœ ๋„๊ตฌ ๊ณต์œ 
  3. State๋กœ ์‹คํ–‰ ์ƒํƒœ ๋™๊ธฐํ™”
  4. Error Recovery ๋กœ์ง ์ถ”๊ฐ€
  5. ๋ฐฐ์น˜ ํ…Œ์ŠคํŠธ๋กœ ์•ˆ์ •์„ฑ ๊ฒ€์ฆ

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

  • CS ์ž๋™ํ™”: 1์ฐจ ์‘๋‹ต โ†’ 2์ฐจ ํ™•์ธ โ†’ 3์ฐจ ๋ณด๊ณ ์˜ ์ž๋™ํ™” ํ๋ฆ„ ๊ตฌ์ถ•
  • ์ฝ˜ํ…์ธ  ์ƒ์„ฑ: ๋ฆฌ์„œ์น˜ โ†’ ์š”์•ฝ โ†’ ๋ฒˆ์—ญ โ†’ ๊ฒ€ํ† ์˜ ํŒ€ ์ž๋™ํ™”
  • ์šด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง: ์ƒํƒœ ๊ณต์œ ๋ฅผ ํ†ตํ•ด ๊ฐ ์—์ด์ „ํŠธ์˜ ์ง„ํ–‰ ์ƒํ™ฉ ์‹ค์‹œ๊ฐ„ ํ™•์ธ

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

์‚ฌ๋ก€ A) ์—์ด์ „ํŠธ ๊ฐ„ ์ƒํƒœ ๋ถˆ์ผ์น˜๋กœ ๋ฐ์ดํ„ฐ ์†์‹ค

๊ฐ ์—์ด์ „ํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋‹ค ๋ณด๋‹ˆ ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๋ฌผ์— ๋ถ€์ •ํ™•ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋๋‹ค. SharedState๋ฅผ ๋„์ž…ํ•˜๊ณ  ๊ฐ ์—์ด์ „ํŠธ๊ฐ€ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋„๋ก ์ˆ˜์ •ํ•˜์ž ๋ฐ์ดํ„ฐ ์ •ํ™•๋„๊ฐ€ 95%๋กœ ๊ฐœ์„ ๋๋‹ค.

์‚ฌ๋ก€ B) ์ค‘๋ณต ๋„๊ตฌ ํ˜ธ์ถœ๋กœ ์„ฑ๋Šฅ ์ €ํ•˜

์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๊ฐ€ ๋™์ผํ•œ API๋ฅผ ํ˜ธ์ถœํ•˜๋‹ค ๋ณด์ž ์š”์ฒญ ํ•œ๋„์— ๋„๋‹ฌํ•ด ์„œ๋น„์Šค ์ค‘๋‹จ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ToolCollection์„ ๋„์ž…ํ•˜๊ณ  ๋„๊ตฌ ํ˜ธ์ถœ์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜์ž ์‘๋‹ต ์‹œ๊ฐ„์ด 70% ๊ฐœ์„ ๋๋‹ค.

์‚ฌ๋ก€ C) ์‹คํŒจ ์‹œ ๋ณต๊ตฌ ๋กœ์ง ๋ถ€์žฌ

๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์—์ด์ „ํŠธ๊ฐ€ ๋ชจ๋‘ ์ค‘๋‹จ๋๋‹ค. RetryAgent์™€ FallbackAgent๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์‹คํŒจ ์‹œ ์ž๋™์œผ๋กœ ๋Œ€์ฒด ์—์ด์ „ํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ๋”๋ผ์šด์˜ ์•ˆ์ •์„ฑ์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋๋‹ค.

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

  • ๊ฐ€์ƒํ™˜๊ฒฝ + ํŒจํ‚ค์ง€ ์„ค์น˜ ์™„๋ฃŒ
  • selfcheck ์„ฑ๊ณต(tools_ok=true, orchestration_ok=true)
  • .env์— OPENAI_API_KEY ๋˜๋Š” HF_TOKEN ์„ค์ •
  • single ๋ชจ๋“œ๋กœ ์ฒซ ์„ฑ๊ณต ๊ฒฐ๊ณผ ํ™•๋ณด
  • eval ์ ์ˆ˜(score) ๊ธฐ๋ก ํ›„ ๊ฐœ์„  ํฌ์ธํŠธ 1๊ฐœ ์ด์ƒ ๋ฉ”๋ชจ

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

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

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

๋ณด๊ฐ• ์ถ”๊ฐ€: single / eval ์ถœ๋ ฅ ์˜ˆ์‹œ

์ดˆ๋ณด์ž ํ˜ผ์„ ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ •์ƒ ์ถœ๋ ฅ ์˜ˆ์‹œ๋ฅผ ๊ณ ์ •ํ•œ๋‹ค.

single ์ •์ƒ ์˜ˆ์‹œ

{
  "mode": "single",
  "task": "AI ๊ธฐ์ˆ  ๋™ํ–ฅ ์กฐ์‚ฌ",
  "result": {
    "research_agent": "์กฐ์‚ฌ ์™„๋ฃŒ",
    "analysis_agent": "๋ถ„์„ ์™„๋ฃŒ",
    "report_agent": "๋ณด๊ณ ์„œ ์ƒ์„ฑ ์™„๋ฃŒ"
  },
  "ok": true,
  "state": {
    "current_phase": "completed",
    "agents_used": ["research", "analysis", "report"]
  }
}

eval ์ •์ƒ ์˜ˆ์‹œ

{
  "mode": "eval",
  "total": 3,
  "correct": 2,
  "score": 0.67,
  "pass": true,
  "failures": [
    {
      "task_id": 2,
      "error": "network_timeout",
      "recovered": true
    }
  ]
}

๋น„์ •์ƒ ์˜ˆ์‹œ(์ƒํƒœ ๋™๊ธฐํ™” ์‹คํŒจ)

{
  "mode": "single",
  "ok": false,
  "error": "state_sync_failed",
  "details": "Agent1๊ณผ Agent2์˜ ์ƒํƒœ ๋ถˆ์ผ์น˜ ๊ฐ์ง€"
}

ํ’ˆ์งˆ ์ ๊ฒ€ํ‘œ (2026-04-07)

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

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

  • ToolCollection์˜ ๋„์šฐ ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ์˜ˆ์‹œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

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

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