๐Ÿค— 46. HF Agents Course ์‹ค์ŠตํŽธ 1 - smolagents๋กœ ์ฝ”์Šค ๋กœ๋“œ๋งต CLI ๋งŒ๋“ค๊ธฐ

๋ชฉํ‘œ: Hugging Face Agents Course ๊ณต์‹ ์ž๋ฃŒ์™€ smolagents๋งŒ ์จ์„œ ์ฝ”์Šค ๋กœ๋“œ๋งต์„ ์„ค๋ช…ํ•˜๊ณ  ๋ฐ”๋กœ ์˜ค๋Š˜ ํ•  ๊ณผ์ œ๊นŒ์ง€ ์ œ์•ˆํ•˜๋Š” CLI ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌํ˜„ํ•œ๋‹ค.

์ด๋ฒˆ ์‹ค์Šต์€ HF Agents Course๊ฐ€ ๊ฐ•์กฐํ•˜๋Š” ๋‘ ์ถ•์„ ๋ฐ”๋กœ ์†์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ฐ ๋งž์ถ˜๋‹ค.

  • ์ฝ”์Šค๋Š” ๊ธฐ์ดˆ ์ด๋ก  โ†’ ํ”„๋ ˆ์ž„์›Œํฌ โ†’ ์œ ์Šค์ผ€์ด์Šค โ†’ ์ตœ์ข… ๊ณผ์ œ ํ๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • smolagents๋Š” ์ž‘์€ ์ฝ”๋“œ๋กœ ์—์ด์ „ํŠธ์™€ ๋„๊ตฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ถ™์—ฌ๋ณด๋Š” ์ถœ๋ฐœ์ ์œผ๋กœ ์ ํ•ฉํ•˜๋‹ค.

์ฆ‰, ์ด๋ฒˆ ๊ธ€์€ โ€œ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ๋โ€์ด ์•„๋‹ˆ๋ผ ๊ณต์‹ ์ฝ”์Šค ์†Œ๊ฐœ ํŽ˜์ด์ง€๋ฅผ ์ฝ๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ๋„๊ตฌ๋ฅผ ์“ฐ๋Š” ์—์ด์ „ํŠธ๊นŒ์ง€ ์—ฐ๊ฒฐํ•˜๋Š” ์ฒซ ์‹ค์ŠตํŽธ์ด๋‹ค.

๋ฌด์—‡์„ ๋งŒ๋“ค๊นŒ

์ž…๋ ฅ:

  • ๋‚˜๋Š” ํ•˜๋ฃจ 40๋ถ„๋งŒ ํˆฌ์žํ•  ์ˆ˜ ์žˆ์–ด. Unit 0, Unit 1, smolagents ์ค‘ ๋ฌด์—‡๋ถ€ํ„ฐ ๋ณด๊ณ  ์˜ค๋Š˜ ๋ฐ”๋กœ ์–ด๋–ค ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ข‹์„๊นŒ?

์ถœ๋ ฅ:

  • ์ฝ”์Šค 3์ค„ ์š”์•ฝ
  • ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ
  • ๊ฐ ํŽ˜์ด์ง€๋ฅผ ์™œ ๋จผ์ € ๋ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…
  • ์˜ค๋Š˜ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ๋ช…๋ น 1์„ธํŠธ
  • ์‹œ์ž‘ ์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์ด ์‹ค์Šต์ด ์ข‹์€ ์ด์œ 

  • ์ •๋ณด์›์„ GitHub ์ €์žฅ์†Œ / ๊ณต์‹ ์ฝ”์Šค / smolagents ๋ฌธ์„œ๋กœ ์ œํ•œํ•ด ๋‹ต๋ณ€ ๊ทผ๊ฑฐ๊ฐ€ ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • @tool + CodeAgent ์กฐํ•ฉ์„ ๊ฐ€์žฅ ์ž‘๊ฒŒ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฒฐ๊ณผ๋ฌผ์ด ๋‹จ์ˆœ ๋ฐ๋ชจ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐœ์ธ ํ•™์Šต ์ฝ”์น˜ CLI๋ผ์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€์น˜๊ฐ€ ๋†’๋‹ค.

์ „์ฒด ํ๋ฆ„

flowchart TD
    Q[์‚ฌ์šฉ์ž ์งˆ๋ฌธ] --> A[CodeAgent]
    A --> T[get_official_section ํˆด]
    T --> C[๊ณต์‹ ์ฝ”์Šค ํŽ˜์ด์ง€ ์ฝ๊ธฐ]
    C --> S[์„น์…˜๋ณ„ ํ•ต์‹ฌ ์ •๋ณด ์••์ถ•]
    S --> R[ํ•™์Šต ์ˆœ์„œ + ์˜ค๋Š˜์˜ ์‹ค์Šต ์ œ์•ˆ]

์ค€๋น„๋ฌผ

  • Python 3.10+
  • ํ„ฐ๋ฏธ๋„
  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ
  • Hugging Face ๊ณ„์ • ๊ถŒ์žฅ
  • ์„ ํƒ: HF_TOKEN ํ™˜๊ฒฝ๋ณ€์ˆ˜

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

์ž…๋ ฅ

mkdir -p ~/hf-agents-course-handson-01
cd ~/hf-agents-course-handson-01

์„ฑ๊ณต ํŒ์ •

pwd
  • ์ถœ๋ ฅ ๋์ด hf-agents-course-handson-01 ์ด๋ฉด ํ†ต๊ณผ.

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

์ž…๋ ฅ

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

์„ฑ๊ณต ํŒ์ •

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

Step 3) CLI ์ฝ”๋“œ ์ž‘์„ฑ

roadmap_cli.py ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š”๋‹ค.

import requests
from bs4 import BeautifulSoup
from smolagents import CodeAgent, InferenceClientModel, tool
 
OFFICIAL_PAGES = {
    "repo": "https://github.com/huggingface/agents-course",
    "unit0": "https://huggingface.co/learn/agents-course/en/unit0/introduction",
    "unit1": "https://huggingface.co/learn/agents-course/en/unit1/introduction",
    "smolagents": "https://huggingface.co/docs/smolagents/index",
}
 
@tool
def get_official_section(name: str) -> str:
    """Read one official HF Agents Course related page and return a compact summary.
 
    Args:
        name: One of repo, unit0, unit1, smolagents.
    """
    key = name.strip().lower()
    if key not in OFFICIAL_PAGES:
        return f"Unknown page: {key}. Choose from: {', '.join(OFFICIAL_PAGES)}"
 
    response = requests.get(OFFICIAL_PAGES[key], timeout=30)
    response.raise_for_status()
 
    soup = BeautifulSoup(response.text, "html.parser")
    title = soup.title.get_text(" ", strip=True) if soup.title else key
 
    headings = []
    for tag in soup.select("h1, h2, h3"):
        text = tag.get_text(" ", strip=True)
        if text and text not in headings:
            headings.append(text)
        if len(headings) >= 8:
            break
 
    snippets = []
    for tag in soup.select("p, li"):
        text = tag.get_text(" ", strip=True)
        if len(text) >= 40 and text not in snippets:
            snippets.append(text)
        if len(snippets) >= 8:
            break
 
    return (
        f"PAGE: {key}\n"
        f"URL: {OFFICIAL_PAGES[key]}\n"
        f"TITLE: {title}\n"
        f"HEADINGS:\n- " + "\n- ".join(headings) + "\n\n"
        f"SNIPPETS:\n- " + "\n- ".join(snippets)
    )
 
model = InferenceClientModel()
agent = CodeAgent(
    tools=[get_official_section],
    model=model,
    max_steps=6,
)
 
prompt = """
๊ณต์‹ ํŽ˜์ด์ง€ ์ •๋ณด๋งŒ ์‚ฌ์šฉํ•ด์„œ ํ•œ๊ตญ์–ด๋กœ ๋‹ตํ•ด์ค˜.
์งˆ๋ฌธ: ๋‚˜๋Š” ํ•˜๋ฃจ 40๋ถ„๋งŒ ํˆฌ์žํ•  ์ˆ˜ ์žˆ์–ด. HF Agents Course๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ๋žŒ ๊ธฐ์ค€์œผ๋กœ
repo, unit0, unit1, smolagents๋ฅผ ์ฐธ๊ณ ํ•ด
1) 3์ค„ ์š”์•ฝ
2) ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ
3) ์˜ค๋Š˜ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์‹ค์Šต 1๊ฐœ
4) ์‹œ์ž‘ ์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ 4๊ฐœ
ํ˜•์‹์œผ๋กœ ๋‹ตํ•ด์ค˜.
๊ณต์‹ ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ํ™•์ธ๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ์€ '์ถ”์ •'์ด๋ผ๊ณ  ํ‘œ์‹œํ•ด์ค˜.
"""
 
result = agent.run(prompt)
print(result)

Step 4) ์ฒซ ์‹คํ–‰

์‹คํ–‰ ๋ช…๋ น

python roadmap_cli.py

์„ฑ๊ณต ํŒ์ •

์•„๋ž˜ 5๊ฐœ๋ฅผ ๋งŒ์กฑํ•˜๋ฉด ์„ฑ๊ณต์ด๋‹ค.

  • ์‹คํ–‰์ด ์ค‘๊ฐ„ ์˜ˆ์™ธ ์—†์ด ๋๋‚œ๋‹ค.
  • ์ถœ๋ ฅ ๋งจ ์œ„์— 3์ค„ ์š”์•ฝ์ด ์žˆ๋‹ค.
  • ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ๊ฐ€ ๋ฒˆํ˜ธ ๋ชฉ๋ก์œผ๋กœ ๋‚˜์˜จ๋‹ค.
  • ์˜ค๋Š˜ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์‹ค์Šต 1๊ฐœ์— ์‹ค์ œ ๋ช…๋ น ๋˜๋Š” ์ฝ”๋“œ ์‹คํ–‰ ์ œ์•ˆ์ด ์žˆ๋‹ค.
  • ๊ณต์‹ ํ™•์ธ์ด ์–ด๋ ค์šด ๋‚ด์šฉ์€ ์ถ”์ •์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค.

Step 5) ์งˆ๋ฌธ์„ ๋ฐ”๊ฟ” ๋‹ค์‹œ ๊ฒ€์ฆ

๊ฐ™์€ ํŒŒ์ผ์—์„œ prompt๋งŒ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๊พธ๊ณ  ์žฌ์‹คํ–‰ํ•œ๋‹ค.

์ž…๋ ฅ

๋‚˜๋Š” ์ด๋ก ์„ ๊ธธ๊ฒŒ ์ฝ๊ธฐ๋ณด๋‹ค ๋นจ๋ฆฌ ์†์„ ์›€์ง์ด๊ณ  ์‹ถ์–ด.
Unit 1์„ ์ตœ์†Œํ•œ์œผ๋กœ ๋ณด๊ณ  smolagents๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฐ€์žฅ ์งง์€ ํ•™์Šต ๊ฒฝ๋กœ์™€
์ง€๊ธˆ ๋‹น์žฅ ์‹คํ–‰ํ•  ์ฝ”๋“œ 1๊ฐœ๋งŒ ์ถ”์ฒœํ•ด์ค˜.

์‹คํ–‰ ๋ช…๋ น

python roadmap_cli.py

์„ฑ๊ณต ํŒ์ •

  • smolagents๊ฐ€ ์šฐ์„ ์ˆœ์œ„์— ํฌํ•จ๋œ๋‹ค.
  • ๊ฒฝ๋กœ๊ฐ€ 2~3๋‹จ๊ณ„ ์ •๋„๋กœ ์••์ถ•๋œ๋‹ค.
  • ์‹คํ–‰ํ•  ์ฝ”๋“œ 1๊ฐœ๊ฐ€ ๋ถ„๋ฆฌ๋ผ ์ œ์‹œ๋œ๋‹ค.

Step 6) ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•ด ์žฌ์‚ฌ์šฉ์„ฑ ํ™•์ธ

์‹ค์Šต ๊ฒฐ๊ณผ๋ฅผ ๋งค๋ฒˆ ๋ณต๋ถ™ํ•˜์ง€ ์•Š๋„๋ก ์ €์žฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜๊นŒ์ง€ ๋ถ™์ธ๋‹ค.

์‹คํ–‰ ๋ช…๋ น

python roadmap_cli.py > latest-roadmap.md

์„ฑ๊ณต ํŒ์ •

ls -lh latest-roadmap.md
sed -n '1,40p' latest-roadmap.md
  • ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.
  • ์ฒซ 40์ค„ ์•ˆ์— ์š”์•ฝ/์ถ”์ฒœ ์ˆœ์„œ/์‹ค์Šต ํ•ญ๋ชฉ์ด ๋ณด์ธ๋‹ค.

์ฝ”๋“œ์—์„œ ๊ผญ ํ™•์ธํ•  ํฌ์ธํŠธ

1) ๊ณต์‹ ์ •๋ณด์› ์ œํ•œ

OFFICIAL_PAGES๋ฅผ ๊ณ ์ •ํ•ด๋‘๋ฉด, ์—์ด์ „ํŠธ๊ฐ€ ์ž„์˜ ๋ธ”๋กœ๊ทธ๋‚˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ์ƒˆ์ง€ ์•Š๊ณ  ๊ณต์‹ ์ž๋ฃŒ๋งŒ ๊ทผ๊ฑฐ๋กœ ์‚ผ๊ฒŒ ๋œ๋‹ค.

2) CodeAgent์˜ ๋น ๋ฅธ ์‹คํ—˜์„ฑ

smolagents ๋ฌธ์„œ๋Š” CodeAgent๋ฅผ ๋งค์šฐ ์ ์€ ์ฝ”๋“œ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์œผ๋กœ ์†Œ๊ฐœํ•œ๋‹ค. ์ด๋ฒˆ ์‹ค์Šต์€ ๊ทธ ์žฅ์ ์„ ํ•™์Šต ์ฝ”์น˜ CLI๋กœ ๋ฐ”๋กœ ์ฒด๊ฐํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

3) ์ฝ”์Šค ๊ตฌ์กฐ์™€ ์‹ค์Šต ์—ฐ๊ฒฐ

๊ณต์‹ ์ฝ”์Šค ์†Œ๊ฐœ๋Š” ์ด๋ก ๋งŒ์ด ์•„๋‹ˆ๋ผ ํ•ธ์ฆˆ์˜จ๊ณผ ๊ณผ์ œ ์ˆ˜ํ–‰ ํ๋ฆ„์„ ๊ฐ•์กฐํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ถœ๋ ฅ ํ˜•์‹๋„ ์š”์•ฝ์œผ๋กœ ๋๋‚ด์ง€ ์•Š๊ณ  โ€œ์˜ค๋Š˜ ๋ฐ”๋กœ ํ•  ์‹ค์Šตโ€์„ ํ•„์ˆ˜๋กœ ๋‘”๋‹ค.

์‹ค์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
  • smolagents, requests, beautifulsoup4 ์„ค์น˜ ํ™•์ธ
  • roadmap_cli.py ์ €์žฅ ์™„๋ฃŒ
  • ์ฒซ ์‹คํ–‰ ์„ฑ๊ณต
  • ์งˆ๋ฌธ ๋ณ€๊ฒฝ ํ›„ ์žฌ์‹คํ–‰ ์„ฑ๊ณต
  • latest-roadmap.md ์ €์žฅ ์„ฑ๊ณต

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

1) ModuleNotFoundError: No module named 'smolagents'

์›์ธ:

  • ๋‹ค๋ฅธ ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ์‹คํ–‰ํ•จ
  • ๊ฐ€์ƒํ™˜๊ฒฝ์ด ๋น„ํ™œ์„ฑํ™”๋จ

ํ•ด๊ฒฐ:

source .venv/bin/activate
which python
python -m pip install "smolagents[toolkit]"

2) requests.exceptions.ReadTimeout

์›์ธ:

  • ๋„คํŠธ์›Œํฌ ์ง€์—ฐ
  • ๊ณต์‹ ํŽ˜์ด์ง€ ์‘๋‹ต ์ง€์—ฐ

ํ•ด๊ฒฐ:

response = requests.get(OFFICIAL_PAGES[key], timeout=60)
  • timeout์„ ๋Š˜๋ฆฐ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ URL์ด ์—ด๋ฆฌ๋Š”์ง€ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.

3) 401 ๋˜๋Š” ๋ชจ๋ธ ์ธ์ฆ ์˜ค๋ฅ˜

์›์ธ:

  • ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ Hugging Face Inference ์ธ์ฆ์ด ํ•„์š”ํ•จ

ํ•ด๊ฒฐ:

export HF_TOKEN=hf_xxx_your_token
python roadmap_cli.py
  • ํ† ํฐ ์„ค์ • ํ›„ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.

4) ์ถœ๋ ฅ์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜๋ก ์ ์ผ ๋•Œ

์›์ธ:

  • ํ”„๋กฌํ”„ํŠธ์—์„œ ๊ณต์‹ ํŽ˜์ด์ง€ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š์Œ
  • ์ถœ๋ ฅ ํ˜•์‹ ์ œ์•ฝ์ด ์•ฝํ•จ

ํ•ด๊ฒฐ:

  • repo, unit0, unit1, smolagents๋ฅผ ์ฐธ๊ณ ํ•ด ๋ฌธ์žฅ์„ ์œ ์ง€ํ•œ๋‹ค.
  • ์ถœ๋ ฅ ํ˜•์‹์„ ๋ฒˆํ˜ธ ๋ชฉ๋ก์œผ๋กœ ๊ณ ์ •ํ•œ๋‹ค.
  • ํ™•์ธ ๋ถˆ๊ฐ€ ๋‚ด์šฉ์€ ์ถ”์ • ํ‘œ๊ธฐ๋ฅผ ๊ฐ•์ œํ•œ๋‹ค.

5) ๋ณธ๋ฌธ ์ถ”์ถœ์ด ๋นˆ์•ฝํ•  ๋•Œ

์›์ธ:

  • ํŽ˜์ด์ง€ ๋งˆํฌ์—… ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ p, li ์„ ํƒ์ด ์ถฉ๋ถ„์น˜ ์•Š์Œ

ํ•ด๊ฒฐ:

for tag in soup.select("main p, main li, article p, article li, h2, h3"):
  • ์„ ํƒ์ž๋ฅผ ๋” ๊ตฌ์ฒดํ™”ํ•œ๋‹ค.
  • ํ•„์š”ํ•˜๋ฉด response.text[:2000]๋ฅผ ์ €์žฅํ•ด HTML ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ํ™•์ธํ•œ๋‹ค.

6) GitHub ์ €์žฅ์†Œ ํŽ˜์ด์ง€์—์„œ ๋‚ด์šฉ์ด ๊ธฐ๋Œ€๋ณด๋‹ค ์งง๊ฒŒ ์žกํž ๋•Œ

์›์ธ:

  • GitHub HTML ๊ตฌ์กฐ ํŠน์„ฑ์ƒ ๋ณธ๋ฌธ ์ถ”์ถœ์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Œ

ํ•ด๊ฒฐ:

  • ์ €์žฅ์†Œ๋Š” ์ „์ฒด ์ฝ”์Šค ๊ตฌ์กฐ ํ™•์ธ์šฉ์œผ๋กœ๋งŒ ์“ฐ๊ณ ,
  • ์‹ค์ œ ์„ธ๋ถ€ ์„ค๋ช…์€ unit0, unit1, smolagents ํŽ˜์ด์ง€ ๋น„์ค‘์„ ๋†’์—ฌ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์กฐ์ •ํ•œ๋‹ค.

ํ™•์žฅ ์•„์ด๋””์–ด

  • unit2, unit3, unit4๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค‘๊ธ‰ ํ•™์Šต ๊ฒฝ๋กœ ์ถ”์ฒœ๊ธฐ๋กœ ํ™•์žฅํ•˜๊ธฐ
  • ์‘๋‹ต์„ Markdown ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ €์žฅํ•˜๋Š” save_report ํˆด ์ถ”๊ฐ€ํ•˜๊ธฐ
  • DuckDuckGoSearchTool()์„ ๋ถ™์—ฌ ๊ณต์‹ ์ž๋ฃŒ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ž๋ฃŒ๋ฅผ ๋ถ„๋ฆฌ ๋น„๊ตํ•˜๊ธฐ
  • ์‚ฌ์šฉ์ž ๊ฐ€์šฉ ์‹œ๊ฐ„(20๋ถ„/40๋ถ„/90๋ถ„)์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•™์Šต ๊ฒฝ๋กœ๋ฅผ ๋‚ด๋†“๊ฒŒ ๋งŒ๋“ค๊ธฐ

๋งˆ๋ฌด๋ฆฌ

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


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

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