์ด๋ฒˆ ํŽธ์€ smolagents ๊ธฐ๋ฐ˜ ๋ฉ€ํ‹ฐํˆด ๋ฆฌ์„œ์น˜ ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์‹ค์Šต์ด๋‹ค.
ํ•ต์‹ฌ์€ โ€œ์งˆ์˜ โ†’ ๋กœ์ปฌ ์ง€์‹ ๊ฒ€์ƒ‰ โ†’ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ โ†’ FINAL: ๊ณ„์•ฝ ์ถœ๋ ฅโ€ ํ๋ฆ„์„ ๊ณ ์ •ํ•ด, ํŒ€ ์ž๋™ํ™”์— ๋ฐ”๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ ํ˜•ํƒœ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

ํ•œ ์ค„ ๊ฒฐ๋ก 

๋„๊ตฌ ์ถœ๋ ฅ ๊ณ„์•ฝ(FINAL:)์„ ๋จผ์ € ๊ณ ์ •ํ•˜๊ณ , ์˜จ๋ผ์ธ(smolagents)ยท์˜คํ”„๋ผ์ธ(fallback) ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ํ•จ๊ป˜ ๋‘๋ฉด ์‹ค์Šต ์žฌํ˜„์„ฑ๊ณผ ์šด์˜ ์•ˆ์ •์„ฑ์„ ๋™์‹œ์— ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค.

flowchart LR
  A[์‚ฌ์šฉ์ž ์งˆ์˜] --> B[search_docs ํˆด]
  B --> C[build_checklist ํˆด]
  C --> D[CodeAgent ์ถ”๋ก ]
  D --> E[FINAL ๊ณ„์•ฝ ๋ฌธ์ž์—ด]
  E --> F[single/eval ํŒŒ์„œ]
  F --> G[PASS/FAIL ํŒ์ •]

์‹ค์Šต ๋ชฉํ‘œ

  • smolagents CodeAgent์— ์ปค์Šคํ…€ ๋„๊ตฌ 2๊ฐœ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • ์ถœ๋ ฅ ํฌ๋งท์„ FINAL: summary=... | checklist=... | verdict=...๋กœ ๊ณ ์ •ํ•œ๋‹ค.
  • selfcheck โ†’ single โ†’ eval ์ˆœ์„œ๋กœ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒ€์ฆ ๋ฃจํ”„๋ฅผ ๋งŒ๋“ ๋‹ค.

์‹ค์Šต ํŒŒ์ผ


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

  • ๋„๊ตฌ: Python 3.10+, ํ„ฐ๋ฏธ๋„, ๊ฐ€์ƒํ™˜๊ฒฝ
  • ์ž…๋ ฅ: requirements.txt (+ ์˜จ๋ผ์ธ ๋ชจ๋“œ๋ฉด API ํ‚ค)
  • ์‹คํ–‰๋ช…๋ น:
cd "/home/tw2/Documents/n8n/data/shared/syn/8.quartz/Agent/๐Ÿค— HF-Agents-Course/downloads"
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
  • ์„ฑ๊ณตํŒ์ •:
    • (.venv) ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋ณด์ธ๋‹ค.
    • ์„ค์น˜๊ฐ€ ์—๋Ÿฌ ์—†์ด ๋๋‚œ๋‹ค.

2) ์…€ํ”„์ฒดํฌ ์‹คํ–‰ (๋„๊ตฌ ๋‹จ์œ„ ๊ฒ€์ฆ)

  • ๋„๊ตฌ: day13_multitool_research_handson.py
  • ์ž…๋ ฅ: ๋‚ด์žฅ ํ…Œ์ŠคํŠธ ์งˆ์˜(smolagents tool calling ํ‰๊ฐ€)
  • ์‹คํ–‰๋ช…๋ น:
python3 day13_multitool_research_handson.py --mode selfcheck
  • ์„ฑ๊ณตํŒ์ •:
    • ์ถœ๋ ฅ JSON์— "selfcheck_ok": true

3) ๋‹จ์ผ ์‹คํ–‰ (์˜คํ”„๋ผ์ธ ์žฌํ˜„ ๊ฒฝ๋กœ)

  • ๋„๊ตฌ: day13_multitool_research_handson.py
  • ์ž…๋ ฅ: ์งˆ์˜ 1๊ฐœ
  • ์‹คํ–‰๋ช…๋ น:
python3 day13_multitool_research_handson.py \
  --mode single \
  --offline \
  --query "HF Agents Course์—์„œ tool calling ํ•™์Šต ํฌ์ธํŠธ ์ •๋ฆฌ"
  • ์„ฑ๊ณตํŒ์ •:
    • verdict๊ฐ€ READY ๋˜๋Š” NEEDS_REVIEW
    • summary, checklist ํ•„๋“œ๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š๋‹ค.

4) ๋‹จ์ผ ์‹คํ–‰ (์˜จ๋ผ์ธ smolagents ๊ฒฝ๋กœ)

  • ๋„๊ตฌ: day13_multitool_research_handson.py, smolagents, LLM API ํ‚ค
  • ์ž…๋ ฅ:
    • OPENAI_API_KEY (์˜ˆ์‹œ)
    • ๋ชจ๋ธ: openai/gpt-4o-mini (๊ธฐ๋ณธ)
  • ์‹คํ–‰๋ช…๋ น:
export OPENAI_API_KEY="<your-key>"
python3 day13_multitool_research_handson.py \
  --mode single \
  --model openai/gpt-4o-mini \
  --query "smolagents์—์„œ CodeAgent์™€ ToolCallingAgent ์ฐจ์ด๋ฅผ ์š”์•ฝํ•ด์ค˜"
  • ์„ฑ๊ณตํŒ์ •:
    • ๊ฒฐ๊ณผ JSON์— summary/checklist/verdict๊ฐ€ ํŒŒ์‹ฑ๋œ๋‹ค.
    • verdict๊ฐ€ READY ๋˜๋Š” NEEDS_REVIEW์ด๋‹ค.

5) ๋ฐฐ์น˜ ํ‰๊ฐ€ (์žฌํ˜„์„ฑ ์ ๊ฒ€)

  • ๋„๊ตฌ: sample_tasks_day13.json
  • ์ž…๋ ฅ: ์ƒ˜ํ”Œ ํƒœ์Šคํฌ 3๊ฐœ
  • ์‹คํ–‰๋ช…๋ น:
# ์˜คํ”„๋ผ์ธ ํ‰๊ฐ€
python3 day13_multitool_research_handson.py --mode eval --offline --input sample_tasks_day13.json
 
# ์˜จ๋ผ์ธ ํ‰๊ฐ€
python3 day13_multitool_research_handson.py --mode eval --input sample_tasks_day13.json
  • ์„ฑ๊ณตํŒ์ •:
    • pass = true ๋˜๋Š” score >= 0.66

์ฝ”๋“œ์—์„œ ๊ผญ ๋ณผ ํฌ์ธํŠธ

  1. search_course_docs()
    • ์งˆ์˜ ๊ธฐ๋ฐ˜ ๋ฌธ์„œ ์Šค๋‹ˆํŽซ ๊ฒ€์ƒ‰(๋กœ์ปฌ ์ง€์‹๋ฒ ์ด์Šค)
  2. make_checklist()
    • ์š”์•ฝ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ ๊ฒ€ ํ•ญ๋ชฉ์œผ๋กœ ๋ณ€ํ™˜
  3. parse_final_block()
    • FINAL: ๊ณ„์•ฝ ๋ฌธ์ž์—ด์„ ๊ตฌ์กฐํ™” JSON์œผ๋กœ ํŒŒ์‹ฑ
  4. offline_agent() / online_agent()
    • ์šด์˜ ์žฅ์•  ๋Œ€๋น„ ์ด์ค‘ ์‹คํ–‰ ๊ฒฝ๋กœ

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (์ž์ฃผ ๋ง‰ํžˆ๋Š” 5๊ฐ€์ง€)

  1. ModuleNotFoundError: smolagents

    • ์›์ธ: ๊ฐ€์ƒํ™˜๊ฒฝ ๋ฏธํ™œ์„ฑํ™” ๋˜๋Š” ์˜์กด์„ฑ ๋ฏธ์„ค์น˜
    • ํ•ด๊ฒฐ: source .venv/bin/activate ํ›„ pip install -r requirements.txt
  2. OPENAI_API_KEY ๋ˆ„๋ฝ์œผ๋กœ ์˜จ๋ผ์ธ ์‹คํ–‰ ์‹คํŒจ

    • ์›์ธ: LiteLLMModel ์ธ์ฆ ์ •๋ณด ๋ฏธ์„ค์ •
    • ํ•ด๊ฒฐ: export OPENAI_API_KEY="..." ํ›„ ์žฌ์‹คํ–‰ (ํ˜น์€ --offline์œผ๋กœ ๋จผ์ € ๊ฒ€์ฆ)
  3. input JSON root must be list

    • ์›์ธ: sample_tasks_day13.json ๋ฃจํŠธ๋ฅผ ๊ฐ์ฒด {}๋กœ ์ €์žฅ
    • ํ•ด๊ฒฐ: ๋ฃจํŠธ๋ฅผ ๋ฐฐ์—ด [] ํ˜•์‹์œผ๋กœ ์œ ์ง€
  4. FINAL: ํŒŒ์‹ฑ ์‹คํŒจ (verdict=PARSE_ERROR)

    • ์›์ธ: ๋ชจ๋ธ ์ถœ๋ ฅ์ด ๊ณ„์•ฝ ํฌ๋งท์„ ๋ฒ—์–ด๋‚จ
    • ํ•ด๊ฒฐ: ํ”„๋กฌํ”„ํŠธ์˜ ์ถœ๋ ฅ ํ˜•์‹์„ ๋” ์—„๊ฒฉํžˆ ๊ณ ์ •ํ•˜๊ณ , ํ•„์š” ์‹œ ์žฌ์‹œ๋„ ๋กœ์ง ์ถ”๊ฐ€
  5. ํ•œ๊ธ€/์ด๋ชจ์ง€ ๊ฒฝ๋กœ์—์„œ ํŒŒ์ผ ์ฐพ๊ธฐ ์‹คํŒจ

    • ์›์ธ: ๊ฒฝ๋กœ ์ธ์šฉ ๋ˆ„๋ฝ
    • ํ•ด๊ฒฐ: ๊ฒฝ๋กœ ์ „์ฒด๋ฅผ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ ์‹คํ–‰

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

  • selfcheck_ok=true ํ™•์ธ
  • single --offline ๊ฒฐ๊ณผ์—์„œ summary/checklist/verdict ํ™•์ธ
  • single(์˜จ๋ผ์ธ)์—์„œ ๋™์ผ ๊ณ„์•ฝ ํŒŒ์‹ฑ ํ™•์ธ
  • eval ๊ฒฐ๊ณผ score ๊ธฐ๋ก
  • ํŒ€ ๊ธฐ์ค€์œผ๋กœ required_keyword 1๊ฐœ ์ด์ƒ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ

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

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

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

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