๐ค 04. HF Agents Course ๋ณธํธ 3 - CodeAgent์ ์ปค์คํ ํด ์ฐ๊ฒฐํ๊ธฐ
์ด๋ฒ ํธ ๋ชฉํ๋ smolagents์ CodeAgent์ ์ง์ ๋ง๋ ํด์ ์ฐ๊ฒฐํด์, โ์ง๋ฌธ โ ๋๊ตฌ ์คํ โ ์ต์ข
๋ต๋ณโ ํ๋ฆ์ ์ฌํํ๋ ๊ฒ์
๋๋ค.
flowchart LR U[์ฌ์ฉ์ ์ง๋ฌธ] --> A[CodeAgent] A --> T1[WebSearchTool] A --> T2[CustomCalcTool] T1 --> A T2 --> A A --> R[์ต์ข ์๋ต + ๊ทผ๊ฑฐ]
1) ์ค๋น
๋๊ตฌ
- Python 3.10+
- ํฐ๋ฏธ๋
- Hugging Face ๊ณ์ (์ ํ: ๋ชจ๋ธ ์ ๊ทผ์ฉ)
์ ๋ ฅ
- ์ค์ต ํด๋:
hf-agents-ep04 - ์ง๋ฌธ ์์:
"์์ธ๊ณผ ๋์ฟ์ ํ์ฌ ์์ฐจ๋ฅผ ๊ณ์ฐํด์ค"
์คํ ๋ช ๋ น
mkdir -p hf-agents-ep04 && cd hf-agents-ep04
python -m venv .venv
source .venv/bin/activate
pip install -U smolagents duckduckgo-search์ฑ๊ณต ํ์
pip์๋ฌ ์์ด ์ค์น ์๋ฃ- ๊ฐ์ํ๊ฒฝ ํ์ฑํ ์ํ์์
python -c "import smolagents; print('ok')"๊ฐok์ถ๋ ฅ
2) ์ต์ ์คํ ์ฝ๋
main.py:
from smolagents import CodeAgent, DuckDuckGoSearchTool, tool
@tool
def time_diff_hours(city_a: str, city_b: str, utc_offset_a: int, utc_offset_b: int) -> str:
"""๋ ๋์์ UTC ์คํ์
์ผ๋ก ์์ฐจ(์๊ฐ)๋ฅผ ๊ณ์ฐํ๋ค."""
diff = utc_offset_a - utc_offset_b
return f"{city_a} - {city_b} ์์ฐจ: {diff}์๊ฐ"
agent = CodeAgent(
tools=[DuckDuckGoSearchTool(), time_diff_hours],
model=None, # ๋ก์ปฌ/๊ธฐ๋ณธ ์ค์ ๊ธฐ๋ฐ. ํ๊ฒฝ์ ๋ง๊ฒ ๊ต์ฒด ๊ฐ๋ฅ
)
question = "์์ธ(+9)๊ณผ ๋์ฟ(+9)์ ์์ฐจ๋ฅผ ๊ณ์ฐํ๊ณ , ํ์ธ ๊ทผ๊ฑฐ๋ฅผ ํ ์ค๋ก ๋ง๋ถ์ฌ์ค"
result = agent.run(question)
print(result)์คํ ๋ช ๋ น
python main.py์ฑ๊ณต ํ์
- ์์ด์ ํธ๊ฐ
time_diff_hours๋ฅผ ํธ์ถํด ์์ฐจ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ - ํ์ ์ ๊ฒ์ ํด์ ์ฌ์ฉํ ๊ทผ๊ฑฐ ๋ฌธ์ฅ์ด ํจ๊ป ์ถ๋ ฅ
3) ์ด๋ณด์ ํฌ์ธํธ
@tool๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๋ถ์ด๋ฉด ์ผ๋ฐ ํจ์๋ฅผ ์์ด์ ํธ ํด๋ก ๋ฑ๋กํ ์ ์์ต๋๋ค.- ํด ์ค๋ช (๋ ์คํธ๋ง)์ ์งง๊ณ ๋ช ํํ ์๋ก ํธ์ถ ํ์ง์ด ์ข์์ง๋๋ค.
- ์ฒ์์๋ ์ ๋ ฅ/์ถ๋ ฅ์ด ๋จ์ํ ํด 1~2๊ฐ๋ก ์์ํ์ธ์.
4) ์ค๋ฌด ์ ์ฉ ํฌ์ธํธ
- ์ฌ๋ด API ํธ์ถ ํจ์๋ฅผ
@tool๋ก ๊ฐ์ธ๋ฉด โ์์ฐ์ด ์ง์ ์ธํฐํ์ด์คโ๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. - ํด ๊ฒฐ๊ณผ๋ฅผ ๋ก๊ทธ๋ก ๋จ๊ธฐ๋ฉด(์ ๋ ฅ, ์ถ๋ ฅ, ์คํ์๊ฐ) ํ์ง ๊ฒ์ฆ๊ณผ ์ฅ์ ๋์์ด ์ฌ์์ง๋๋ค.
- ์ด์ ์ ์๋ โ์คํจ ์๋ต ํฌ๋งทโ์ ๊ณ ์ ํด๋๋ฉด ์๋ํ ํ์ดํ๋ผ์ธ ์ฐ๊ฒฐ์ด ์์ ์ ์ ๋๋ค.
5) ๋ค์ ํธ ์๊ณ
๋ค์ ํธ์์๋ **ํด ์คํจ ์ฌ์๋ + ๊ฐ๋๋ ์ผ(ํ์ฉ ๋๋ฉ์ธ/๋ช ๋ น ์ ํ)**์ ๋ถ์ฌ ์ด์ ์์ ์ฑ์ ๋์ด๊ฒ ์ต๋๋ค.