๐Ÿค— 08. HF Agents Course ๋ณธํŽธ 6 - smolagents๋กœ ๋„๊ตฌ ๋ผ์šฐํŒ…๊ณผ ์žฌ์‹œ๋„ ์„ค๊ณ„ํ•˜๊ธฐ

์ด๋ฒˆ ํŽธ ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ ์œ ํ˜•์— ๋”ฐ๋ผ ๋„๊ตฌ๋ฅผ ๋‚˜๋ˆ  ์“ฐ๊ณ , ์‹คํŒจํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ 1ํšŒ ์žฌ์‹œ๋„ํ•˜๋Š” ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

flowchart TD
    A[์‚ฌ์šฉ์ž ์งˆ๋ฌธ] --> B{์งˆ๋ฌธ ๋ถ„๋ฅ˜}
    B -->|์ตœ์‹  ์ •๋ณด| C[Web Search Tool]
    B -->|๊ณ„์‚ฐ/๋ณ€ํ™˜| D[Python Tool]
    C --> E{๊ฒ€์ฆ ํ†ต๊ณผ?}
    D --> E
    E -->|Yes| F[์ตœ์ข… ๋‹ต๋ณ€]
    E -->|No| G[์›์ธ ๊ธฐ๋ก ํ›„ 1ํšŒ ์žฌ์‹œ๋„]
    G --> H{์žฌ์‹œ๋„ ์„ฑ๊ณต?}
    H -->|Yes| F
    H -->|No| I[์‹คํŒจ ์‚ฌ์œ  + ๋‹ค์Œ ์•ก์…˜]

์‹ค์Šต ์ค€๋น„

1) ๋„๊ตฌ ์„ค์น˜

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

2) ์ž…๋ ฅ ํŒŒ์ผ

task.txt

2026๋…„ ๊ธฐ์ค€ Hugging Face Agents Course ํ•™์Šต์ž๊ฐ€ ์‹ค๋ฌด ์ ์šฉ ์ „์— ํ™•์ธํ•ด์•ผ ํ•  ์ฒดํฌ๋ฆฌ์ŠคํŠธ 5๊ฐœ๋ฅผ ์ •๋ฆฌํ•ด์ค˜.
๊ฐ ํ•ญ๋ชฉ๋งˆ๋‹ค ๊ทผ๊ฑฐ ๋งํฌ๋ฅผ ๋ถ™์—ฌ์ค˜.

3) ์‹คํ–‰ ์ฝ”๋“œ

router_retry_agent.py

from pathlib import Path
from smolagents import CodeAgent, DuckDuckGoSearchTool, PythonInterpreterTool, InferenceClientModel
 
model = InferenceClientModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
agent = CodeAgent(
    tools=[DuckDuckGoSearchTool(), PythonInterpreterTool()],
    model=model,
    max_steps=6,
)
 
goal = Path("task.txt").read_text(encoding="utf-8").strip()
 
prompt = f"""
๊ทœ์น™:
1) ๋จผ์ € ์งˆ๋ฌธ์„ '๊ฒ€์ƒ‰ํ˜•' ๋˜๋Š” '๊ณ„์‚ฐํ˜•'์œผ๋กœ ๋ถ„๋ฅ˜ํ•ด ๋„๊ตฌ๋ฅผ ์„ ํƒํ•  ๊ฒƒ.
2) ๊ฒฐ๊ณผ์—๋Š” ์ฒดํฌ๋ฆฌ์ŠคํŠธ 5๊ฐœ + ๊ทผ๊ฑฐ URL 3๊ฐœ ์ด์ƒ ํฌํ•จ.
3) URL์ด 3๊ฐœ ๋ฏธ๋งŒ์ด๋ฉด ์‹คํŒจ๋กœ ํŒ๋‹จํ•˜๊ณ  ์›์ธ 1์ค„ ์ž‘์„ฑ ํ›„ 1ํšŒ ์žฌ์‹œ๋„.
4) ์ตœ์ข… ์ถœ๋ ฅ์€ ํ•œ๊ตญ์–ด ๋งˆํฌ๋‹ค์šด.
 
์š”์ฒญ: {goal}
""".strip()
 
result = agent.run(prompt)
Path("result.md").write_text(str(result), encoding="utf-8")
print("DONE: result.md")

4) ์‹คํ–‰

python router_retry_agent.py

5) ์„ฑ๊ณต ํŒ์ •

  • result.md ์ƒ์„ฑ
  • ์ฒดํฌ๋ฆฌ์ŠคํŠธ 5๊ฐœ ์กด์žฌ
  • ๊ทผ๊ฑฐ URL 3๊ฐœ ์ด์ƒ
  • ์žฌ์‹œ๋„ ๋ฐœ์ƒ ์‹œ ์‹คํŒจ ์›์ธ 1์ค„ ๊ธฐ๋ก

์ดˆ๋ณด์ž์šฉ ํ•ต์‹ฌ ์„ค๋ช…

  • ๋ผ์šฐํŒ…: โ€œ๋ฌด์Šจ ๋„๊ตฌ๋ฅผ ์“ธ์ง€โ€๋ฅผ ๋จผ์ € ์ •ํ•˜๋ฉด ํ’ˆ์งˆ์ด ํ”๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์žฌ์‹œ๋„ ์ œํ•œ: ๋ฌดํ•œ ์žฌ์‹œ๋„๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด 1ํšŒ๋กœ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๊ณต ๊ธฐ์ค€ ๋ช…์‹œ: URL ๊ฐœ์ˆ˜์ฒ˜๋Ÿผ ๊ธฐ๊ณ„์ ์œผ๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด์„ ๋„ฃ์–ด์•ผ ์ž๋™ํ™”์— ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

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

  • ๋ฐฐ์น˜ ์ž‘์—…์—์„œ๋Š” result.md ๋Œ€์‹  JSON ์Šคํ‚ค๋งˆ๋กœ ์ €์žฅํ•˜์„ธ์š”.
  • ์‹คํŒจ ์ผ€์ด์Šค๋Š” ๋ณ„๋„ ํŒŒ์ผ(failed/)์— ์Œ“์•„ ์žฌ์ฒ˜๋ฆฌํ•˜๋ฉด ์šด์˜ ํšจ์œจ์ด ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.
  • ํŒ€ ์šด์˜ ์‹œ โ€œ์žฌ์‹œ๋„ ํšŸ์ˆ˜, ํƒ€์ž„์•„์›ƒ, ์ตœ์†Œ ๊ทผ๊ฑฐ ์ˆ˜โ€๋ฅผ ๊ณตํ†ต ์ •์ฑ…์œผ๋กœ ๊ณ ์ •ํ•˜์„ธ์š”.

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

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