๐Ÿค— 41. HF Agents Course ๋ณธํŽธ 1 - ์—์ด์ „ํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ๋„๊ตฌ๋ฅผ ์“ฐ๋Š”๊ฐ€

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

Hugging Face Agents Course์˜ Unit 1์€ ์—์ด์ „ํŠธ๋ฅผ ๋‹จ์ˆœํ•œ โ€œ๋Œ€๋‹ต ์ž˜ํ•˜๋Š” ๋ชจ๋ธโ€์ด ์•„๋‹ˆ๋ผ, ๋ชฉํ‘œ๋ฅผ ๋ฐ›๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ–‰๋™ํ•˜๊ณ  ๊ด€์ฐฐ์„ ๋ฐ˜์˜ํ•˜๋Š” ์‹คํ–‰ ์ฃผ์ฒด๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด์–ด์ง€๋Š” Unit 2์—์„œ๋Š” ์ด ๊ตฌ์กฐ๋ฅผ smolagents, LangGraph, LlamaIndex ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๋ณด์ž ๊ธฐ์ค€์œผ๋กœ๋Š” ์ด ํ•œ ๊ฐ€์ง€๋ฅผ ๋จผ์ € ์žก์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • LLM์€ ๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ์—์ด์ „ํŠธ๋Š” ๋‹ต ์ƒ์„ฑ + ๋„๊ตฌ ์‚ฌ์šฉ + ์ค‘๊ฐ„ ํŒ๋‹จ๊นŒ์ง€ ๋ฌถ๋Š”๋‹ค.
  • ๊ทธ๋ž˜์„œ ๊ฒ€์ƒ‰, ๊ณ„์‚ฐ, ํŒŒ์ผ ์ฒ˜๋ฆฌ์ฒ˜๋Ÿผ ๋ชจ๋ธ ๋‹จ๋…์œผ๋กœ ๋ถˆ์•ˆ์ •ํ•œ ์ž‘์—…์„ ๋” ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

HF Agents Course์—์„œ ๋ณด๋Š” ์—์ด์ „ํŠธ์˜ ์ตœ์†Œ ๊ตฌ์กฐ

flowchart LR
    G[์‚ฌ์šฉ์ž ๋ชฉํ‘œ] --> T[Thought
๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜์ง€?]
    T --> A[Action
๋„๊ตฌ ํ˜ธ์ถœ ๋˜๋Š” ์ฝ”๋“œ ์‹คํ–‰]
    A --> O[Observation
๊ฒฐ๊ณผ ํ™•์ธ]
    O --> D{๋ชฉํ‘œ ๋‹ฌ์„ฑ?}
    D -- ์•„๋‹ˆ์˜ค --> T
    D -- ์˜ˆ --> R[์ตœ์ข… ์‘๋‹ต]

์ด ๋ฃจํ”„๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  1. Thought: ์ง€๊ธˆ ๋ฌด์—‡์ด ๋ถ€์กฑํ•œ์ง€ ํŒ๋‹จ
  2. Action: ๊ฒ€์ƒ‰, ๊ณ„์‚ฐ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฐ™์€ ์‹ค์ œ ํ–‰๋™ ์ˆ˜ํ–‰
  3. Observation: ํ–‰๋™ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ
  4. ๋ฐ˜๋ณต: ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ๋•Œ๊นŒ์ง€ ์กฐ์ •

์‹ค๋ฌด์—์„œ๋Š” ์ด ๊ตฌ์กฐ ๋•๋ถ„์— ์•„๋ž˜ ๊ฐ™์€ ์ผ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

  • FAQ ๋ด‡์ด ๋ชจ๋ฅด๋ฉด ๋ฌธ์„œ๋ฅผ ์ฐพ๊ณ  ๋‹ตํ•˜๊ธฐ
  • ์šด์˜ ๋ด‡์ด ์ˆซ์ž๋ฅผ ์ง์ ‘ ๊ณ„์‚ฐํ•˜๊ณ  ๋ณด๊ณ ํ•˜๊ธฐ
  • ๋ฆฌ์„œ์น˜ ๋ด‡์ด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„ ์š”์•ฝํ•˜๊ธฐ

์™œ smolagents๊ฐ€ ์ž…๋ฌธ์šฉ์œผ๋กœ ์ข‹์€๊ฐ€

Hugging Face ๋ฌธ์„œ ๊ธฐ์ค€์œผ๋กœ smolagents๋Š” ์ ์€ ์ฝ”๋“œ๋กœ ์—์ด์ „ํŠธ ํ•ต์‹ฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋Ÿ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ CodeAgent๋Š” ํ–‰๋™์„ ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋ฏ€๋กœ ๋‹ค์Œ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณ„์‚ฐ/์กฐ๊ฑด๋ฌธ/๋ฐ˜๋ณต๋ฌธ์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋„๊ตฌ ํ˜ธ์ถœ ๊ณผ์ •์„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
  • โ€œ๊ฒ€์ƒ‰ โ†’ ๊ณ„์‚ฐ โ†’ ์ •๋ฆฌโ€ ๊ฐ™์€ ๋ฉ€ํ‹ฐ์Šคํ… ์ž‘์—…์„ ์งง์€ ์˜ˆ์ œ๋กœ ์žฌํ˜„ํ•˜๊ธฐ ์‰ฌ์›€

์˜ค๋Š˜ ๋ฐ”๋กœ ํ•ด๋ณด๋Š” 10๋ถ„ ์‹ค์Šต

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

์ค€๋น„๋ฌผ

  • Python 3.10+
  • ํ„ฐ๋ฏธ๋„
  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ
  • ๊ฐ€์ƒํ™˜๊ฒฝ(venv)
  • ํ•„์š” ์‹œ Hugging Face ํ† ํฐ (HF_TOKEN)

Step 1) ์ž‘์—… ํด๋” ๋งŒ๋“ค๊ธฐ

์ž…๋ ฅ

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

์„ฑ๊ณต ํŒ์ •

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

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

์ž…๋ ฅ

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

์„ฑ๊ณต ํŒ์ •

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

Step 3) ์‹ค์Šต ์ฝ”๋“œ ์ž‘์„ฑ

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("27 ๊ณฑํ•˜๊ธฐ 14๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ฒฐ๊ณผ๊ฐ€ ์™œ ๋งž๋Š”์ง€ ํ•œ ์ค„๋กœ ์„ค๋ช…ํ•ด์ค˜.")
print(result)

์ฝ”๋“œ ์„ค๋ช…

  • @tool: ์ผ๋ฐ˜ Python ํ•จ์ˆ˜๋ฅผ ์—์ด์ „ํŠธ ๋„๊ตฌ๋กœ ๋“ฑ๋ก
  • multiply: ๋ชจ๋ธ์ด ์ง์ ‘ ์•”์‚ฐํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„์‚ฐ ๋„๊ตฌ
  • InferenceClientModel(): Hugging Face Inference ๊ธฐ๋ฐ˜ ๋ชจ๋ธ ์—ฐ๊ฒฐ
  • CodeAgent(...): ํ•„์š”ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ต์„ ๊ตฌ์„ฑ

Step 4) ์‹คํ–‰

์‹คํ–‰ ๋ช…๋ น

python app.py

์„ฑ๊ณต ํŒ์ •

์•„๋ž˜ 3๊ฐœ๋ฅผ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

  • ์‹คํ–‰์ด ์—๋Ÿฌ ์—†์ด ๋๋‚œ๋‹ค.
  • ์ถœ๋ ฅ์— 378์ด ํฌํ•จ๋œ๋‹ค.
  • ๋‹ต๋ณ€์— ๊ณ„์‚ฐ ๊ทผ๊ฑฐ๋‚˜ ์งง์€ ์„ค๋ช…์ด ํ•จ๊ป˜ ๋‚˜์˜จ๋‹ค.

Step 5) ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ฐ”๊ฟ” ๋ฃจํ”„ ํ™•์ธ

์ด๋ฒˆ์—” app.py์˜ ๋งˆ์ง€๋ง‰ ์ค„ ์งˆ๋ฌธ์„ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๊ฟ” ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ

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

์„ฑ๊ณต ํŒ์ •

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

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

1) ์—์ด์ „ํŠธ๋Š” ๋ชจ๋ธ + ๋„๊ตฌ + ๋ฃจํ”„๋‹ค

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

2) ๋„๊ตฌ๋Š” โ€œ๋Šฅ๋ ฅ ํ™•์žฅ ์Šฌ๋กฏโ€์ด๋‹ค

์˜ค๋Š˜์€ multiply ํ•˜๋‚˜๋งŒ ๋ถ™์˜€์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์•„๋ž˜๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

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

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

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

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

์ฝ˜ํ…์ธ /๋ฆฌ์„œ์น˜ ์ž‘์—…

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

์šด์˜ ์ž๋™ํ™”

  • ์ง€ํ‘œ ์กฐํšŒ ๋„๊ตฌ + ๊ณ„์‚ฐ ๋„๊ตฌ + ์Šฌ๋ž™/ํ…”๋ ˆ๊ทธ๋žจ ์ „์†ก ๋„๊ตฌ ์กฐํ•ฉ
  • ์ž„๊ณ„์น˜ ์ดˆ๊ณผ ์‹œ ๋‹ค์Œ ์•ก์…˜ ๋ถ„๊ธฐ ๊ฐ€๋Šฅ

์‚ฌ๋‚ด ์ง€์‹๋ด‡

  • ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๋˜๋Š” ๋ฌธ์„œ ์กฐํšŒ ๋„๊ตฌ ์—ฐ๊ฒฐ
  • ๋‹ต๋ณ€ ์ „ ์ตœ์‹  ๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜๋„๋ก ๋ฃจํ”„ ์„ค๊ณ„

์ž์ฃผ ๋ง‰ํžˆ๋Š” ์ง€์ 

ImportError ๋˜๋Š” ModuleNotFoundError

์›์ธ:

  • ๊ฐ€์ƒํ™˜๊ฒฝ ๋ฏธํ™œ์„ฑํ™” ๋˜๋Š” ์„ค์น˜ ์‹คํŒจ

ํ•ด๊ฒฐ:

source .venv/bin/activate
pip install smolagents

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

์›์ธ:

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

ํ•ด๊ฒฐ:

export HF_TOKEN=hf_your_token
python app.py

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

์›์ธ:

  • ์งˆ๋ฌธ์ด ๋„ˆ๋ฌด ๋‹จ์ˆœํ•˜๋ฉด ๋ชจ๋ธ์ด ์ง์ ‘ ๋‹ตํ•˜๋ ค ํ•  ์ˆ˜ ์žˆ์Œ

ํ•ด๊ฒฐ:

  • ํ”„๋กฌํ”„ํŠธ์— ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋ฅผ ๋ช…์‹œ
  • ๊ณ„์‚ฐ ๊ทผ๊ฑฐ, ๋‹จ๊ณ„, ํŒ์ • ์กฐ๊ฑด์„ ํ•จ๊ป˜ ์š”๊ตฌ

์š”์•ฝ

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

๋‹ค์Œ์— ์ด์–ด ๋ณด๋ฉด ์ข‹์€ ์ฃผ์ œ

  • CodeAgent์™€ ToolCallingAgent ์ฐจ์ด
  • ๊ฒ€์ƒ‰ ๋„๊ตฌ๋ฅผ ๋ถ™์ธ ์ •๋ณด ํƒ์ƒ‰ํ˜• ์—์ด์ „ํŠธ
  • ๊ณ„์‚ฐ๊ธฐ/ํŒŒ์ผ ์ €์žฅ ๋„๊ตฌ๋ฅผ ๋ฌถ์€ ์ž๋™ํ™”ํ˜• ์—์ด์ „ํŠธ

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

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