๐ค 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๋น์ค์ ๋์ธ๋ค. - ํ์ํ๋ฉด
READMEraw 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 ๊ณต์ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒํ ํ๊ณ , ์ฌํ ๋จ๊ณยท์คํ ๋ช ๋ นยท์ฑ๊ณต ํ์ ยทํธ๋ฌ๋ธ์ํ ยท๋งํฌ ๋ฐ์์ ์ฌ๋์ด ํ์ธ ๊ฐ๋ฅํ ํํ๋ก ์ ๋ฆฌํ์ต๋๋ค.