๐ค 45. HF Agents Course ๋ณธํธ 1 - Think-Act-Observe์ Alfred ์ฒซ ์์ด์ ํธ ํ๋ฆ ์ดํดํ๊ธฐ
ํ ์ค ๋ชฉํ: HF Agents Course Unit 1์ ํต์ฌ ๊ฐ๋ ์
Think โ Act โ Observe๋ฃจํ๋ก ์ดํดํ๊ณ ,smolagents๋ก ์ฒซ ์์ด์ ํธ๋ฅผ ์ง์ ์คํํด๋ณธ๋ค.
Hugging Face Agents Course์ Unit 1์ ์์ด์ ํธ๋ฅผ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด ๋ฌด์์ธ์ง๋ถํฐ ์ก์์ค๋๋ค. ํต์ฌ์ ์์ด์ ํธ๊ฐ LLM์ ๋จธ๋ฆฌ์ฒ๋ผ ์ฐ๋, ํ์ํ ๋ ๋๊ตฌ๋ฅผ ํธ์ถํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๋ค์ ํ๋์ ๊ฒฐ์ ํ๋ ์คํ ๋ฃจํ๋ผ๋ ์ ์ ๋๋ค.
๊ณต์ ์ฝ์ค ์๊ฐ์์๋ Unit 1์ ์ด์ ์ ์๋ ๋ค ๊ฐ์ง์ ๋๋ค.
- ์์ด์ ํธ๊ฐ ๋ฌด์์ธ์ง ์ดํดํ๊ธฐ
- LLM์ด ์์ด์ ํธ ์์์ ์ด๋ค ์ญํ ์ ํ๋์ง ์ดํดํ๊ธฐ
- ๋๊ตฌ์ ์ก์ ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์ ๋ณด๊ธฐ
Think โ Act โ Observe์ํฌํ๋ก์ฐ๋ฅผ ๋ฐ๋ผ ์ฒซ ์์ด์ ํธ ๋ง๋ค๊ธฐ
์ค๋ ๊ผญ ์ก์์ผ ํ ๊ทธ๋ฆผ
flowchart LR A[์ฌ์ฉ์ ๋ชฉํ ์ ๋ ฅ] --> B[Think ๋ฌด์์ ํด์ผ ํ๋?] B --> C[Act ๋๊ตฌ ํธ์ถ ๋๋ ์ฝ๋ ์คํ] C --> D[Observe ๊ฒฐ๊ณผ ํ์ธ] D --> E{๋ชฉํ ๋ฌ์ฑ?} E -- ์๋์ค --> B E -- ์ --> F[์ต์ข ๋ต๋ณ ๋ฐํ]
์ด ๋์์ด ์ค์ํ ์ด์ ๋ ์ด๋ณด์๊ฐ ์์ด์ ํธ๋ฅผ ๊ทธ๋ฅ โ๋๋ํ ์ฑ๋ดโ์ผ๋ก ์คํดํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ค์ ๋ก๋ ํ ๋ฒ ๋ตํ๊ณ ๋๋๋ ๋ชจ๋ธ ํธ์ถ๋ณด๋ค ํ๋จ-ํ๋-๊ฒ์ฆ ๋ฃจํ์ ๋ ๊ฐ๊น์ต๋๋ค.
LLM๋ง ์์ ๋์ ์์ด์ ํธ์ผ ๋์ ์ฐจ์ด
์ผ๋ฐ LLM ํธ์ถ
- ์ง๋ฌธ์ ๋ฐ๋๋ค.
- ๋ฐ๋ก ๋ต์ ์์ฑํ๋ค.
- ๊ณ์ฐ, ๊ฒ์, ์ธ๋ถ ์์คํ ๋ฐ์์ด ํ์ํด๋ ๋ด๋ถ ์ถ์ ์ ๊ธฐ๋๊ธฐ ์ฝ๋ค.
์์ด์ ํธ
- ๋ชฉํ๋ฅผ ๋ฐ๋๋ค.
- ์ง๊ธ ๋ฐ๋ก ๋ตํ ์ง, ๋๊ตฌ๋ฅผ ์ธ์ง ํ๋จํ๋ค.
- ๋๊ตฌ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณธ๋ค.
- ๋ถ์กฑํ๋ฉด ํ ๋ฒ ๋ ํ๋ํ๋ค.
- ์ต์ข ๋ต์ ์ ๋ฆฌํ๋ค.
์ค๋ฌด์์๋ ์ด ์ฐจ์ด๊ฐ ๊ทธ๋๋ก ์ ํ๋, ์ฌํ์ฑ, ์๋ํ ๊ฐ๋ฅ์ฑ ์ฐจ์ด๋ก ์ด์ด์ง๋๋ค.
์ smolagents๊ฐ ์
๋ฌธ์ฉ์ผ๋ก ์ข๋
smolagents ๋ฌธ์๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ โ์ ์ ์ฝ๋๋ก ์์ด์ ํธ๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ณ ์คํํ๋ ์คํ์์ค Python ๋ผ์ด๋ธ๋ฌ๋ฆฌโ๋ก ์ค๋ช
ํฉ๋๋ค. ์
๋ฌธ์์๊ฒ ํนํ ์ข์ ์ด์ ๋ ์๋์ ๊ฐ์ต๋๋ค.
- ์ต์ ์ฝ๋๋ก ์ฒซ ์คํ์ด ๊ฐ๋ฅํ๋ค.
CodeAgent์ToolCallingAgent์ ์ฐจ์ด๋ฅผ ๋น๊ตํ๋ฉฐ ๋ฐฐ์ฐ๊ธฐ ์ข๋ค.- ๋๊ตฌ๋ฅผ Python ํจ์์ฒ๋ผ ๋ถ์ผ ์ ์์ด ์ค๋ฌด ํ์ฅ์ด ์ฝ๋ค.
์ด๋ฒ ๊ธ์ ๊ฐ์ฅ ์ดํด๊ฐ ์ฌ์ด CodeAgent ๊ธฐ์ค์ผ๋ก ์งํํฉ๋๋ค.
20๋ถ ์ค์ต: Alfred ๊ฐ๊ฐ์ผ๋ก ์ฒซ ์์ด์ ํธ ์คํํ๊ธฐ
์๋ ์ค์ต์ ์ด๋ณด์๊ฐ ๊ทธ๋๋ก ๋ฐ๋ผํ ์ ์๋๋ก ๋๊ตฌ / ์ ๋ ฅ / ์คํ ๋ช ๋ น / ์ฑ๊ณต ํ์ ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํ์ต๋๋ค.
์ค๋น๋ฌผ
- Python 3.10 ์ด์
- ํฐ๋ฏธ๋
- Hugging Face ๊ณ์
- ์ธํฐ๋ท ์ฐ๊ฒฐ
- ํ์ ์
HF_TOKEN
Step 1) ์ค์ต ํด๋์ ๊ฐ์ํ๊ฒฝ ๋ง๋ค๊ธฐ
๋๊ตฌ
- ํฐ๋ฏธ๋
์ ๋ ฅ
mkdir -p ~/hf-agents-course-unit1
cd ~/hf-agents-course-unit1
python3 -m venv .venv
source .venv/bin/activate์คํ ๋ช ๋ น
python --version
which python์ฑ๊ณต ํ์
- Python ๋ฒ์ ์ด 3.10 ์ด์์ด๋ค.
- ๊ฒฝ๋ก๊ฐ
.venv์๋ Python์ ๊ฐ๋ฆฌํจ๋ค.
Step 2) smolagents ์ค์นํ๊ธฐ
๋๊ตฌ
pip
์ ๋ ฅ
python -m pip install -U pip
pip install 'smolagents[toolkit]'์คํ ๋ช ๋ น
python -c "import smolagents; print(smolagents.__version__)"์ฑ๊ณต ํ์
- ๋ฒ์ ๋ฌธ์์ด์ด ์ถ๋ ฅ๋๋ค.
ModuleNotFoundError์์ด ๋๋๋ค.
Step 3) ๊ฐ์ฅ ์์ ์์ด์ ํธ ๋ง๋ค๊ธฐ
๋๊ตฌ
- ํธ์ง๊ธฐ
์ ๋ ฅ ํ์ผ
alfred_min.py
์ ๋ ฅ ๋ด์ฉ
from smolagents import CodeAgent, InferenceClientModel
model = InferenceClientModel()
agent = CodeAgent(tools=[], model=model)
result = agent.run("1๋ถํฐ 10๊น์ง ํฉ์ ๊ตฌํ๊ณ ํ ์ค๋ก ์ค๋ช
ํด์ค.")
print(result)์ค๋ช
InferenceClientModel()์ Hugging Face Inference ๊ธฐ๋ฐ ๋ชจ๋ธ ์ฐ๊ฒฐ์ด๋ค.CodeAgent๋ ํ์ํ๋ฉด Python ์ฝ๋ ํํ๋ก ํ๋์ ๋ง๋ ๋ค.- ์ง๊ธ์ ๋๊ตฌ ์์ด๋ ์์ด์ ํธ ์คํ ๋ฃจํ๊ฐ ๋๋์ง๋ถํฐ ํ์ธํ๋ค.
์คํ ๋ช ๋ น
python alfred_min.py์ฑ๊ณต ํ์
- ์คํ์ด ์ ์ ์ข ๋ฃ๋๋ค.
- ์ถ๋ ฅ์
55๋๋ ๋๋ฑํ ์ค๋ช ์ด ํฌํจ๋๋ค.
Step 4) ์ฒซ ๋๊ตฌ ๋ถ์ด๊ธฐ
์ด์ ์์ด์ ํธ๊ฐ ํ๋ํ ์ ์๋ ์์ ํ๋ ๋ฌ์์ค๋ค.
๋๊ตฌ
- ํธ์ง๊ธฐ
์ ๋ ฅ ํ์ผ
alfred_tool.py
์ ๋ ฅ ๋ด์ฉ
from smolagents import CodeAgent, InferenceClientModel, tool
@tool
def get_discounted_price(price: int, discount_percent: int) -> int:
"""Return discounted price.
Args:
price: original price
discount_percent: percentage discount to apply
"""
return price - (price * discount_percent // 100)
model = InferenceClientModel()
agent = CodeAgent(tools=[get_discounted_price], model=model)
result = agent.run(
"์ ๊ฐ 120000์ ์ํ์ 15% ํ ์ธ์ ์ ์ฉํ ์ต์ข
๊ฐ๊ฒฉ์ ๊ณ์ฐํ๊ณ , ํ ์ธ ๊ธ์ก๋ ์งง๊ฒ ์ค๋ช
ํด์ค."
)
print(result)์คํ ๋ช ๋ น
python alfred_tool.py์ฑ๊ณต ํ์
- ์ถ๋ ฅ์ ์ต์ข
๊ฐ๊ฒฉ
102000์ด ํฌํจ๋๋ค. - ํ ์ธ ๊ธ์ก
18000์ ๋ํ ์ค๋ช ์ด ๋ค์ด๊ฐ๋ค. - ๊ฐ์ ์ ๋ ฅ์ผ๋ก ์ฌ์คํํด๋ ๊ฒฐ๊ณผ๊ฐ ํ๋ค๋ฆฌ์ง ์๋๋ค.
Step 5) Think โ Act โ Observe๋ฅผ ๋์ผ๋ก ํด์ํ๊ธฐ
์ ์ค์ต์์ ๋ด๋ถ์ ์ผ๋ก ๊ธฐ๋ํ๋ ํ๋ฆ์ ๋๋ต ์ด๋ ์ต๋๋ค.
- Think: ํ ์ธ ๊ณ์ฐ์ ์ถ์ ํ์ง ๋ง๊ณ ๋๊ตฌ๋ฅผ ์ฐ๋ ๊ฒ ๋ซ๋ค๊ณ ํ๋จ
- Act:
get_discounted_price(120000, 15)ํธ์ถ - Observe: ๊ฒฐ๊ณผ
102000ํ์ธ - Think: ํ ์ธ ๊ธ์ก
18000๋ ํจ๊ป ์ค๋ช ํด์ผ ํจ์ ํ๋จ - Final: ์ฌ์ฉ์์ฉ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌ
์ฌ๊ธฐ์ ์ค์ํ ๊ฑด ์ ๋ต ์ซ์๋ง์ด ์๋๋๋ค. ์์ด์ ํธ๊ฐ ์ธ์ ๋ชจ๋ธ ์ถ๋ก ์ ์ฐ๊ณ , ์ธ์ ๋๊ตฌ๋ฅผ ์ฐ๋์ง ๋ถ๋ฆฌํด์ ์ค๊ณํ ์ ์๋ค๋ ์ ์ ๋๋ค.
์ค๋ฌด ์ ์ฉ ํฌ์ธํธ
1) ๊ฐ๊ฒฉ/์ ์ฐ/์งํ ๊ณ์ฐ ์๋ํ
๊ณ์ฐ์ ํ๋กฌํํธ์๋ง ๋งก๊ธฐ์ง ๋ง๊ณ ํจ์ ๋๊ตฌ๋ก ๋นผ๋ฉด ๊ฒฐ๊ณผ ๊ฒ์ฆ์ด ์ฌ์์ง๋๋ค.
2) ๊ฒ์ํ ์ ๋ฌด ์๋ํ
๊ฒ์ ๋๊ตฌ๋ฅผ ๋ถ์ด๋ฉด ์์ด์ ํธ๊ฐ ์ต์ ๋ฌธ์๋ฅผ ํ์ธํ ๋ค ๋ตํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์ค๋ฌด์์ ์ถ์ฒ๊ฐ ์ค์ํ ๊ฒฝ์ฐ ํนํ ์ ๋ฆฌํฉ๋๋ค.
3) ์ฌ๋ด API ์ฐ๋
์ค๋์ get_discounted_price() ์๋ฆฌ์ ์๋๊ฐ ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
- ์ฃผ๋ฌธ ์กฐํ ํจ์
- CRM ์ ๋ฐ์ดํธ ํจ์
- ์ฌ๋ด ๋ฌธ์ ๊ฒ์ ํจ์
- ๋ฆฌํฌํธ ์ ์ฅ ํจ์
์ฆ, Unit 1์ ๊ฐ๋ ์ ๊ณง๋ฐ๋ก ์ด์ ์๋ํ ์ค๊ณ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ด๋ณด์๊ฐ ์์ฃผ ๋งํ๋ ์ง์
์ธ์ฆ ์ค๋ฅ๊ฐ ๋ ๋
InferenceClientModel() ์ฌ์ฉ ์ ํ๊ฒฝ์ ๋ฐ๋ผ Hugging Face ํ ํฐ์ด ํ์ํ ์ ์์ต๋๋ค.
export HF_TOKEN=hf_your_token
python alfred_min.py๋๊ตฌ ์ค๋ช ์ด ๋ถ์คํ ๋
@tool ํจ์์ docstring๊ณผ ์ธ์ ์ค๋ช
์ด ์งง๊ฑฐ๋ ๋ชจํธํ๋ฉด ์์ด์ ํธ๊ฐ ๋๊ตฌ๋ฅผ ๋ ์์ ์ ์ผ๋ก ์ธ ์ ์์ต๋๋ค. ๋๊ตฌ ์ด๋ฆ, ๋ชฉ์ , ์ธ์ ์๋ฏธ๋ฅผ ๋ถ๋ช
ํ ์ ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ CodeAgent๋ถํฐ ๋ฐฐ์ฐ๋
๊ณต์ smolagents ๊ฐ์ด๋ ๊ธฐ์ค์ผ๋ก CodeAgent๋ ๋๊ตฌ ์กฐํฉ, ๋ฐ๋ณต, ๋ณํ ๊ฐ์ ํํ๋ ฅ์ด ์ข์ต๋๋ค. ๋์ ์ฝ๋ ์คํ ์์ ์ฑ์ ๋ ์ ๊ฒฝ ์จ์ผ ํฉ๋๋ค. ๋ฐ๋๋ก ToolCallingAgent๋ ๊ตฌ์กฐํ๋ ํธ์ถ์ด๋ผ ๋ ์์ ํ๊ณ ์์ธก ๊ฐ๋ฅํ์ง๋ง ๋ณต์กํ ์กฐํฉ์ ๋ ์ ์ฐํฉ๋๋ค.
์ค๋ ์ ๋ฆฌ
HF Agents Course ๋ณธํธ 1ํธ์์ ๊ฐ์ฅ ๋จผ์ ์ตํ์ผ ํ ๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ด ์๋๋๋ค. ์์ด์ ํธ๋ ๋ชฉํ๋ฅผ ๋ฐ๊ณ , ์๊ฐํ๊ณ , ํ๋ํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ฉฐ ๋ฐ๋ณตํ๋ ๊ตฌ์กฐ๋ผ๋ ๊ฐ๊ฐ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ smolagents๋ ๊ทธ ๊ตฌ์กฐ๋ฅผ ์์ฃผ ์งง์ ์ฝ๋๋ก ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ฒซ ํ์ต์ฉ์ผ๋ก ์ ํฉํฉ๋๋ค. ์ค๋ ์ค์ต์ด ์ฌํ๋๋ค๋ฉด, ๋ค์ ๋จ๊ณ์์๋ ๊ฒ์ ๋๊ตฌ๋ ์ธ๋ถ API๋ฅผ ๋ถ์ฌ **โ๋งํ๋ ๋ชจ๋ธโ์์ โ์ผํ๋ ์์ด์ ํธโ**๋ก ๋์ด๊ฐ ์ค๋น๊ฐ ๋ ๊ฒ์
๋๋ค.
๋ค์ ํธ ์ถ์ฒ ์ฃผ์
CodeAgent์ToolCallingAgent์ฐจ์ด- ๊ฒ์ ๋๊ตฌ๋ฅผ ๋ถ์ธ ์ ๋ณด ํ์ํ ์์ด์ ํธ
- ์์ ํ ์ฝ๋ ์คํ๊ณผ sandbox ๊ฐ๋
์์ฑํ AI ํ์ฉ ๊ณ ์ง
์ด ๋ฌธ์๋ ์์ฑํ AI๋ฅผ ํ์ฉํด ์ด์ ๊ตฌ์กฐ์ ์์ ๋ฌธ์ฅ์ ์ ๋ฆฌํ๊ณ , Hugging Face Agents Course GitHub ์ ์ฅ์ยท๊ณต์ ํ์ต ํ์ด์งยทsmolagents ๊ณต์ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ๋์ด ๋จ๊ณ, ๋ช
๋ น, ์ฑ๊ณต ํ์ , ์ค๋ฌด ์ ์ฉ ํฌ์ธํธ๋ฅผ ๊ฒํ ํด ํธ์งํ์ต๋๋ค.