๐Ÿค— 49. HF Agents Course ์‹ค์ŠตํŽธ 1 - Alfred ์Šคํƒ€์ผ ํ•™์Šต ๋„์šฐ๋ฏธ ์—์ด์ „ํŠธ ํ•ธ์ฆˆ์˜จ

๋ชฉํ‘œ: Hugging Face Agents Course์˜ ๊ณต์‹ ์ฝ”์Šค ๊ตฌ์กฐ(Unit 0~4), Unit 1์˜ Think โ†’ Act โ†’ Observe ํ๋ฆ„, smolagents์˜ CodeAgent ๋น ๋ฅธ ์‹œ์ž‘์„ ํ•œ ๋ฒˆ์— ์†์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌํ˜„ํ•œ๋‹ค.

Hugging Face Agents Course ์ €์žฅ์†Œ๋Š” ์ฝ”์Šค๋ฅผ 4๊ฐœ ์œ ๋‹› + ๋ณด๋„ˆ์Šค ์œ ๋‹›์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ , Unit 1์€ ์—์ด์ „ํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋„๊ตฌ ์‚ฌ์šฉ, Think โ†’ Act โ†’ Observe ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ๋˜ smolagents ๋ฌธ์„œ๋Š” ๋ช‡ ์ค„ ์ฝ”๋“œ๋กœ CodeAgent๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋Ÿ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ์ ์„ ๊ฐ•์กฐํ•œ๋‹ค. ์ด๋ฒˆ ์‹ค์Šต์€ ์ด ์„ธ ๊ฐ€์ง€๋ฅผ ๋ฌถ์–ด, ๊ณต์‹ ์ž๋ฃŒ๋ฅผ ์ฝ๊ณ  ์˜ค๋Š˜์˜ ํ•™์Šต ๊ณ„ํš๊ณผ ์‹ค์Šต ๋ช…๋ น์„ ์ œ์•ˆํ•˜๋Š” CLI ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

์ด๋ฒˆ์— ๋งŒ๋“ค ๊ฒฐ๊ณผ๋ฌผ

์ž…๋ ฅ ์˜ˆ์‹œ:

๋‚˜๋Š” ์˜ค๋Š˜ 45๋ถ„๋งŒ ์“ธ ์ˆ˜ ์žˆ์–ด. HF Agents Course๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ๋žŒ ๊ธฐ์ค€์œผ๋กœ
๋ฌด์—‡์„ ์ฝ๊ณ  ์–ด๋–ค ์‹ค์Šต์„ ๋จผ์ € ๋Œ๋ฆฌ๋ฉด ์ข‹์€์ง€ ์•Œ๋ ค์ค˜.

์ถœ๋ ฅ ์˜ˆ์‹œ:

  • 3์ค„ ์š”์•ฝ
  • ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ
  • ์˜ค๋Š˜ ๋ฐ”๋กœ ํ•  ์‹ค์Šต 1๊ฐœ
  • ์‹คํ–‰ ๋ช…๋ น
  • ์„ฑ๊ณต ํŒ์ • ๊ธฐ์ค€

์™œ ์ด ์‹ค์Šต์ด ์ฝ”์Šค ์ทจ์ง€์™€ ๋งž๋Š”๊ฐ€

  • ๊ณต์‹ ์ €์žฅ์†Œ๋Š” ์ฝ”์Šค๋ฅผ onboarding โ†’ fundamentals โ†’ frameworks โ†’ use cases โ†’ final assignment ํ๋ฆ„์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค.
  • Unit 1 ์†Œ๊ฐœ ํŽ˜์ด์ง€๋Š” ์—์ด์ „ํŠธ ๊ธฐ์ดˆ, ๋„๊ตฌ, LLM ์—ญํ• , Think โ†’ Act โ†’ Observe๋ฅผ ๋จผ์ € ์ตํžˆ๊ณ  ์ดํ›„ ์ฒซ ์—์ด์ „ํŠธ Alfred๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ์•ˆ๋‚ดํ•œ๋‹ค.
  • smolagents ๋ฌธ์„œ๋Š” CodeAgent + ์ตœ์†Œ ๋„๊ตฌ ๊ตฌ์„ฑ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์‹คํ—˜ํ•˜๋Š” ํŒจํ„ด์„ ์ œ์‹œํ•œ๋‹ค.

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

์ „์ฒด ๊ตฌ์กฐ

flowchart TD
    U[์‚ฌ์šฉ์ž ์งˆ๋ฌธ] --> A[CodeAgent]
    A --> T1[get_course_map]
    A --> T2[get_unit1_focus]
    A --> T3[get_smolagents_quickstart]
    T1 --> S[๊ณต์‹ ์ •๋ณด ์š”์•ฝ]
    T2 --> S
    T3 --> S
    S --> O[์˜ค๋Š˜์˜ ํ•™์Šต ์ˆœ์„œ + ์‹คํ–‰ ๋ช…๋ น + ์„ฑ๊ณต ํŒ์ •]

์ค€๋น„๋ฌผ

  • ๋„๊ตฌ
    • Python 3.10+
    • ํ„ฐ๋ฏธ๋„
    • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ
  • ์ž…๋ ฅ
    • Hugging Face ๊ณ„์ • ๊ถŒ์žฅ
    • ์„ ํƒ: HF_TOKEN ํ™˜๊ฒฝ๋ณ€์ˆ˜
  • ์ฐธ๊ณ  ๊ณต์‹ ๋งํฌ
    • agents-course ์ €์žฅ์†Œ
    • HF Agents Course ํ•™์Šต ํŽ˜์ด์ง€
    • smolagents ๋ฌธ์„œ

Step 1) ์ž‘์—… ํด๋” ์ค€๋น„

์ž…๋ ฅ

mkdir -p ~/hf-agents-handson-alfred
cd ~/hf-agents-handson-alfred

์„ฑ๊ณต ํŒ์ •

pwd
ls -la
  • ํ˜„์žฌ ๊ฒฝ๋กœ ๋์ด hf-agents-handson-alfred ์ด๋ฉด ํ†ต๊ณผ.
  • ๋นˆ ์ž‘์—… ํด๋”๊ฐ€ ๋ณด์ด๋ฉด ํ†ต๊ณผ.

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) ์—์ด์ „ํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

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

import requests
from bs4 import BeautifulSoup
from smolagents import CodeAgent, InferenceClientModel, tool
 
PAGES = {
    "course": "https://huggingface.co/learn/agents-course",
    "unit1": "https://huggingface.co/learn/agents-course/en/unit1/introduction",
    "smolagents": "https://huggingface.co/docs/smolagents/index",
    "repo": "https://github.com/huggingface/agents-course",
}
 
 
def fetch_text(url: str) -> str:
    response = requests.get(url, timeout=30)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, "html.parser")
 
    parts = []
    title = soup.title.get_text(" ", strip=True) if soup.title else url
    parts.append(f"TITLE: {title}")
 
    for tag in soup.select("h1, h2, h3, p, li"):
        text = tag.get_text(" ", strip=True)
        if text and len(text) >= 20:
            parts.append(text)
        if len(parts) >= 35:
            break
 
    return "\n".join(parts)
 
 
@tool
def get_course_map() -> str:
    """Return a compact summary of the official HF Agents Course overview page."""
    return fetch_text(PAGES["course"])
 
 
@tool
def get_unit1_focus() -> str:
    """Return a compact summary of the official Unit 1 introduction page."""
    return fetch_text(PAGES["unit1"])
 
 
@tool
def get_smolagents_quickstart() -> str:
    """Return a compact summary of the official smolagents docs index page."""
    return fetch_text(PAGES["smolagents"])
 
 
@tool
def get_repo_outline() -> str:
    """Return a compact summary of the official agents-course repository page."""
    return fetch_text(PAGES["repo"])
 
 
model = InferenceClientModel()
agent = CodeAgent(
    tools=[
        get_course_map,
        get_unit1_focus,
        get_smolagents_quickstart,
        get_repo_outline,
    ],
    model=model,
    max_steps=6,
)
 
prompt = """
๊ณต์‹ ํŽ˜์ด์ง€ ๋„๊ตฌ ๊ฒฐ๊ณผ๋งŒ ์‚ฌ์šฉํ•ด ํ•œ๊ตญ์–ด๋กœ ๋‹ตํ•ด์ค˜.
์งˆ๋ฌธ: ๋‚˜๋Š” ์˜ค๋Š˜ 45๋ถ„๋งŒ ์“ธ ์ˆ˜ ์žˆ์–ด. HF Agents Course๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ๋žŒ ๊ธฐ์ค€์œผ๋กœ
1) 3์ค„ ์š”์•ฝ
2) ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ(3๋‹จ๊ณ„)
3) ์˜ค๋Š˜ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์‹ค์Šต 1๊ฐœ
4) ์‹คํ–‰ ๋ช…๋ น
5) ์„ฑ๊ณต ํŒ์ • ๊ธฐ์ค€
ํ˜•์‹์œผ๋กœ ์ •๋ฆฌํ•ด์ค˜.
๊ณต์‹ ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ํ™•์ธ๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ์€ ๋ฐ˜๋“œ์‹œ '์ถ”์ •'์ด๋ผ๊ณ  ํ‘œ์‹œํ•ด์ค˜.
"""
 
result = agent.run(prompt)
print(result)

์ฝ”๋“œ ํ™•์ธ ํฌ์ธํŠธ

  • @tool๋กœ ๊ณต์‹ ํŽ˜์ด์ง€ ์ฝ๊ธฐ ํ•จ์ˆ˜๋ฅผ ๋„๊ตฌํ™”ํ–ˆ๋‹ค.
  • CodeAgent๊ฐ€ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•ด ์Šค์Šค๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ชจ์€๋‹ค.
  • ๋‹ต๋ณ€ ๋ฒ”์œ„๋ฅผ ๊ณต์‹ ์ž๋ฃŒ๋กœ ์ œํ•œํ•ด ๊ทผ๊ฑฐ๊ฐ€ ํ”๋“ค๋ฆฌ์ง€ ์•Š๊ฒŒ ํ–ˆ๋‹ค.

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

์‹คํ–‰ ๋ช…๋ น

source .venv/bin/activate
python alfred_study_coach.py

์„ฑ๊ณต ํŒ์ •

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

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

Step 5) ์งˆ๋ฌธ์„ ๋ฐ”๊ฟ” ์žฌ์‹คํ–‰

์ด๋ฒˆ์—๋Š” ์‹ค์Šต ์ค‘์‹ฌ ์ž…๋ ฅ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

์ž…๋ ฅ

prompt๋ฅผ ์•„๋ž˜๋กœ ๋ฐ”๊พผ๋‹ค.

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

์‹คํ–‰ ๋ช…๋ น

python alfred_study_coach.py

์„ฑ๊ณต ํŒ์ •

  • Unit 1๊ณผ smolagents๊ฐ€ ๋ชจ๋‘ ์–ธ๊ธ‰๋œ๋‹ค.
  • ํ•™์Šต ์ˆœ์„œ๊ฐ€ 2๋‹จ๊ณ„ ๋˜๋Š” 3๋‹จ๊ณ„๋กœ ์••์ถ•๋œ๋‹ค.
  • ์‹ค์ œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์ด 1์„ธํŠธ ์ด์ƒ ์ œ์‹œ๋œ๋‹ค.

Step 6) ์ถœ๋ ฅ ์ €์žฅ

์‹คํ–‰ ๋ช…๋ น

python alfred_study_coach.py > latest-study-plan.md
sed -n '1,80p' latest-study-plan.md

์„ฑ๊ณต ํŒ์ •

  • latest-study-plan.md ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.
  • ์ฒซ 80์ค„ ์•ˆ์— ์š”์•ฝ, ์ˆœ์„œ, ์‹ค์Šต ํ•ญ๋ชฉ์ด ๋ณด์ธ๋‹ค.

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

1) ์ฝ”์Šค ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์žก์•„์•ผ ๊ธธ์„ ์žƒ์ง€ ์•Š๋Š”๋‹ค

๊ณต์‹ ์ฝ”์Šค ์†Œ๊ฐœ๋Š” ํ•™์Šต ํ๋ฆ„์„ ๊ธฐ์ดˆ ๊ฐœ๋… โ†’ ํ”„๋ ˆ์ž„์›Œํฌ โ†’ ์œ ์Šค์ผ€์ด์Šค โ†’ ํŒŒ์ด๋„ ๊ณผ์ œ๋กœ ์ œ์‹œํ•œ๋‹ค. ์ดˆ๋ฐ˜์—๋Š” ๋ชจ๋“  ์œ ๋‹›์„ ๋‹ค ์ฝ๊ธฐ๋ณด๋‹ค, ๋‚ด๊ฐ€ ์ง€๊ธˆ ์–ด๋””์— ์žˆ๋Š”์ง€ ๋จผ์ € ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

2) Unit 1์€ ์—์ด์ „ํŠธ ์‚ฌ๊ณ  ๋ฃจํ”„์˜ ์ถœ๋ฐœ์ ์ด๋‹ค

Unit 1 ์†Œ๊ฐœ ํŽ˜์ด์ง€๋Š” ์—์ด์ „ํŠธ ์ •์˜, LLM์˜ ์—ญํ• , ๋„๊ตฌ, ์•ก์…˜, Think โ†’ Act โ†’ Observe ๋ฃจํ”„๋ฅผ ๋‹ค๋ฃฌ ๋’ค Alfred๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ์•ˆ๋‚ดํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒซ ์‹ค์Šต๋„ ๋ณต์žกํ•œ ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ๋ณด๋‹ค ์ž‘์€ ๋„๊ตฌ + ๋‹จ์ผ ์—์ด์ „ํŠธ ์กฐํ•ฉ์ด ์ ํ•ฉํ•˜๋‹ค.

3) smolagents๋Š” ์ž…๋ฌธ์šฉ ์‹คํ—˜ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค

smolagents ๋ฌธ์„œ๋Š” CodeAgent๋ฅผ ๋งค์šฐ ์งง์€ ์ฝ”๋“œ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์„ค๋ช…ํ•œ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋„ ๋ณต์žกํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ์„ค์ • ์—†์ด ๋„๊ตฌ 4๊ฐœ + CodeAgent 1๊ฐœ๋กœ ๋๋‚œ๋‹ค.

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

  • Python ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ์™„๋ฃŒ
  • smolagents, requests, beautifulsoup4 ์„ค์น˜ ์™„๋ฃŒ
  • alfred_study_coach.py ์ €์žฅ ์™„๋ฃŒ
  • ์ฒซ ์‹คํ–‰ ์„ฑ๊ณต
  • ์งˆ๋ฌธ ๋ณ€๊ฒฝ ํ›„ ์žฌ์‹คํ–‰ ์„ฑ๊ณต
  • ๊ฒฐ๊ณผ ํŒŒ์ผ ์ €์žฅ ์„ฑ๊ณต

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

1) ModuleNotFoundError: No module named 'smolagents'

์›์ธ:

  • ๊ฐ€์ƒํ™˜๊ฒฝ์ด ๊บผ์ ธ ์žˆ์Œ
  • ๋‹ค๋ฅธ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ์‹คํ–‰ํ•จ

ํ•ด๊ฒฐ:

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

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

์›์ธ:

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

ํ•ด๊ฒฐ:

export HF_TOKEN=hf_your_token
python alfred_study_coach.py
  • ํ† ํฐ ์„ค์ • ํ›„ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.
  • ์กฐ์ง ํ™˜๊ฒฝ์ด๋ฉด ์‚ฌ๋‚ด ํ”„๋ก์‹œ ๋˜๋Š” ์ •์ฑ… ๋•Œ๋ฌธ์— ๋ณ„๋„ ์ธ์ฆ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.

3) requests.exceptions.ReadTimeout

์›์ธ:

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

ํ•ด๊ฒฐ:

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

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

์›์ธ:

  • ํ”„๋กฌํ”„ํŠธ ํ˜•์‹ ์ œ์•ฝ์ด ์•ฝํ•จ
  • ๋„๊ตฌ ์„ค๋ช…์ด ๋„ˆ๋ฌด ๋ชจํ˜ธํ•จ

ํ•ด๊ฒฐ:

  • ํ”„๋กฌํ”„ํŠธ์— 3์ค„ ์š”์•ฝ, ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ, ์‹คํ–‰ ๋ช…๋ น, ์„ฑ๊ณต ํŒ์ • ๊ธฐ์ค€์„ ๋ช…์‹œํ•œ๋‹ค.
  • ๊ณต์‹ ํŽ˜์ด์ง€ ๋„๊ตฌ ๊ฒฐ๊ณผ๋งŒ ์‚ฌ์šฉ ๋ฌธ๊ตฌ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • ํ™•์ธ ๋ถˆ๊ฐ€ ์ •๋ณด๋Š” ์ถ”์ • ํ‘œ๊ธฐ๋ฅผ ๊ฐ•์ œํ•œ๋‹ค.

5) GitHub ์ €์žฅ์†Œ ๋‚ด์šฉ์ด ๊ธฐ๋Œ€๋ณด๋‹ค ๋นˆ์•ฝํ•˜๊ฒŒ ์žกํž ๋•Œ

์›์ธ:

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

ํ•ด๊ฒฐ:

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

6) HTML ์ถ”์ถœ ํ’ˆ์งˆ์ด ๋“ค์ญ‰๋‚ ์ญ‰ํ•  ๋•Œ

์›์ธ:

  • ํŽ˜์ด์ง€๋งˆ๋‹ค h1, p, li ๋ฐฐ์น˜ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฆ„

ํ•ด๊ฒฐ:

for tag in soup.select("main h1, main h2, main h3, main p, main li, article p, article li"):
  • ์„ ํƒ์ž๋ฅผ ๋” ๊ตฌ์ฒดํ™”ํ•œ๋‹ค.
  • ์ถ”์ถœ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•ด ์–ด๋–ค ํƒœ๊ทธ๊ฐ€ ์ž˜ ์žกํžˆ๋Š”์ง€ ๋จผ์ € ๋ณธ๋‹ค.

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

  • unit2, unit3, unit4 ์ „์šฉ ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค‘๊ธ‰ ํ•™์Šต ์ฝ”์น˜๋กœ ํ™•์žฅํ•˜๊ธฐ
  • ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์‹œ๊ฐ„์„ 20๋ถ„/45๋ถ„/90๋ถ„์œผ๋กœ ๋ฐ›์•„ ๋‹ค๋ฅธ ํ•™์Šต ๊ณ„ํš์„ ๋‚ด๋†“๊ธฐ
  • ๊ฒฐ๊ณผ๋ฅผ Markdown ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ €์žฅํ•˜๋Š” save_markdown_report ๋„๊ตฌ ์ถ”๊ฐ€ํ•˜๊ธฐ
  • ToolCallingAgent ๋ฒ„์ „์œผ๋กœ ๋ฐ”๊ฟ” CodeAgent์™€ ์‘๋‹ต ์ฐจ์ด ๋น„๊ตํ•˜๊ธฐ

๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ํ•ธ์ฆˆ์˜จ์˜ ํ•ต์‹ฌ์€ ์—์ด์ „ํŠธ๋ฅผ ๊ฑฐ์ฐฝํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ์žˆ์ง€ ์•Š๋‹ค. ๊ณต์‹ ์ž๋ฃŒ๋ฅผ ์ฝ๋Š” ๋„๊ตฌ๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ณ , ๊ทธ ์œ„์—์„œ ์—์ด์ „ํŠธ๊ฐ€ ํ•™์Šต ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ฒŒ ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ตํžˆ๋Š” ๋ฐ ์žˆ๋‹ค. ์ด ๊ตฌ์กฐ๋ฅผ ์žก์•„๋‘๋ฉด ์ดํ›„ Unit 2์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋น„๊ต๋‚˜ ์ตœ์ข… ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๊ทผ๊ฑฐ ์ค‘์‹ฌ์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง„๋‹ค.


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

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