๐Ÿค— 44. HF Agents Course ๋ณธํŽธ 1 - ์ฝ”์Šค ๊ตฌ์กฐ ์ดํ•ด๋ถ€ํ„ฐ ์ฒซ smolagents ๊ฒ€์ฆ๊นŒ์ง€

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

Hugging Face Agents Course๋Š” ํฌ๊ฒŒ ๋‘ ๋‹จ๊ณ„๋กœ ์ดํ•ดํ•˜๋ฉด ํŽธํ•ฉ๋‹ˆ๋‹ค.

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

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

์ฝ”์Šค ์ „์ฒด์—์„œ ์˜ค๋Š˜ ์œ„์น˜ ์žก๊ธฐ

GitHub ์ €์žฅ์†Œ์™€ ๊ณต์‹ ํ•™์Šต ํŽ˜์ด์ง€ ๊ธฐ์ค€์œผ๋กœ ์ฝ”์Šค๋Š” ๋‹ค์Œ ํ๋ฆ„์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

flowchart TD
    A[HF Agents Course] --> B[Unit 0 ์˜จ๋ณด๋”ฉ]
    A --> C[Unit 1 Agent Fundamentals]
    A --> D[Unit 2 Frameworks]
    A --> E[Unit 3 Use Cases]
    A --> F[Unit 4 Final Assignment]
    C --> C1[Thought / Action / Observation]
    D --> D1[smolagents]
    D --> D2[LlamaIndex]
    D --> D3[LangGraph]
    D1 --> G[์ฒซ ์‹คํ–‰ ์‹ค์Šต]

์—ฌ๊ธฐ์„œ ์˜ค๋Š˜ ์‹ค์Šต์€ Unit 1์˜ ๊ฐœ๋…์„ Unit 2์˜ smolagents๋กœ ๋ฐ”๋กœ ํ™•์ธํ•˜๋Š” ์—ฐ๊ฒฐ ์ง€์ ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

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

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

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

์ฆ‰, ์ฒ˜์Œ์—๋Š” โ€œ์ •๋ง ์—์ด์ „ํŠธ๊ฐ€ ์ผ๋ฐ˜ LLM ํ˜ธ์ถœ๊ณผ ๋ญ๊ฐ€ ๋‹ค๋ฅด์ง€?โ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

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์ด ํฌํ•จ๋œ๋‹ค.
  • ๊ณ„์‚ฐ ๊ฒฐ๊ณผ์— ์งง์€ ์„ค๋ช…์ด ํ•จ๊ป˜ ๋ถ™๋Š”๋‹ค.
  • ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Step 6) ์ž‘์€ ๋ณ€ํ˜•์œผ๋กœ ๋ฃจํ”„ ๊ฐ๊ฐ ํ™•์ธ

์งˆ๋ฌธ๋งŒ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๊ฟ” ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋ณด๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ

multiply ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ 19 ๊ณฑํ•˜๊ธฐ 23์„ ๊ณ„์‚ฐํ•˜๊ณ , ๋งˆ์ง€๋ง‰์— ์ง์ˆ˜์ธ์ง€ ํ™€์ˆ˜์ธ์ง€๋„ ๋งํ•ด์ค˜.

์‹คํ–‰ ๋ช…๋ น

python app.py

์„ฑ๊ณต ํŒ์ •

  • ๊ฒฐ๊ณผ์— 437์ด ํฌํ•จ๋œ๋‹ค.
  • ๋งˆ์ง€๋ง‰์— ํ™€์ˆ˜๋ผ๊ณ  ์„ค๋ช…ํ•œ๋‹ค.
  • ๊ณ„์‚ฐ ํ›„ ํŒ๋‹จ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ํ๋ฆ„์ด ๋ณด์ธ๋‹ค.

์ด ์‹ค์Šต์—์„œ ๊ผญ ์ดํ•ดํ•  ํฌ์ธํŠธ

1) ์—์ด์ „ํŠธ๋Š” LLM ๋‹จ๋… ํ˜ธ์ถœ๊ณผ ๋‹ค๋ฅด๋‹ค

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

2) ๋„๊ตฌ๋Š” ์ •ํ™•๋„์™€ ์žฌํ˜„์„ฑ์„ ๋†’์ธ๋‹ค

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

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

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

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

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

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

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

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

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

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

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

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

ModuleNotFoundError๊ฐ€ ๋‚  ๋•Œ

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

๊ฐ€์ƒํ™˜๊ฒฝ์ด ๋น„ํ™œ์„ฑ ์ƒํƒœ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

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

export HF_TOKEN=hf_your_token
python app.py

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

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

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

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

์š”์•ฝ

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

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

  • CodeAgent์™€ ToolCallingAgent ์ฐจ์ด
  • ๊ฒ€์ƒ‰ ๋„๊ตฌ๋ฅผ ๋ถ™์ธ ์ •๋ณด ํƒ์ƒ‰ํ˜• ์—์ด์ „ํŠธ
  • ๊ณ„์‚ฐ๊ธฐ + ๊ฒ€์ƒ‰๊ธฐ ์กฐํ•ฉ์œผ๋กœ ๋ฉ€ํ‹ฐ์Šคํ… ํƒœ์Šคํฌ ํ’€๊ธฐ

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

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