๐Ÿค— 03. HF Agents Course ์‹ค์ŠตํŽธ 1 - ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋กœ ๋„๊ตฌํ˜• ์—์ด์ „ํŠธ ์™„์ฃผ

๋ชฉํ‘œ: smolagents๋กœ ์›น ๊ฒ€์ƒ‰ + ๊ณ„์‚ฐ + ์š”์•ฝ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฏธ๋‹ˆ ์—์ด์ „ํŠธ๋ฅผ ๋กœ์ปฌ์—์„œ ์žฌํ˜„ํ•œ๋‹ค.

0) ์ค€๋น„๋ฌผ

  • Python 3.10+
  • ๊ฐ€์ƒํ™˜๊ฒฝ(venv/conda)
  • Hugging Face ๊ณ„์ • ๋ฐ ํ† ํฐ(ํ•„์š” ์‹œ)

1) ํ™˜๊ฒฝ ์„ธํŒ…

๋„๊ตฌ

  • smolagents
  • (์„ ํƒ) duckduckgo-search

์ž…๋ ฅ

  • ์ƒˆ ํ”„๋กœ์ ํŠธ ํด๋”

์‹คํ–‰ ๋ช…๋ น

python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install smolagents duckduckgo-search

์„ฑ๊ณต ํŒ์ •

  • python -c "import smolagents; print('ok')" ์ถœ๋ ฅ์ด ok

2) ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

์ž…๋ ฅ

  • ํŒŒ์ผ๋ช…: mini_agent.py

์ฝ”๋“œ

from smolagents import CodeAgent, DuckDuckGoSearchTool, PythonInterpreterTool
 
agent = CodeAgent(
    tools=[DuckDuckGoSearchTool(), PythonInterpreterTool()],
    add_base_tools=True,
)
 
prompt = "2026๋…„ ๊ธฐ์ค€ Hugging Face Agents Course ํ•ต์‹ฌ ๋ชจ๋“ˆ 3๊ฐœ๋ฅผ ์ฐพ์•„ ํ•œ ์ค„ ์š”์•ฝํ•˜๊ณ , ์ด ๊ธ€์ž ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์ค˜."
result = agent.run(prompt)
print(result)

์„ฑ๊ณต ํŒ์ •

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๊ธฐ๋ฐ˜ ์š”์•ฝ + ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ํ•จ๊ป˜ ์ถœ๋ ฅ๋จ

3) ์‹คํ–‰ ๋ฐ ๊ฒ€์ฆ

์‹คํ–‰ ๋ช…๋ น

python mini_agent.py

๊ฒ€์ฆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ๊ฒ€์ƒ‰ ๊ทผ๊ฑฐ๊ฐ€ ํ…์ŠคํŠธ์— ๋ฐ˜์˜๋จ
  • ๊ณ„์‚ฐ ๊ฒฐ๊ณผ(์ˆซ์ž)๊ฐ€ ํฌํ•จ๋จ
  • ๋‹ต๋ณ€์ด ํ•œ๊ตญ์–ด ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ผ์น˜ํ•จ

4) ๋™์ž‘ ํ๋ฆ„(์•„ํ‚คํ…์ฒ˜)

flowchart TD
    A[User Prompt] --> B[CodeAgent Planner]
    B --> C[DuckDuckGoSearchTool]
    B --> D[PythonInterpreterTool]
    C --> E[Evidence Snippets]
    D --> F[Computed Values]
    E --> G[Final Synthesis]
    F --> G
    G --> H[User Output]

5) ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (3+)

  1. ModuleNotFoundError: smolagents

    • ์›์ธ: ๊ฐ€์ƒํ™˜๊ฒฝ ๋ฏธํ™œ์„ฑํ™” ๋˜๋Š” ์„ค์น˜ ๋ˆ„๋ฝ
    • ํ•ด๊ฒฐ: source .venv/bin/activate && pip install smolagents
  2. ๊ฒ€์ƒ‰ ๋„๊ตฌ ์‘๋‹ต ์ง€์—ฐ/์‹คํŒจ

    • ์›์ธ: ๋„คํŠธ์›Œํฌ/์ผ์‹œ์  ์ฐจ๋‹จ
    • ํ•ด๊ฒฐ: ์žฌ์‹œ๋„, VPN/ํ”„๋ก์‹œ ์ ๊ฒ€, ํ”„๋กฌํ”„ํŠธ๋ฅผ ์งง๊ฒŒ ๋ถ„ํ• 
  3. ๊ณ„์‚ฐ ์ฝ”๋“œ ์‹คํ–‰ ์˜ค๋ฅ˜(ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ํˆด)

    • ์›์ธ: LLM์ด ์ƒ์„ฑํ•œ ์ฝ”๋“œ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜
    • ํ•ด๊ฒฐ: ํ”„๋กฌํ”„ํŠธ์— โ€œ๊ฐ„๋‹จํ•œ ํ‘œ์ค€ ํŒŒ์ด์ฌ๋งŒ ์‚ฌ์šฉโ€ ๋ช…์‹œ
  4. ๊ฒฐ๊ณผ๊ฐ€ ์žฅํ™ฉํ•˜๊ณ  ๊ฒ€์ฆ ๋ถˆ๊ฐ€

    • ์›์ธ: ์ถœ๋ ฅ ํฌ๋งท ์ œ์•ฝ ๋ถ€์กฑ
    • ํ•ด๊ฒฐ: โ€œJSON ํ˜•์‹์œผ๋กœ source/summary/count ๋ฐ˜ํ™˜โ€ ์š”๊ตฌ

6) ํ™•์žฅ ๊ณผ์ œ

  • ๊ณผ์ œ A: ์ถœ๋ ฅ ์Šคํ‚ค๋งˆ๋ฅผ JSON ๊ณ ์ • ํ›„ ํŒŒ์„œ ๊ฒ€์ฆ ์ถ”๊ฐ€
  • ๊ณผ์ œ B: ๊ฒ€์ƒ‰ ์†Œ์Šค๋ฅผ 2๊ฐœ ์ด์ƒ ๊ต์ฐจ ๊ฒ€์ฆ
  • ๊ณผ์ œ C: ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ ๋กœ์ง(์ตœ๋Œ€ 2ํšŒ) ์ถ”๊ฐ€

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

์ด ๋ฌธ์„œ๋Š” ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ์„ ๋งŒ๋“ค๊ณ , ์‹ค์Šต ์žฌํ˜„์„ฑ(๋ช…๋ น/์ž…๋ ฅ/์„ฑ๊ณต ๊ธฐ์ค€)๊ณผ ๋งํฌ ์œ ํšจ์„ฑ์„ ์ ๊ฒ€ํ•ด ํŽธ์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค.