๋ชฉํ‘œ

HF Agents Course ๋‚ด์šฉ์„ ๊ธฐ์ค€์œผ๋กœ, smolagents CodeAgent + 2๊ฐœ ํˆด(Web ๊ฒ€์ƒ‰/๊ณ„์‚ฐ๊ธฐ) ์กฐํ•ฉ์˜ ์‹ค์Šตํ˜• ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌํ˜„ํ•œ๋‹ค.

์‹ค์Šต ์‹œ๋‚˜๋ฆฌ์˜ค

์งˆ๋ฌธ: 2025๋…„ ๋…ธ๋ฒจ ๋ฌผ๋ฆฌํ•™์ƒ ์ˆ˜์ƒ์ž ์ˆ˜์™€ ๊ฐ ์†Œ์† ๊ตญ๊ฐ€๋ฅผ ์š”์•ฝํ•ด์ค˜
์—์ด์ „ํŠธ๋Š” ์›น ๊ฒ€์ƒ‰์œผ๋กœ ์‚ฌ์‹ค ์ˆ˜์ง‘ ํ›„ ๊ณ„์‚ฐ๊ธฐ ํˆด๋กœ ๊ฒ€์ฆ(๊ฐœ์ˆ˜ ์‚ฐ์ถœ)ํ•˜์—ฌ ๋‹ตํ•œ๋‹ค.

flowchart TD
    A[User Question] --> B[CodeAgent]
    B --> C[WebSearch Tool]
    C --> B
    B --> D[Calculator Tool]
    D --> B
    B --> E[Final Answer + Evidence]

์ค€๋น„๋ฌผ

  • Python 3.10+
  • Hugging Face ๊ณ„์ • + HF_TOKEN
  • ํŒจํ‚ค์ง€: smolagents, duckduckgo-search

๋‹จ๊ณ„๋ณ„ ์‹ค์Šต

1) ์ž‘์—… ํด๋”/๊ฐ€์ƒํ™˜๊ฒฝ

  • ๋„๊ตฌ: ํ„ฐ๋ฏธ๋„
  • ์ž…๋ ฅ:
mkdir -p hf-agents-lab-01 && cd hf-agents-lab-01
python -m venv .venv
source .venv/bin/activate
pip install -U pip
  • ์„ฑ๊ณต ํŒ์ •: ํ”„๋กฌํ”„ํŠธ์— (.venv) ํ‘œ์‹œ

2) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

  • ๋„๊ตฌ: ํ„ฐ๋ฏธ๋„
  • ์ž…๋ ฅ:
pip install smolagents duckduckgo-search
  • ์„ฑ๊ณต ํŒ์ •: ์„ค์น˜ ์—๋Ÿฌ ์—†์ด ์ข…๋ฃŒ

3) ํ† ํฐ ์„ค์ •

  • ๋„๊ตฌ: ํ„ฐ๋ฏธ๋„
  • ์ž…๋ ฅ:
export HF_TOKEN="hf_xxx"
  • ์„ฑ๊ณต ํŒ์ •:
echo $HF_TOKEN | cut -c1-6

์ถœ๋ ฅ์— hf_ ์ ‘๋‘์‚ฌ ํ™•์ธ

4) ์‹คํ–‰ ์ฝ”๋“œ ์ž‘์„ฑ

  • ๋„๊ตฌ: ์—๋””ํ„ฐ
  • ํŒŒ์ผ: run_lab01.py
from smolagents import CodeAgent, DuckDuckGoSearchTool, PythonInterpreterTool, InferenceClientModel
 
model = InferenceClientModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
agent = CodeAgent(
    tools=[DuckDuckGoSearchTool(), PythonInterpreterTool()],
    model=model,
    add_base_tools=False,
)
 
question = "2025๋…„ ๋…ธ๋ฒจ ๋ฌผ๋ฆฌํ•™์ƒ ์ˆ˜์ƒ์ž ์ˆ˜์™€ ๊ฐ ์†Œ์† ๊ตญ๊ฐ€๋ฅผ ์š”์•ฝํ•ด์ค˜. ์ถœ์ฒ˜๋„ ํ•จ๊ป˜ ์ ์–ด์ค˜."
result = agent.run(question)
print(result)
  • ์„ฑ๊ณต ํŒ์ •: ํŒŒ์ผ ์ €์žฅ ์™„๋ฃŒ

5) ์‹คํ–‰

  • ๋„๊ตฌ: ํ„ฐ๋ฏธ๋„
  • ์ž…๋ ฅ:
python run_lab01.py
  • ์„ฑ๊ณต ํŒ์ •:
    • ๋‹ต๋ณ€์— ์ˆ˜์ƒ์ž ์ˆ˜(์ •์ˆ˜) ํฌํ•จ
    • ๊ตญ๊ฐ€ ์š”์•ฝ ํฌํ•จ
    • ์ถœ์ฒ˜ URL/๋ช…์นญ ํฌํ•จ

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

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๊ธฐ๋ฐ˜ ์ธ์šฉ์ด ํฌํ•จ๋˜์—ˆ๋Š”๊ฐ€?
  • ์ˆ˜์ƒ์ž ์ˆ˜๋ฅผ ๊ณ„์‚ฐ/๊ฒ€์ฆํ–ˆ๋Š”๊ฐ€?
  • ๋‹ต๋ณ€์ด ํ•œ๊ตญ์–ด๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์—ˆ๋Š”๊ฐ€?

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

  1. 401 Unauthorized ๋˜๋Š” ๋ชจ๋ธ ํ˜ธ์ถœ ์‹คํŒจ

    • ์›์ธ: HF_TOKEN ๋ˆ„๋ฝ/๋งŒ๋ฃŒ
    • ์กฐ์น˜: echo $HF_TOKEN ํ™•์ธ ํ›„ ์žฌ๋ฐœ๊ธ‰/์žฌ์„ค์ •
  2. ModuleNotFoundError: smolagents

    • ์›์ธ: venv ๋ฏธํ™œ์„ฑํ™” ๋˜๋Š” ์„ค์น˜ ์‹คํŒจ
    • ์กฐ์น˜: source .venv/bin/activate && pip install smolagents
  3. ๊ฒ€์ƒ‰ ๋„๊ตฌ๊ฐ€ ๋นˆ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

    • ์›์ธ: ๋„คํŠธ์›Œํฌ/์ฟผ๋ฆฌ ๊ณผ๋„ ์ถ•์•ฝ
    • ์กฐ์น˜: ์งˆ๋ฌธ์„ ์˜๋ฌธ ํ‚ค์›Œ๋“œ๋กœ ๋ณด๊ฐ•(์˜ˆ: Nobel Prize in Physics 2025 laureates)
  4. ์‹คํ–‰์€ ๋˜์ง€๋งŒ ๋‹ต์ด ๋ถˆ์•ˆ์ •ํ•จ

    • ์›์ธ: ๊ฒ€์ƒ‰ ๊ทผ๊ฑฐ ๋ถ€์กฑ/๋ชจํ˜ธ ์งˆ์˜
    • ์กฐ์น˜: ํ”„๋กฌํ”„ํŠธ์— ์ถœ์ฒ˜ 2๊ฐœ ์ด์ƒ, ๋ชจ๋ฅด๋ฉด ๋ชจ๋ฅธ๋‹ค๊ณ  ๋‹ต ์ œ์•ฝ ์ถ”๊ฐ€

ํ™•์žฅ ๊ณผ์ œ

  • ๋™์ผ ์งˆ๋ฌธ์„ ์˜์–ด/ํ•œ๊ตญ์–ด ํ”„๋กฌํ”„ํŠธ๋กœ ๋น„๊ต
  • ํˆด ํ˜ธ์ถœ ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•ด ์žฌํ˜„์„ฑ ์ ๊ฒ€
  • ๋ณธํŽธ 4์˜ ToolCallingAgent๋กœ ๋™์ผ ๊ณผ์ œ ์žฌ๊ตฌํ˜„

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

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