๐Ÿค— 38. HF Agents Course ๋ณธํŽธ 2 - CodeAgent์— ๊ณ„์‚ฐ๊ธฐ ๋„๊ตฌ ๋ถ™์—ฌ ์•ˆ์ •์„ฑ ๋†’์ด๊ธฐ

๋ชฉํ‘œ: smolagents์˜ CodeAgent์— ์‚ฌ์šฉ์ž ์ •์˜ ๊ณ„์‚ฐ๊ธฐ ๋„๊ตฌ๋ฅผ ์—ฐ๊ฒฐํ•ด, ๋‹จ์ˆœ ์ˆ˜์น˜ ์ž‘์—…์—์„œ ๋‹ต๋ณ€ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๊ธฐ๋ณธ ํŒจํ„ด์„ ์ตํžŒ๋‹ค.

1) ์ด๋ฒˆ ํŽธ์—์„œ ๋ฐฐ์šฐ๋Š” ๊ฒƒ

  • ์—์ด์ „ํŠธ๊ฐ€ โ€œ์ง์ ‘ ๊ณ„์‚ฐโ€ ๋Œ€์‹  โ€œ๋„๊ตฌ ํ˜ธ์ถœโ€์„ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
  • ์ดˆ๋ณด์ž๋„ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ
  • ์‹ค๋ฌด์—์„œ ๊ณ„์‚ฐ/๋ณ€ํ™˜๋ฅ˜ ์—…๋ฌด ์ž๋™ํ™”๋กœ ํ™•์žฅํ•˜๋Š” ํฌ์ธํŠธ

2) ๋™์ž‘ ๊ตฌ์กฐ (Mermaid)

flowchart TD
    U[์‚ฌ์šฉ์ž ์งˆ๋ฌธ] --> A[CodeAgent]
    A --> D{๊ณ„์‚ฐ ํ•„์š”?}
    D -- ์˜ˆ --> T[CalculatorTool ํ˜ธ์ถœ]
    T --> O[๊ณ„์‚ฐ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜]
    O --> A
    D -- ์•„๋‹ˆ์˜ค --> R[์ผ๋ฐ˜ ๋‹ต๋ณ€]
    A --> F[์ตœ์ข… ์ถœ๋ ฅ]

3) ์‹ค์Šต ์ค€๋น„

๋„๊ตฌ

  • Python 3.10+
  • ํ„ฐ๋ฏธ๋„
  • ๊ฐ€์ƒํ™˜๊ฒฝ(venv)

์ž…๋ ฅ(ํ…Œ์ŠคํŠธ ์งˆ๋ฌธ)

  • "17.5% ๋ถ€๊ฐ€์„ธ๋ฅผ ์ ์šฉํ•œ 128000์›์˜ ์ตœ์ข… ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•ด์ค˜"
  • "(24500 * 3) - 15000 ๊ณ„์‚ฐํ•ด์ค˜"

์‹คํ–‰ ๋ช…๋ น

mkdir -p ~/hf-agents-part2 && cd ~/hf-agents-part2
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install "smolagents[toolkit]"

์„ฑ๊ณต ํŒ์ •

  • ์„ค์น˜ ํ›„ ์—๋Ÿฌ ์—†์ด ํ”„๋กฌํ”„ํŠธ ๋ณต๊ท€
  • python -c "import smolagents; print('ok')" ๊ฒฐ๊ณผ๊ฐ€ ok

4) ์ฝ”๋“œ ์ž‘์„ฑ

app.py:

from smolagents import CodeAgent, InferenceClientModel, Tool
 
class CalculatorTool(Tool):
    name = "calculator"
    description = "์‚ฌ์น™์—ฐ์‚ฐ/๊ด„ํ˜ธ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์€ ์ˆ˜์‹ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."
    inputs = {
        "expression": {
            "type": "string",
            "description": "์˜ˆ: (24500 * 3) - 15000"
        }
    }
    output_type = "string"
 
    def forward(self, expression: str):
        allowed = "0123456789+-*/(). %"
        if any(ch not in allowed for ch in expression):
            return "์˜ค๋ฅ˜: ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค."
 
        try:
            result = eval(expression, {"__builtins__": {}}, {})
            return str(result)
        except Exception as e:
            return f"์˜ค๋ฅ˜: {e}"
 
 
model = InferenceClientModel()
agent = CodeAgent(
    tools=[CalculatorTool()],
    model=model,
)
 
queries = [
    "17.5% ๋ถ€๊ฐ€์„ธ๋ฅผ ์ ์šฉํ•œ 128000์›์˜ ์ตœ์ข… ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•ด์ค˜. ํ•„์š”ํ•œ ์‹์„ calculator๋กœ ๊ณ„์‚ฐํ•ด.",
    "(24500 * 3) - 15000 ๊ณ„์‚ฐํ•ด์ค˜. calculator๋ฅผ ์จ์„œ ๊ฒฐ๊ณผ๋งŒ ์•Œ๋ ค์ค˜."
]
 
for q in queries:
    print("\n[์งˆ๋ฌธ]", q)
    print("[๋‹ต๋ณ€]", agent.run(q))

5) ์‹คํ–‰

python app.py

์„ฑ๊ณต ํŒ์ •

  • ์ตœ์†Œ 2๊ฐœ ์งˆ๋ฌธ ๋ชจ๋‘ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
  • ๊ณ„์‚ฐ ์งˆ๋ฌธ์—์„œ ๋„๊ตฌ ํ˜ธ์ถœ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜
  • ์ˆซ์ž ๊ฒฐ๊ณผ๊ฐ€ ์ˆ˜๊ธฐ๋กœ ๊ฒ€์‚ฐํ–ˆ์„ ๋•Œ ์ผ์น˜

6) ์ดˆ๋ณด์ž์šฉ ๋ฌธ์ œํ•ด๊ฒฐ ๊ฐ€์ด๋“œ

  1. ModuleNotFoundError ๋ฐœ์ƒ
    โ†’ ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ์žฌ์‹คํ–‰
  2. HF ๋ชจ๋ธ ํ˜ธ์ถœ ์˜ค๋ฅ˜
    โ†’ ํ•„์š” ์‹œ HF_TOKEN ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
  3. ์ˆ˜์‹ ํŒŒ์‹ฑ ์˜ค๋ฅ˜
    โ†’ ์ˆ˜์‹์—์„œ ํ•œ๊ธ€/์‰ผํ‘œ ์ œ๊ฑฐ ํ›„ ์žฌ์งˆ๋ฌธ

7) ์‹ค๋ฌด ์ ์šฉ ํฌ์ธํŠธ

  • ์ •์‚ฐ ๋ณด์กฐ: ์„ธ์œจ/ํ• ์ธ์œจ ๊ณ„์‚ฐ ์ž๋™ํ™”
  • ์šด์˜ ๋ฆฌํฌํŠธ: ๋ฐ˜๋ณต KPI ๊ณ„์‚ฐ์„ ์—์ด์ „ํŠธ+๋„๊ตฌ๋กœ ํ‘œ์ค€ํ™”
  • ์‹ ๋ขฐ์„ฑ ํ–ฅ์ƒ: โ€œ๋ง๋กœ ๊ณ„์‚ฐโ€๋ณด๋‹ค โ€œ๋„๊ตฌ ๊ณ„์‚ฐโ€์„ ๊ฐ•์ œํ•ด ์˜ค๋ฅ˜ ๊ฐ์†Œ

8) ๋‹ค์Œ ํŽธ ์˜ˆ๊ณ 

๋‹ค์Œ ๋ณธํŽธ์—์„œ๋Š” ๊ฒ€์ƒ‰ ๋„๊ตฌ + ๊ณ„์‚ฐ ๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด, โ€œ๊ทผ๊ฑฐ ์ˆ˜์ง‘ + ๊ณ„์‚ฐ ๊ฒ€์ฆโ€์ด ๊ฐ€๋Šฅํ•œ ์‹ค๋ฌดํ˜• ์—์ด์ „ํŠธ๋กœ ํ™•์žฅํ•œ๋‹ค.


์ƒ์„ฑํ˜• AI ํ™œ์šฉ ๊ณ ์ง€

์ด ๋ฌธ์„œ๋Š” ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ ๊ตฌ์„ฑ๊ณผ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์ž‘์„ฑ์ž๊ฐ€ ์‹ค์Šต ์žฌํ˜„์„ฑ๊ณผ ๋งํฌ/ํ‘œํ˜„์„ ๊ฒ€ํ† ํ•ด ํŽธ์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค.