๐Ÿค— 07. HF Agents Course ๋ณธํŽธ 5 - ๊ณ„ํšยท๋ฉ”๋ชจ๋ฆฌยท๊ด€์ฐฐ๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ์—์ด์ „ํŠธ ์šด์˜ํ•˜๊ธฐ

์ด๋ฒˆ ํŽธ์—์„œ๋Š” **โ€œํ•œ ๋ฒˆ ๋‹ตํ•˜๋Š” ์—์ด์ „ํŠธโ€**๊ฐ€ ์•„๋‹ˆ๋ผ, ์žฌ์‹œ๋„ยท๊ธฐ๋กยท๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•œ ์šด์˜ํ˜• ์—์ด์ „ํŠธ๋กœ ํ™•์žฅํ•˜๋Š” ์ตœ์†Œ ํŒจํ„ด์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

flowchart TD
    A[์‚ฌ์šฉ์ž ๋ชฉํ‘œ ์ž…๋ ฅ] --> B[Plan ์ƒ์„ฑ]
    B --> C[Tool ์‹คํ–‰]
    C --> D[์ค‘๊ฐ„ ๊ฒฐ๊ณผ/๋กœ๊ทธ ์ €์žฅ]
    D --> E{์„ฑ๊ณต ๊ธฐ์ค€ ์ถฉ์กฑ?}
    E -- ์˜ˆ --> F[์ตœ์ข… ์‘๋‹ต + ๊ทผ๊ฑฐ]
    E -- ์•„๋‹ˆ์˜ค --> G[์ˆ˜์ •๋œ Plan์œผ๋กœ ์žฌ์‹œ๋„]
    G --> C

์™œ ์ค‘์š”ํ•œ๊ฐ€ (์‹ค๋ฌด ํฌ์ธํŠธ)

  • ์ดˆ๋ฐ˜ PoC๋Š” ์ž˜ ๋˜๋Š”๋ฐ ์šด์˜์—์„œ ๊นจ์ง€๋Š” ์ด์œ ๋Š” ๋Œ€๋ถ€๋ถ„ ๋กœ๊ทธ ๋ถ€์žฌ, ์„ฑ๊ณต ๊ธฐ์ค€ ๋ถˆ๋ช…ํ™•, ์ƒํƒœ ๋ฏธ๋ณด์กด์ž…๋‹ˆ๋‹ค.
  • smolagents์—์„œ๋„ Plan/Memory/Trace๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋‚จ๊ธฐ๋ฉด ์žฅ์•  ๋ถ„์„ ์†๋„๊ฐ€ ํฌ๊ฒŒ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

์‹ค์Šต: ์šด์˜ํ˜• mini runner ๋งŒ๋“ค๊ธฐ

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

  • Python 3.10+
  • ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ:
python -m venv .venv
source .venv/bin/activate
pip install -U smolagents duckduckgo-search

2) ์ž…๋ ฅ ํŒŒ์ผ ์ค€๋น„

task_input.txt

2026๋…„ AI ์—์ด์ „ํŠธ ์šด์˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ํ•ต์‹ฌ 5๊ฐ€์ง€๋ฅผ ์กฐ์‚ฌํ•ด์„œ, ๊ทผ๊ฑฐ URL๊ณผ ํ•จ๊ป˜ ์š”์•ฝํ•ด์ค˜.

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

ops_agent.py

from pathlib import Path
from smolagents import CodeAgent, DuckDuckGoSearchTool, InferenceClientModel
 
MODEL_ID = "Qwen/Qwen2.5-Coder-32B-Instruct"
 
model = InferenceClientModel(model_id=MODEL_ID)
agent = CodeAgent(
    tools=[DuckDuckGoSearchTool()],
    model=model,
    max_steps=6,
)
 
user_goal = Path("task_input.txt").read_text(encoding="utf-8").strip()
 
system_like_instruction = """
๋ฐ˜๋“œ์‹œ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ž‘์—…:
1) PLAN: 3๋‹จ๊ณ„ ์ดํ•˜ ๊ณ„ํš
2) EXECUTION: ์‹ค์ œ ๊ฒ€์ƒ‰/์ถ”๋ก 
3) EVIDENCE: URL ์ตœ์†Œ 3๊ฐœ
4) FINAL: ํ•œ๊ตญ์–ด ๋ถˆ๋ฆฟ 5๊ฐœ
""".strip()
 
prompt = f"{system_like_instruction}\n\n์‚ฌ์šฉ์ž ๋ชฉํ‘œ: {user_goal}"
result = agent.run(prompt)
 
Path("run_result.md").write_text(str(result), encoding="utf-8")
print("DONE: run_result.md ์ƒ์„ฑ")

4) ์‹คํ–‰ ๋ช…๋ น

python ops_agent.py

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

์•„๋ž˜๋ฅผ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด ์„ฑ๊ณต:

  • run_result.md ํŒŒ์ผ ์ƒ์„ฑ
  • PLAN/EXECUTION/EVIDENCE/FINAL 4๊ฐœ ์„น์…˜ ํ™•์ธ
  • EVIDENCE์— URL 3๊ฐœ ์ด์ƒ
  • FINAL์— ๋ถˆ๋ฆฟ 5๊ฐœ

์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ํ•ด์„ค

  • max_steps=6์€ ๋ฌดํ•œ ๋ฃจํ”„ ๋ฐฉ์ง€ ์•ˆ์ „์žฅ์น˜์ž…๋‹ˆ๋‹ค.
  • โ€œํ˜•์‹ ๊ฐ•์ œ ํ”„๋กฌํ”„ํŠธโ€๋ฅผ ๋„ฃ์–ด์•ผ ๊ฒฐ๊ณผ๋ฌผ ํ’ˆ์งˆ์ด ํ”๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ๋กœ ๋‚จ๊ฒจ์•ผ ๋‹ค์Œ ์ž๋™ํ™”(์Šค์ผ€์ค„๋Ÿฌ, ์•Œ๋ฆผ, ๊ฒ€์ˆ˜)์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

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

  • ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ ์ •์ฑ…(์˜ˆ: 1ํšŒ ์ž๋™ ์žฌ์‹œ๋„)
  • ๊ทผ๊ฑฐ ๋งํฌ ๋ˆ„๋ฝ ์‹œ ์‹คํŒจ ์ฒ˜๋ฆฌ
  • ์‹คํ–‰ ์‹œ๊ฐ„/ํ† ํฐ ๋น„์šฉ ๋กœ๊น…
  • ์ถœ๋ ฅ ์Šคํ‚ค๋งˆ(JSON/Markdown) ๊ณ ์ •

๋‹ค์Œ ํŽธ ์˜ˆ๊ณ 

๋ณธํŽธ 6์—์„œ๋Š” ์—์ด์ „ํŠธ ์ถœ๋ ฅ ๊ฒ€์ฆ๊ธฐ(guardrail) + ๋ฐฐ์น˜ ์‹คํ–‰์œผ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.


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

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