๐Ÿค— 52. HF Agents Course ์‹ค์ŠตํŽธ 1 - Unit 1 ์š”์•ฝ ํ€ด์ฆˆ ์ƒ์„ฑ ์—์ด์ „ํŠธ ๋งŒ๋“ค๊ธฐ

๋ชฉํ‘œ: Hugging Face Agents Course์˜ ์ฝ”์Šค ๊ตฌ์กฐ, Unit 1์˜ Think โ†’ Act โ†’ Observe, smolagents์˜ CodeAgent/๋„๊ตฌ ๊ฐœ๋…์„ ๋ฐ”ํƒ•์œผ๋กœ, ํ•™์Šต์ž๊ฐ€ ๋ฐ”๋กœ ๋ณต์Šตํ•  ์ˆ˜ ์žˆ๋Š” ์š”์•ฝ + ํ€ด์ฆˆ + ๋‹ค์Œ ์•ก์…˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ์žฌํ˜„ํ•œ๋‹ค.

๊ณต์‹ ์ €์žฅ์†Œ๋Š” ์ฝ”์Šค๋ฅผ ๊ธฐ์ดˆ โ†’ ํ”„๋ ˆ์ž„์›Œํฌ โ†’ ์œ ์Šค์ผ€์ด์Šค โ†’ ํŒŒ์ด๋„ ๊ณผ์ œ ํ๋ฆ„์œผ๋กœ ์†Œ๊ฐœํ•œ๋‹ค. Unit 1 ์†Œ๊ฐœ ํŽ˜์ด์ง€๋Š” ์—์ด์ „ํŠธ์˜ ๊ธฐ๋ณธ๊ธฐ, LLM์˜ ์—ญํ• , ๋„๊ตฌ์™€ ์•ก์…˜, ๊ทธ๋ฆฌ๊ณ  Think โ†’ Act โ†’ Observe ์›Œํฌํ”Œ๋กœ๋ฅผ ๋จผ์ € ์ตํžŒ ๋’ค ์ฒซ ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“ค๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. smolagents ๋ฌธ์„œ๋Š” ์ด๋Ÿฐ ์ž…๋ฌธ ์‹คํ—˜์„ ์งง์€ ์ฝ”๋“œ์™€ ์ ์€ ์ถ”์ƒํ™”๋กœ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.

์ด๋ฒˆ ์‹ค์Šต์€ ์ด ์„ธ ๊ฐ€์ง€๋ฅผ ๋ฌถ์–ด, ๊ณต์‹ ํŽ˜์ด์ง€๋ฅผ ์ฝ๊ณ  Unit 1 ๋ณต์Šต์šฉ ์š”์•ฝ๊ณผ ํ€ด์ฆˆ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

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

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

HF Agents Course Unit 1์„ 20๋ถ„ ์•ˆ์— ๋ณต์Šตํ•˜๊ณ  ์‹ถ์–ด.
ํ•ต์‹ฌ ๊ฐœ๋… 4๊ฐœ์™€ ๊ฐ๊ด€์‹ ํ€ด์ฆˆ 3๊ฐœ, ๋‹ค์Œ ์‹ค์Šต 1๊ฐœ๋ฅผ ํ•œ๊ตญ์–ด๋กœ ์ •๋ฆฌํ•ด์ค˜.

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

  • Unit 1 ํ•ต์‹ฌ ๊ฐœ๋… 4๊ฐœ
  • ๊ฐ๊ด€์‹ ํ€ด์ฆˆ 3๊ฐœ
  • ์ •๋‹ต/ํ•ด์„ค
  • ๋‹ค์Œ ์‹ค์Šต 1๊ฐœ
  • ์‹คํ–‰ ๋ช…๋ น๊ณผ ์„ฑ๊ณต ํŒ์ •

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

  • ๊ณต์‹ ์ฝ”์Šค ์†Œ๊ฐœ๋Š” ์ด๋ก  + ํ•ธ์ฆˆ์˜จ + ๊ณผ์ œ ์กฐํ•ฉ์œผ๋กœ ํ•™์Šตํ•˜๋„๋ก ์•ˆ๋‚ดํ•œ๋‹ค.
  • Unit 1์€ ์—์ด์ „ํŠธ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ์ฒซ ์—์ด์ „ํŠธ ์‹ค์Šต์„ ํ•ต์‹ฌ ์‚ฐ์ถœ๋ฌผ๋กœ ๋‘”๋‹ค.
  • smolagents์™€ Unit 2 smolagents ์†Œ๊ฐœ๋Š” CodeAgent, ToolCallingAgent, Tools๋ฅผ ์‹ค์ œ๋กœ ๋‹ค๋ค„ ๋ณด๋ฉฐ ์ดํ•ดํ•˜๋ผ๊ณ  ๊ถŒํ•œ๋‹ค.

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

์ „์ฒด ๊ตฌ์กฐ

flowchart TD
    U[์‚ฌ์šฉ์ž ๋ณต์Šต ์š”์ฒญ] --> A[CodeAgent]
    A --> T1[get_course_overview]
    A --> T2[get_unit1_intro]
    A --> T3[get_smolagents_docs]
    A --> T4[get_smolagents_unit]
    T1 --> S[๊ณต์‹ ๊ทผ๊ฑฐ ์ˆ˜์ง‘]
    T2 --> S
    T3 --> S
    T4 --> S
    S --> O[ํ•ต์‹ฌ ์š”์•ฝ + ํ€ด์ฆˆ 3๊ฐœ + ๋‹ค์Œ ์‹ค์Šต 1๊ฐœ]

์ค€๋น„๋ฌผ

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

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

์‹คํ–‰ ๋ช…๋ น

mkdir -p ~/hf-agents-quiz-agent
cd ~/hf-agents-quiz-agent

์„ฑ๊ณต ํŒ์ •

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

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

unit1_quiz_agent.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",
    "docs": "https://huggingface.co/docs/smolagents/index",
    "smol_unit": "https://huggingface.co/learn/agents-course/unit2/smolagents/introduction",
}
 
 
def fetch_text(url: str) -> str:
    response = requests.get(url, timeout=30)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, "html.parser")
 
    chunks = []
    title = soup.title.get_text(" ", strip=True) if soup.title else url
    chunks.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) >= 24:
            chunks.append(text)
        if len(chunks) >= 40:
            break
 
    return "\n".join(chunks)
 
 
@tool
def get_course_overview() -> str:
    """Return a compact summary of the HF Agents Course overview page."""
    return fetch_text(PAGES["course"])
 
 
@tool
def get_unit1_intro() -> str:
    """Return a compact summary of the official Unit 1 introduction page."""
    return fetch_text(PAGES["unit1"])
 
 
@tool
def get_smolagents_docs() -> str:
    """Return a compact summary of the smolagents docs index."""
    return fetch_text(PAGES["docs"])
 
 
@tool
def get_smolagents_unit() -> str:
    """Return a compact summary of the course module introducing smolagents."""
    return fetch_text(PAGES["smol_unit"])
 
 
model = InferenceClientModel()
agent = CodeAgent(
    tools=[
        get_course_overview,
        get_unit1_intro,
        get_smolagents_docs,
        get_smolagents_unit,
    ],
    model=model,
    max_steps=6,
)
 
prompt = """
๊ณต์‹ ํŽ˜์ด์ง€ ๋„๊ตฌ ๊ฒฐ๊ณผ๋งŒ ์‚ฌ์šฉํ•ด์„œ ํ•œ๊ตญ์–ด๋กœ ๋‹ตํ•ด์ค˜.
๋ชฉํ‘œ: HF Agents Course Unit 1 ๋ณต์Šต์šฉ ์š”์•ฝ๊ณผ ํ€ด์ฆˆ๋ฅผ ๋งŒ๋“ ๋‹ค.
๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ํ˜•์‹์„ ์ง€์ผœ์ค˜.
1) ํ•ต์‹ฌ ๊ฐœ๋… 4๊ฐœ
2) ๊ฐ๊ด€์‹ ํ€ด์ฆˆ 3๊ฐœ
3) ์ •๋‹ต๊ณผ ํ•œ ์ค„ ํ•ด์„ค
4) ๋‹ค์Œ ์‹ค์Šต 1๊ฐœ
5) ์‹คํ–‰ ๋ช…๋ น
6) ์„ฑ๊ณต ํŒ์ • ๊ธฐ์ค€
๊ณต์‹ ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ํ™•์ธ๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ์€ ๋ฐ˜๋“œ์‹œ '์ถ”์ •'์ด๋ผ๊ณ  ํ‘œ์‹œํ•ด์ค˜.
"""
 
result = agent.run(prompt)
print(result)

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

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

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

์‹คํ–‰ ๋ช…๋ น

source .venv/bin/activate
python unit1_quiz_agent.py

์„ฑ๊ณต ํŒ์ •

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

  • ์˜ˆ์™ธ ์—†์ด ์‹คํ–‰ ์™„๋ฃŒ
  • ํ•ต์‹ฌ ๊ฐœ๋… 4๊ฐœ ์„น์…˜ ์กด์žฌ
  • ๊ฐ๊ด€์‹ ํ€ด์ฆˆ 3๊ฐœ ์กด์žฌ
  • ์ •๋‹ต๊ณผ ํ•œ ์ค„ ํ•ด์„ค ์กด์žฌ
  • ๋‹ค์Œ ์‹ค์Šต 1๊ฐœ ์กด์žฌ
  • ํ™•์ธ ๋ถˆ๊ฐ€ ๋‚ด์šฉ์€ ์ถ”์ •์œผ๋กœ ํ‘œ๊ธฐ

Step 5) ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹ค์Šต ์ค‘์‹ฌ์œผ๋กœ ๋ฐ”๊ฟ” ์žฌ์‹คํ–‰

์ž…๋ ฅ ๋ณ€๊ฒฝ

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

๋‚˜๋Š” ๊ธด ์„ค๋ช…๋ณด๋‹ค ๋ฐ”๋กœ ์†์„ ์›€์ง์ด๊ณ  ์‹ถ๋‹ค.
Unit 1 ํ•ต์‹ฌ์„ 10๋ถ„ ๋ณต์Šต์šฉ์œผ๋กœ ์••์ถ•ํ•ด์„œ,
ํ•ต์‹ฌ ๊ฐœ๋… 3๊ฐœ์™€ ํ€ด์ฆˆ 2๊ฐœ, ๋‹ค์Œ ์‹คํ–‰ ๋ช…๋ น 1์„ธํŠธ๋ฅผ ์ •๋ฆฌํ•ด์ค˜.

์‹คํ–‰ ๋ช…๋ น

python unit1_quiz_agent.py

์„ฑ๊ณต ํŒ์ •

  • Unit 1 ๊ด€๋ จ ํ•ต์‹ฌ ์š”์•ฝ์ด ์••์ถ•๋˜์–ด ๋‚˜์˜จ๋‹ค.
  • ํ€ด์ฆˆ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ ๋˜๋Š” 3๊ฐœ ์ˆ˜์ค€์œผ๋กœ ์ค„์–ด๋“ ๋‹ค.
  • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์ด ์ตœ์†Œ 1์„ธํŠธ ์ œ์‹œ๋œ๋‹ค.

Step 6) ๊ฒฐ๊ณผ๋ฅผ Markdown ํŒŒ์ผ๋กœ ์ €์žฅ

์‹คํ–‰ ๋ช…๋ น

python unit1_quiz_agent.py > latest-unit1-quiz.md
sed -n '1,120p' latest-unit1-quiz.md

์„ฑ๊ณต ํŒ์ •

  • latest-unit1-quiz.md๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • ์•ž๋ถ€๋ถ„์— ์š”์•ฝ, ํ€ด์ฆˆ, ์ •๋‹ต, ๋‹ค์Œ ์‹ค์Šต์ด ๋ณด์ธ๋‹ค.

์ด ์‹ค์Šต์—์„œ ์ดํ•ดํ•ด์•ผ ํ•  ํ•ต์‹ฌ

1) Unit 1์€ ์—์ด์ „ํŠธ ์‚ฌ๊ณ  ๋ฃจํ”„์˜ ์ž…๊ตฌ๋‹ค

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

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

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

3) ๊ณต์‹ ์ž๋ฃŒ ๊ธฐ๋ฐ˜ ๋„๊ตฌํ™”๊ฐ€ ํ’ˆ์งˆ์„ ๋†’์ธ๋‹ค

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

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

  • ์ž‘์—… ํด๋” ์ƒ์„ฑ ์™„๋ฃŒ
  • ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™” ์™„๋ฃŒ
  • smolagents, requests, beautifulsoup4 ์„ค์น˜ ์™„๋ฃŒ
  • unit1_quiz_agent.py ์ €์žฅ ์™„๋ฃŒ
  • ์ฒซ ์‹คํ–‰ ์„ฑ๊ณต
  • ํ”„๋กฌํ”„ํŠธ ๋ณ€๊ฒฝ ํ›„ ์žฌ์‹คํ–‰ ์„ฑ๊ณต
  • Markdown ์ €์žฅ ์„ฑ๊ณต

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

1) ModuleNotFoundError: No module named 'smolagents'

์›์ธ:

  • ๊ฐ€์ƒํ™˜๊ฒฝ ๋น„ํ™œ์„ฑ ์ƒํƒœ
  • ๋‹ค๋ฅธ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์‚ฌ์šฉ

ํ•ด๊ฒฐ:

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

2) 401 Unauthorized ๋˜๋Š” Inference ์ธ์ฆ ์˜ค๋ฅ˜

์›์ธ:

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

ํ•ด๊ฒฐ:

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

3) requests.exceptions.ReadTimeout

์›์ธ:

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

ํ•ด๊ฒฐ:

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

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

์›์ธ:

  • ํ”„๋กฌํ”„ํŠธ ์ œ์•ฝ์ด ์•ฝํ•จ
  • ๋„๊ตฌ ์„ค๋ช…์ด ์ถ”์ƒ์ ์ž„

ํ•ด๊ฒฐ:

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

5) HTML ์ถ”์ถœ ๊ฒฐ๊ณผ๊ฐ€ ๋“ค์ญ‰๋‚ ์ญ‰ํ•  ๋•Œ

์›์ธ:

  • ํŽ˜์ด์ง€๋งˆ๋‹ค ๋ณธ๋ฌธ DOM ๊ตฌ์กฐ ์ฐจ์ด

ํ•ด๊ฒฐ:

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

6) ํ€ด์ฆˆ ๋‚œ์ด๋„๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋†’๊ฑฐ๋‚˜ ๋‚ฎ์„ ๋•Œ

์›์ธ:

  • ํ”„๋กฌํ”„ํŠธ์— ๋Œ€์ƒ ๋…์ž ์ˆ˜์ค€์ด ์—†์Œ

ํ•ด๊ฒฐ:

ํ”„๋กฌํ”„ํŠธ์— ์•„๋ž˜ ๋ฌธ๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

๋Œ€์ƒ์€ HF Agents Course๋ฅผ ์ฒ˜์Œ ๋ณด๋Š” ์ž…๋ฌธ์ž๋‹ค.
์ „๋ฌธ ์šฉ์–ด๋Š” ํ•œ ์ค„ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ์จ์ค˜.

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

  • Unit 2์šฉ์œผ๋กœ CodeAgent์™€ ToolCallingAgent ๋น„๊ต ํ€ด์ฆˆ ์ƒ์„ฑ๊ธฐ ๋งŒ๋“ค๊ธฐ
  • ๊ฒฐ๊ณผ๋ฅผ JSON์œผ๋กœ ์ €์žฅํ•ด ์›น UI๋‚˜ ๋…ธ์…˜์œผ๋กœ ๋„˜๊ธฐ๊ธฐ
  • ์‚ฌ์šฉ์ž์˜ ๊ณต๋ถ€ ์‹œ๊ฐ„(10๋ถ„/20๋ถ„/45๋ถ„)์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ€ด์ฆˆ ๋‚œ์ด๋„ ๋‚ด๊ธฐ
  • save_report ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ž๋™ ์•„์นด์ด๋น™ํ•˜๊ธฐ

๋งˆ๋ฌด๋ฆฌ

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


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

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