๐Ÿค— 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) ๋‹ค์Œ ํŽธ ์˜ˆ๊ณ 

๋‹ค์Œ ํŽธ์—์„œ๋Š” **ํˆด ์‹คํŒจ ์žฌ์‹œ๋„ + ๊ฐ€๋“œ๋ ˆ์ผ(ํ—ˆ์šฉ ๋„๋ฉ”์ธ/๋ช…๋ น ์ œํ•œ)**์„ ๋ถ™์—ฌ ์šด์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋งํฌ

  1. https://github.com/huggingface/agents-course
  2. https://huggingface.co/learn/agents-course
  3. https://huggingface.co/docs/smolagents