๐Ÿค— 42. HF Agents Course ๋ณธํŽธ 1 - Hugging Face ์—์ด์ „ํŠธ ํ•™์Šต ์ง€ํ˜•๊ณผ ์ฒซ smolagents ์‹คํ–‰

ํ•œ ์ค„ ๋ชฉํ‘œ: Hugging Face Agents Course๊ฐ€ ์–ด๋–ค ์ˆœ์„œ๋กœ ์—์ด์ „ํŠธ๋ฅผ ๊ฐ€๋ฅด์น˜๋Š”์ง€ ์žก๊ณ , smolagents๋กœ ๊ฐ€์žฅ ์ž‘์€ ์—์ด์ „ํŠธ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•ด ๋ณธ๋‹ค.

Hugging Face Agents Course๋Š” ํฌ๊ฒŒ ๋‘ ์ถ•์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. Unit 1์—์„œ ์—์ด์ „ํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•œ๋‹ค.
  2. Unit 2์—์„œ smolagents, LangGraph, LlamaIndex ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์‹ค์ œ ๊ตฌํ˜„์„ ๋ฐฐ์šด๋‹ค.

์ž…๋ฌธ์ž๋ผ๋ฉด ๋จผ์ € โ€œ์—์ด์ „ํŠธ๋Š” ๊ฒฐ๊ตญ ๋ชฉํ‘œ๋ฅผ ๋ฐ›๊ณ  โ†’ ์ƒ๊ฐํ•˜๊ณ  โ†’ ๋„๊ตฌ๋ฅผ ์“ฐ๊ณ  โ†’ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  โ†’ ๋‹ค์‹œ ํŒ๋‹จํ•˜๋Š” ๋ฃจํ”„โ€๋ผ๋Š” ๊ฐ๊ฐ์„ ์žก๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฐ๊ฐ์„ ๊ฐ€์žฅ ์งง๊ฒŒ ํ™•์ธํ•˜๊ธฐ ์ข‹์€ ๋„๊ตฌ๊ฐ€ smolagents์ž…๋‹ˆ๋‹ค.

์ฝ”์Šค ์ „์ฒด์—์„œ ๋ณธ ์˜ค๋Š˜ ์œ„์น˜

  • GitHub ์ €์žฅ์†Œ ๊ธฐ์ค€์œผ๋กœ ์ฝ”์Šค๋Š” Unit 0~4์™€ ๋ณด๋„ˆ์Šค ์œ ๋‹›์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์ฝ”์Šค ์†Œ๊ฐœ ํŽ˜์ด์ง€ ๊ธฐ์ค€์œผ๋กœ Unit 1์€ Agent Fundamentals, Unit 2๋Š” Frameworks์ž…๋‹ˆ๋‹ค.
  • smolagents ๊ณต์‹ ๋ฌธ์„œ๋Š” ์ด ํ๋ฆ„ ์ค‘ โ€œ๊ฐ€๋ฒผ์šด ์ฒซ ๊ตฌํ˜„โ€์— ๊ฐ€์žฅ ์ž˜ ๋งž๋Š” ์ž…๋ฌธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
flowchart TD
    A[HF Agents Course] --> B[Unit 1 Agent Fundamentals]
    A --> C[Unit 2 Frameworks]
    B --> B1[Thought / Action / Observation ์ดํ•ด]
    B --> B2[๋„๊ตฌ์™€ ๋ฉ”์‹œ์ง€ ํ˜•์‹ ์ดํ•ด]
    C --> C1[smolagents]
    C --> C2[LangGraph]
    C --> C3[LlamaIndex]
    C1 --> D[์ฒซ ์—์ด์ „ํŠธ ์‹คํ–‰]

ํ•ต์‹ฌ์€ ์ด๊ฒ๋‹ˆ๋‹ค.

  • Unit 1์ด ์™œ ์—์ด์ „ํŠธ๊ฐ€ ํ•„์š”ํ•œ์ง€๋ฅผ ์„ค๋ช…ํ•œ๋‹ค๋ฉด,
  • smolagents๋Š” ๊ทธ๊ฒƒ์„ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์†์— ์žกํžˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์™œ smolagents๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉด ์ข‹์€๊ฐ€

smolagents ๊ณต์‹ ๋ฌธ์„œ๋Š” ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ โ€œ์ ์€ ์ฝ”๋“œ๋กœ ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์‰ฌ์šด ์˜คํ”ˆ์†Œ์Šค Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌโ€๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž ๊ธฐ์ค€ ์žฅ์ ์€ ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ ์–‘์ด ์ ์–ด์„œ ๊ตฌ์กฐ๊ฐ€ ๋ˆˆ์— ๋ณด์ธ๋‹ค.
  • CodeAgent๋กœ ๊ณ„์‚ฐ, ์กฐ๊ฑด ๋ถ„๊ธฐ, ๋„๊ตฌ ์‚ฌ์šฉ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ๋‚˜์ค‘์— ๊ฒ€์ƒ‰ ๋„๊ตฌ, ์‚ฌ๋‚ด ํ•จ์ˆ˜, API ํ˜ธ์ถœ๋กœ ํ™•์žฅํ•˜๊ธฐ ์ข‹๋‹ค.

์ฆ‰, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ณต์žกํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๋ณด๋‹ค ์—์ด์ „ํŠธ์˜ ์ตœ์†Œ ๋ฃจํ”„๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

15๋ถ„ ์‹ค์Šต: ์ฒซ smolagents ์—์ด์ „ํŠธ ์‹คํ–‰

์•„๋ž˜ ์‹ค์Šต์€ ๊ณต์‹ smolagents Quickstart ํ๋ฆ„์„ ๋ฐ”ํƒ•์œผ๋กœ, ํ•œ๊ตญ์–ด ํ•™์Šต์šฉ์œผ๋กœ ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ๋” ์ž˜๊ฒŒ ๋‚˜๋ˆˆ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

์ค€๋น„๋ฌผ

  • Python 3.10 ์ด์ƒ
  • ํ„ฐ๋ฏธ๋„
  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ
  • Hugging Face ๊ณ„์ •
  • ํ•„์š” ์‹œ HF_TOKEN

Step 1) ์ž‘์—… ํด๋” ์ƒ์„ฑ

๋„๊ตฌ

  • ํ„ฐ๋ฏธ๋„

์ž…๋ ฅ

mkdir -p ~/hf-agents-course-ep1
cd ~/hf-agents-course-ep1

์„ฑ๊ณต ํŒ์ •

pwd
  • ์ถœ๋ ฅ ๊ฒฝ๋กœ ๋์ด hf-agents-course-ep1์ด๋ฉด ์„ฑ๊ณต.

Step 2) ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ๊ณผ ํŒจํ‚ค์ง€ ์„ค์น˜

๋„๊ตฌ

  • Python venv
  • pip

์ž…๋ ฅ

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
pip install 'smolagents[toolkit]'

์„ฑ๊ณต ํŒ์ •

python -c "import smolagents; print(smolagents.__name__)"
  • smolagents๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉด ์„ฑ๊ณต.

Step 3) ์ฒซ ์—์ด์ „ํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

ํŒŒ์ผ

app.py

์ž…๋ ฅ

from smolagents import CodeAgent, InferenceClientModel
 
model = InferenceClientModel()
agent = CodeAgent(tools=[], model=model)
 
result = agent.run("1๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•ด์ค˜.")
print(result)

์„ค๋ช…

  • InferenceClientModel()์€ Hugging Face Inference ๊ธฐ๋ฐ˜ ๋ชจ๋ธ ์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค.
  • CodeAgent๋Š” ํ•„์š”ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์จ์„œ ๋ฌธ์ œ๋ฅผ ํ’‰๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์„œ๋Š” ๋„๊ตฌ ์—†์ด๋„ ์ž‘์€ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ๋ฅผ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Step 4) ์‹คํ–‰

์‹คํ–‰ ๋ช…๋ น

python app.py

์„ฑ๊ณต ํŒ์ •

์•„๋ž˜๋ฅผ ๋งŒ์กฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ๊ทธ๋žจ์ด ์—๋Ÿฌ ์—†์ด ์ข…๋ฃŒ๋œ๋‹ค.
  • ์ถœ๋ ฅ์— 55 ๋˜๋Š” ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์„ค๋ช…์ด ํฌํ•จ๋œ๋‹ค.
  • โ€œ์—์ด์ „ํŠธ๊ฐ€ ๋‹ต์„ ์ƒ์„ฑํ–ˆ๋‹คโ€๋Š” ์ตœ์†Œ ์‹คํ–‰ ํ™•์ธ์ด ๋œ๋‹ค.

Step 5) ๋„๊ตฌ๋ฅผ ๋ถ™์—ฌ ์—์ด์ „ํŠธ ๋А๋‚Œ ๊ฐ•ํ™”

์ด์ œ ๊ฐ™์€ ํด๋”์—์„œ app.py๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ž…๋ ฅ

from smolagents import CodeAgent, InferenceClientModel, tool
 
@tool
def multiply(a: int, b: int) -> int:
    """Multiply two integers.
 
    Args:
        a: first integer
        b: second integer
    """
    return a * b
 
model = InferenceClientModel()
agent = CodeAgent(tools=[multiply], model=model)
 
result = agent.run("multiply ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ 27 ๊ณฑํ•˜๊ธฐ 14๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ํ•œ ์ค„ ์„ค๋ช…์„ ๋ง๋ถ™์—ฌ์ค˜.")
print(result)

์„ฑ๊ณต ํŒ์ •

python app.py
  • ์ถœ๋ ฅ์— 378์ด ํฌํ•จ๋œ๋‹ค.
  • ๋„๊ตฌ ์‚ฌ์šฉ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๋ช…์ด ๋ถ™๋Š”๋‹ค.
  • ๊ฐ™์€ ๊ณ„์‚ฐ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ์žฌํ˜„๋œ๋‹ค.

์ด ์‹ค์Šต์—์„œ ๊ผญ ์žก์•„์•ผ ํ•  ๊ฐœ๋…

1) ์—์ด์ „ํŠธ๋Š” LLM ๋‹จ๋… ์‚ฌ์šฉ๊ณผ ๋‹ค๋ฅด๋‹ค

LLM๋งŒ ์“ฐ๋ฉด ๋‹ต๋ณ€ ์ƒ์„ฑ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ณ„์‚ฐ์ด๋‚˜ ์™ธ๋ถ€ ์ •๋ณด ์ ‘๊ทผ์€ ํ”๋“ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๋Š” ์—ฌ๊ธฐ์— ๋„๊ตฌ ํ˜ธ์ถœ๊ณผ ๋ฐ˜๋ณต ํŒ๋‹จ ๋ฃจํ”„๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.

2) ๋„๊ตฌ๋Š” ์ •ํ™•๋„์™€ ์žฌํ˜„์„ฑ์„ ์˜ฌ๋ฆฌ๋Š” ์žฅ์น˜๋‹ค

multiply๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ ์‹ค๋ฌด์—์„  ์•„๋ž˜์ฒ˜๋Ÿผ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

  • ๊ฒ€์ƒ‰ ๋„๊ตฌ
  • ์‚ฌ๋‚ด API ํ˜ธ์ถœ ํ•จ์ˆ˜
  • ๋ฌธ์„œ ์ €์žฅ ํ•จ์ˆ˜
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ ํ•จ์ˆ˜

3) ์ข‹์€ ๊ตฌ์กฐ๊ฐ€ ์ข‹์€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ด๊ธธ ๋•Œ๊ฐ€ ๋งŽ๋‹ค

โ€œ์ •ํ™•ํžˆ ๊ณ„์‚ฐํ•ด์ค˜โ€๋ผ๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ๋งํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ๊ณ„์‚ฐ ํ•จ์ˆ˜๋ฅผ ๋„๊ตฌ๋กœ ์ œ๊ณตํ•˜๋Š” ์ชฝ์ด ํ›จ์”ฌ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

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

๋ฆฌ์„œ์น˜ ์ž๋™ํ™”

  • ๊ฒ€์ƒ‰ ๋„๊ตฌ + ์š”์•ฝ ๋„๊ตฌ๋ฅผ ์—ฐ๊ฒฐํ•ด ์ดˆ์•ˆ ์ƒ์„ฑ
  • Observation ๋‹จ๊ณ„์—์„œ ์ถœ์ฒ˜ ๋ˆ„๋ฝ ์—ฌ๋ถ€ ์ ๊ฒ€

์šด์˜ ๋ฆฌํฌํŠธ ์ž๋™ํ™”

  • ์ง€ํ‘œ ์กฐํšŒ ํ•จ์ˆ˜ + ๊ณ„์‚ฐ ํ•จ์ˆ˜ + ๋ฉ”์‹œ์ง€ ์ „์†ก ํ•จ์ˆ˜ ๊ฒฐํ•ฉ
  • ์ž„๊ณ„์น˜ ์ดˆ๊ณผ ์‹œ ํ›„์† ์•ก์…˜ ๋ถ„๊ธฐ

์‚ฌ๋‚ด ์ง€์‹ ์—์ด์ „ํŠธ

  • ๋ฌธ์„œ ๊ฒ€์ƒ‰ ๋„๊ตฌ๋ฅผ ๋ถ™์—ฌ ์ตœ์‹  ๋ฌธ์„œ ํ™•์ธ ํ›„ ๋‹ต๋ณ€
  • ํ‹€๋ฆด ์œ„ํ—˜์ด ํฐ ์˜์—ญ์ผ์ˆ˜๋ก ๋„๊ตฌ ๊ธฐ๋ฐ˜ ์„ค๊ณ„๋ฅผ ์šฐ์„ 

์ž์ฃผ ๋ง‰ํžˆ๋Š” ๋ฌธ์ œ

์„ค์น˜๋Š” ๋๋Š”๋ฐ import ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๋•Œ

source .venv/bin/activate
pip install 'smolagents[toolkit]'

๊ฐ€์ƒํ™˜๊ฒฝ์ด ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

๋ชจ๋ธ ํ˜ธ์ถœ ๊ถŒํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๋•Œ

export HF_TOKEN=hf_your_token
python app.py

์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ธ์ฆ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๊ตฌ๋ฅผ ์ž˜ ์•ˆ ์“ฐ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ๋•Œ

ํ”„๋กฌํ”„ํŠธ์— ์•„๋ž˜์ฒ˜๋Ÿผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

  • ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ
  • ๊ณ„์‚ฐ ๊ทผ๊ฑฐ๋ฅผ ํ•จ๊ป˜ ์„ค๋ช…ํ•ด์ค˜
  • ๋งˆ์ง€๋ง‰์— ๊ฒฐ๊ณผ ๊ฒ€์ฆ๋„ ํ•ด์ค˜

์š”์•ฝ

HF Agents Course ์ดˆ๋ฐ˜๋ถ€๋ฅผ ๋”ฐ๋ผ๊ฐˆ ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ฒซ ๊ฐ๊ฐ์€ โ€œ์—์ด์ „ํŠธ๋ž€ ๊ฒฐ๊ตญ ๋‹ต๋ณ€ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ชฉํ‘œ ๋‹ฌ์„ฑ์„ ์œ„ํ•ด ๋„๊ตฌ๋ฅผ ์“ฐ๋Š” ์‹คํ–‰ ๋ฃจํ”„โ€๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. smolagents๋Š” ์ด ๊ตฌ์กฐ๋ฅผ ๊ฐ€์žฅ ์งง์€ ์ฝ”๋“œ๋กœ ํ™•์ธํ•˜๊ฒŒ ํ•ด ์ฃผ๋ฏ€๋กœ, ๋ณธํŽธ 1ํŽธ์˜ ์ถœ๋ฐœ์ ์œผ๋กœ ์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํŽธ์—์„œ ์ด์–ด๊ฐ€๊ธฐ ์ข‹์€ ์ฃผ์ œ

  • CodeAgent์™€ ToolCallingAgent ์ฐจ์ด
  • ๊ณ„์‚ฐ๊ธฐ/๊ฒ€์ƒ‰๊ธฐ ๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ๋ถ™์ธ ๋ฉ€ํ‹ฐ์Šคํ… ์—์ด์ „ํŠธ
  • ์—์ด์ „ํŠธ๊ฐ€ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋‹ค์Œ ํ–‰๋™์„ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹

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

์ด ๋ฌธ์„œ๋Š” ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ ๊ตฌ์กฐ์™€ ์„ค๋ช… ๋ฌธ์žฅ์„ ์ •๋ฆฌํ–ˆ๊ณ , Hugging Face Agents Course GitHub ์ €์žฅ์†Œยท๊ณต์‹ ํ•™์Šต ํŽ˜์ด์ง€ยทsmolagents ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ๋žŒ์ด ๋‹จ๊ณ„, ๋ช…๋ น, ์„ฑ๊ณต ํŒ์ •, ์‹ค๋ฌด ์ ์šฉ ํฌ์ธํŠธ๋ฅผ ๊ฒ€ํ† ํ•ด ํŽธ์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค.