๐ค 55. HF Agents Course ์ค์ตํธ 1 - ์ฝ์ค ์ปค๋ฆฌํ๋ผ ๋ธ๋ฆฌํ ์์ด์ ํธ ๋ง๋ค๊ธฐ
๋ชฉํ: HF Agents Course์ ์ฝ์ค ์ ์ฒด ๊ตฌ์กฐ, Unit 1์ ๊ธฐ์ด ๊ฐ๋ , smolagents์ ๋น ๋ฅธ ์์ ๋ฐฉ์์ ํ ๋ฒ์ ์ฝ์ด, ํ์ต์์๊ฒ ์ค๋ ์์ํ ์์์ ๋ค์ ์ค์ต์ ์ ์ํ๋ ์ปค๋ฆฌํ๋ผ ๋ธ๋ฆฌํ ์์ด์ ํธ๋ฅผ ๋ง๋ ๋ค.
Hugging Face Agents Course ์ ์ฅ์์ ๊ณต์ ํ์ต ํ์ด์ง๋ ์ฝ์ค๋ฅผ ๊ธฐ์ด(Unit 1) โ ํ๋ ์์ํฌ(Unit 2) โ ์ ์ค์ผ์ด์ค(Unit 3) โ ์ต์ข
๊ณผ์ (Unit 4) ํ๋ฆ์ผ๋ก ์๋ดํ๋ค. smolagents ๋ฌธ์๋ ์ด๋ฐ ํ์ต ์คํ์ ์ ์ ์ฝ๋๋ก ๋น ๋ฅด๊ฒ ์ฌํํ ์ ์๊ฒ CodeAgent, ToolCallingAgent, ๊ธฐ๋ณธ ๋๊ตฌ ํจํด์ ์ ๊ณตํ๋ค. ์ด๋ฒ ๊ธ์ ๊ทธ ๋์ ์ฐ๊ฒฐํด, ๊ณต์ ์๋ฃ๋ฅผ ์ฝ๊ณ ์ค๋์ ํ์ต ์ฐ์ ์์๋ฅผ ์ ๋ฆฌํ๋ ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ์ง์ ๋ง๋ ๋ค.
์ด๋ฒ์ ๋ง๋ค ๊ฒฐ๊ณผ๋ฌผ
์ ๋ ฅ ์์:
HF Agents Course๋ฅผ ์ด์ ์์ํ๋ค.
์ค๋ 45๋ถ ์์ ์ด๋๋ถํฐ ๋ด์ผ ํ๋์ง ํ๊ตญ์ด๋ก ์ ๋ฆฌํด์ค.
ํ์ ์ ๋, ๋ฐ๋ก ํด๋ณผ ์ค์ต, ๋์ค์ ๋ณผ ์ฌํ ์ฃผ์ ๋ฅผ ๋๋ ์ค.์ถ๋ ฅ ๋ชฉํ:
- ํ์ ์ ๋ 3๊ฐ
- ์ค๋ ๋ฐ๋ก ํ ์ค์ต 2๊ฐ
- ๋์ค์ ๋ณผ ์ฌํ ์ฃผ์ 2๊ฐ
- ์คํ ๋ช ๋ น
- ์ฑ๊ณต ํ์ ๊ธฐ์ค
์ ์ด ์ค์ต์ด ์ฝ์ค ์ทจ์ง์ ๋ง๋๊ฐ
- ๊ณต์ ์ ์ฅ์๋ ์ฝ์ค๋ฅผ ๋จ๊ณํ ํ์ต ์ฌ์ ์ผ๋ก ์๊ฐํ๋ค.
- ๊ณต์ ํ์ต ํ์ด์ง๋ ์ด๋ก , ํธ์ฆ์จ, ๊ณผ์ , ์ฑ๋ฆฐ์ง ๊ตฌ์กฐ๋ฅผ ๊ฐ์กฐํ๋ค.
smolagents๊ณต์ ๋ฌธ์๋ ๊ฐ๋จํ ๋๊ตฌ ์กฐํฉ์ผ๋ก ์์ด์ ํธ๋ฅผ ์์ํ๋ ๋ฐฉ์์ ์ ์ํ๋ค.
์ฆ ์ด๋ฒ ์ค์ต์ ๋จ์ ์์ฝ์ด ์๋๋ผ, ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ๋ ๋๊ตฌ + ๊ฒฐ๊ณผ๋ฅผ ํ๋ ์ง์นจ์ผ๋ก ์ฌ๊ตฌ์ฑํ๋ ์์ด์ ํธ ๋ฃจํ๋ฅผ ์ตํ๋ ๋ฐ ์ด์ ์ด ์๋ค.
์ ์ฒด ๊ตฌ์กฐ
flowchart TD U[์ฌ์ฉ์ ์ง๋ฌธ] --> A[CodeAgent] A --> T1[get_course_repo] A --> T2[get_course_overview] A --> T3[get_smolagents_intro] T1 --> S[๊ณต์ ๊ทผ๊ฑฐ ์์ง] T2 --> S T3 --> S S --> R[ํ์ ์ ๋/์ค๋์ ์ค์ต/์ฌํ ์ฃผ์ ๋ธ๋ฆฌํ]
์ค๋น๋ฌผ
- Python 3.10+
- ํฐ๋ฏธ๋
- ์ธํฐ๋ท ์ฐ๊ฒฐ
- Hugging Face ๊ณ์ ๊ถ์ฅ
- ํ์ ์
HF_TOKENํ๊ฒฝ๋ณ์
Step 1) ์์ ํด๋ ์ค๋น
๋๊ตฌ
- ํฐ๋ฏธ๋
์ ๋ ฅ
mkdir -p ~/hf-agents-course-briefing
cd ~/hf-agents-course-briefing์คํ ๋ช ๋ น
pwd
ls -la์ฑ๊ณต ํ์
- ํ์ฌ ๊ฒฝ๋ก ๋์ด
hf-agents-course-briefing์ด๋ฉด ํต๊ณผ. - ๋น ์์ ํด๋๊ฐ ๋ณด์ด๋ฉด ํต๊ณผ.
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) ์์ด์ ํธ ์ฝ๋ ์์ฑ
ํ์ผ๋ช
: course_briefing_agent.py
import requests
from bs4 import BeautifulSoup
from smolagents import CodeAgent, InferenceClientModel, tool
PAGES = {
"repo": "https://github.com/huggingface/agents-course",
"course": "https://huggingface.co/learn/agents-course",
"docs": "https://huggingface.co/docs/smolagents/index",
}
def fetch_compact_text(url: str) -> str:
response = requests.get(url, timeout=30)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
blocks = []
title = soup.title.get_text(" ", strip=True) if soup.title else url
blocks.append(f"TITLE: {title}")
for tag in soup.select("h1, h2, h3, p, li"):
text = tag.get_text(" ", strip=True)
if len(text) >= 30:
blocks.append(text)
if len(blocks) >= 50:
break
return "\n".join(blocks)
@tool
def get_course_repo() -> str:
"""Return a compact summary of the Hugging Face Agents Course repository page."""
return fetch_compact_text(PAGES["repo"])
@tool
def get_course_overview() -> str:
"""Return a compact summary of the Hugging Face Agents Course overview page."""
return fetch_compact_text(PAGES["course"])
@tool
def get_smolagents_intro() -> str:
"""Return a compact summary of the smolagents documentation homepage."""
return fetch_compact_text(PAGES["docs"])
model = InferenceClientModel()
agent = CodeAgent(
tools=[get_course_repo, get_course_overview, get_smolagents_intro],
model=model,
max_steps=6,
)
prompt = """
๊ณต์ ๋๊ตฌ ๊ฒฐ๊ณผ๋ง ๊ทผ๊ฑฐ๋ก ํ๊ตญ์ด๋ก ๋ตํด์ค.
์๋ ํ์์ ๋ฐ๋์ ์ง์ผ์ค.
1) ํ์ ์ ๋ 3๊ฐ
2) ์ค๋ ๋ฐ๋ก ํ ์ค์ต 2๊ฐ
3) ๋์ค์ ๋ณผ ์ฌํ ์ฃผ์ 2๊ฐ
4) ์ ์ด ์์๊ฐ ์ข์์ง 3๋ฌธ์ฅ
5) ์คํ ๋ช
๋ น 1์ธํธ
6) ์ฑ๊ณต ํ์ ๊ธฐ์ค 3๊ฐ
๊ณต์ ์๋ฃ์์ ์ง์ ํ์ธ๋์ง ์๋ ๋ด์ฉ์ '์ถ์ '์ด๋ผ๊ณ ํ์ํด.
์ฌ์ฉ์ ์ํฉ: HF Agents Course๋ฅผ ์ฒ์ ์์ํ๋ฉฐ ์ค๋ 45๋ถ ํฌ์ ๊ฐ๋ฅ.
"""
result = agent.run(prompt)
print(result)Step 4) ์ฒซ ์คํ
๋๊ตฌ
- ํฐ๋ฏธ๋
์คํ ๋ช ๋ น
source .venv/bin/activate
python course_briefing_agent.py์ฑ๊ณต ํ์
์๋ 6๊ฐ๋ฅผ ๋ง์กฑํ๋ฉด ์ฑ๊ณต์ด๋ค.
- ์์ธ ์์ด ์คํ ์๋ฃ
ํ์ ์ ๋ 3๊ฐ์น์ ์กด์ฌ์ค๋ ๋ฐ๋ก ํ ์ค์ต 2๊ฐ์น์ ์กด์ฌ๋์ค์ ๋ณผ ์ฌํ ์ฃผ์ 2๊ฐ์น์ ์กด์ฌ- ์คํ ๋ช ๋ น 1์ธํธ๊ฐ ํฌํจ๋จ
- ๋ถํ์คํ ๋ด์ฉ์
์ถ์ ์ผ๋ก ํ์๋จ
Step 5) ๋ค๋ฅธ ์ฌ์ฉ์ ์ํฉ์ผ๋ก ์ฌ์คํ
์ ๋ ฅ ๋ณ๊ฒฝ
prompt์ ๋ง์ง๋ง ์ฌ์ฉ์ ์ํฉ์ ์๋์ฒ๋ผ ๋ฐ๊พผ๋ค.
์ฌ์ฉ์ ์ํฉ: Unit 1์ ์ด๋ฏธ ์ฝ์๊ณ , ์ด๋ฒ ์ฃผ๋ง์ Unit 2 ํ๋ ์์ํฌ ๋น๊ต๋ง ๋น ๋ฅด๊ฒ ํ๊ณ ์ถ๋ค. ์ค๋ 30๋ถ ํฌ์ ๊ฐ๋ฅ.์คํ ๋ช ๋ น
python course_briefing_agent.py์ฑ๊ณต ํ์
- Unit 2 ๋๋ ํ๋ ์์ํฌ ํ์ต์ด ์ฐ์ ์์๋ก ์ฌ๋ผ์ค๋ฉด ์ฑ๊ณต.
- ์ค๋ ํ ์ผ๊ณผ ๋์ค์ ๋ณผ ์ฌํ ์ฃผ์ ๊ฐ ๋ถ๋ฆฌ๋์ด ๋์ค๋ฉด ์ฑ๊ณต.
Step 6) ๊ฒฐ๊ณผ๋ฅผ Markdown ํ์ผ๋ก ์ ์ฅ
์คํ ๋ช ๋ น
python course_briefing_agent.py > latest-course-briefing.md
sed -n '1,120p' latest-course-briefing.md์ฑ๊ณต ํ์
latest-course-briefing.mdํ์ผ์ด ์์ฑ๋๋ค.- ์๋ถ๋ถ์ ํ์ ์ ๋, ์ค๋ ์ค์ต, ์ฌํ ์ฃผ์ ๊ฐ ๋ณด์ธ๋ค.
์ฝ๋ ์ดํด ํฌ์ธํธ
1) ๊ณต์ ํ์ด์ง๋ฅผ ๋จผ์ ๋๊ตฌํํ๋ค
๋ฌดํฑ๋๊ณ ๋ต๋ณ์ ์์ฑํ๊ธฐ๋ณด๋ค, ์ ์ฅ์/์ฝ์ค ์๊ฐ/docs๋ฅผ ๋จผ์ ์ฝ๊ฒ ํ๋ฉด ๊ทผ๊ฑฐ๊ฐ ๋ ๋ถ๋ช ํด์ง๋ค.
2) CodeAgent๊ฐ ์ ๋ฆฌ ์ญํ ์ ๋งก๋๋ค
๋๊ตฌ๊ฐ ์๋ฌธ์ ์์งํ๊ณ , ์์ด์ ํธ๋ ๊ทธ ๊ทผ๊ฑฐ๋ฅผ ์ฌ์ฉ์ ์ํฉ์ ๋ง๊ฒ ์์ถํ๋ค.
3) ์ถ๋ ฅ ํ์์ ๊ฐํ๊ฒ ๊ณ ์ ํ๋ค
์ ๋ฌธ์ฉ ํธ์ฆ์จ์์๋ ์์ ๋๋ณด๋ค ์ฌํ์ฑ์ด ๋ ์ค์ํ๋ค. ์น์ ์๋ฅผ ๊ณ ์ ํ๋ฉด ๊ฒฐ๊ณผ ๊ฒ์ฆ์ด ์ฌ์์ง๋ค.
์ค์ ์ฒดํฌ๋ฆฌ์คํธ
- ์์ ํด๋ ์์ฑ ์๋ฃ
- ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํ์ฑํ ์๋ฃ
- ํจํค์ง ์ค์น ์๋ฃ
-
course_briefing_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 ํธ์ถ์ ์ธ์ฆ์ด ํ์ํ ํ๊ฒฝ
ํด๊ฒฐ:
export HF_TOKEN=hf_your_token
python course_briefing_agent.py3) requests.exceptions.ReadTimeout
์์ธ:
- ๋คํธ์ํฌ ์ง์ฐ
- ํ์ด์ง ์๋ต ์๋ ์ ํ
ํด๊ฒฐ:
response = requests.get(url, timeout=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"):- ์ ํ์๋ฅผ ๋ ๊ตฌ์ฒดํํ๋ค.
- ์ค๊ฐ ์ถ์ถ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ๋ก ์ ์ฅํด ์ ๊ฒํ๋ค.
ํ์ฅ ์์ด๋์ด
- Unit 2 ์ ์ฉ ๋ธ๋ฆฌํ ๋ชจ๋ ์ถ๊ฐ
- ๊ฒฐ๊ณผ๋ฅผ JSON์ผ๋ก ์ ์ฅํด ๋์๋ณด๋์ ์ฐ๊ฒฐ
ToolCallingAgent๋ฒ์ ์ผ๋ก ๋ฐ๊ฟ ์ถ๋ ฅ ์ฐจ์ด ๋น๊ต- ์ฌ์ฉ์์ ํ์ต ์๊ฐ์ ๋ฐ๋ผ 10๋ถ/30๋ถ/60๋ถ ํ๋ ์๋ ๋ถ๊ธฐ
๋ง๋ฌด๋ฆฌ
์ด๋ฒ ๋ฏธ๋ ํ๋ก์ ํธ์ ํต์ฌ์ ํ๋ คํ ๊ธฐ๋ฅ์ด ์๋๋ผ ๊ณต์ ์๋ฃ๋ฅผ ์ฝ๋ ๋๊ตฌ๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๋๊ตฌ ์์ ํ์ต ์ฐ์ ์์ ๋ธ๋ฆฌํ์ ์น๋ ๊ตฌ์กฐ๋ฅผ ์ตํ๋ ๋ฐ ์๋ค. ์ด ํจํด์ ์ก์๋๋ฉด ๋ค์์๋ Unit 2 ํ๋ ์์ํฌ ๋น๊ต, Unit 3 ์ ์ค์ผ์ด์ค ์ ๋ฆฌ, ์ต์ข ๊ณผ์ ์ค๋น ๊ฐ์ด๋๊น์ง ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์ฅํ ์ ์๋ค.
์์ฑํ AI ํ์ฉ ๊ณ ์ง
์ด ๋ฌธ์๋ ์์ฑํ AI๋ฅผ ํ์ฉํด ์ด์ ๊ตฌ์กฐ์ ์์ ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค. ๋ค๋ง ๊ทผ๊ฑฐ ์ค๋ช ์ Hugging Face Agents Course ์ ์ฅ์, HF Agents Course ๊ณต์ ํ์ต ํ์ด์ง, smolagents ๊ณต์ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒํ ํ๊ณ , ์ฌํ ๋จ๊ณยท์ ๋ ฅยท์คํ ๋ช ๋ นยท์ฑ๊ณต ํ์ ยทํธ๋ฌ๋ธ์ํ ยท๋งํฌ ๋ฐ์์ ์ฌ๋์ด ํ์ธ ๊ฐ๋ฅํ ํํ๋ก ์ ๋ฆฌํ์ต๋๋ค.