How to build AI Agents with smolagents - FULL Course
π§ AI μμ΄μ νΈμ κ°λ κ³Ό ꡬ쑰
AI μμ΄μ νΈλ λ¨μν ν μ€νΈ μμΈ‘κΈ°μΈ κΈ°μ‘΄μ LLM(Large Language Model)κ³Ό λ¬λ¦¬, νκ²½κ³Ό μνΈμμ©νλ©° λͺ©νλ₯Ό λ¬μ±νλ μμ€ν μ λλ€. μμ΄μ νΈλ λ κ°μ§ κ΅¬μ± μμλ‘ μ΄λ£¨μ΄μ§λλ€. **"λΈλ μΈ(Brain)"**μ LLMμΌλ‘ ꡬμ±λλ©° κ³ν μ립과 μμ¬κ²°μ μ λ΄λΉνκ³ , **"λ°λ(Body)"**λ λꡬ(tool)λ₯Ό ν΅ν΄ νκ²½κ³Ό μνΈμμ©ν©λλ€. λΈλ μΈμ νν λΌμ°ν°(router) μν λ μννλ©°, λ€μν λꡬμ APIλ₯Ό ν΅ν΄ μ€ν λ₯λ ₯μ κ°μΆλ€λ μ μμ λ¨μν μΈμ΄λͺ¨λΈλ³΄λ€ λ₯λμ μ λλ€.
π§ μν¬νλ‘μ° vs μ§μ ν μμ΄μ νΈ
νμ¬ μμ₯μμ λλΆλΆμ “AI μμ΄μ νΈ”λ μ¬μ€μ **μμ΄μ ν± μν¬νλ‘μ°(agentic workflow)**λ‘, μ¬μ μ μ μλ νλ¦ λ΄μμ LLMμ΄ μΌλΆ κ²°μ μ λ΄λ¦¬λ ꡬ쑰μ λλ€. μ§μ ν μμ΄μ νΈλ νκ²½ νΌλλ°±μ κΈ°λ°μΌλ‘ μμ¨μ μΌλ‘ κ²½λ‘λ₯Ό κ²°μ νλ©°, μμΈ‘ λΆκ°λ₯ν μν©μ΄λ μ°½μμ μΈ λ¬Έμ ν΄κ²°μ μ ν©ν©λλ€. λ°λ©΄ μν¬νλ‘μ°λ λ°λ³΅μ μ΄κ³ μμΈ‘ κ°λ₯ν μμ μ ν¨κ³Όμ μ λλ€. κ°λ°μλ μν©μ λ°λΌ μ΄ λμ μ νμ μΌλ‘ μ¬μ©ν νμκ° μμ΅λλ€.
π₯ λ©ν° μμ΄μ νΈ μμ€ν κ³Ό νμ λ°©μ
볡μ‘ν μμ μ λ©ν° μμ΄μ νΈ μμ€ν μ ν΅ν΄ μ²λ¦¬ν μ μμ΅λλ€. κ° μμ΄μ νΈλ κ³ μ ν μν , μμ€ν ν둬ννΈ, λꡬ μΈνΈλ₯Ό κ°μ§λ©°, μλ₯Ό λ€μ΄ μ 보 μμ§, λΆμ, μ½λ μμ± λ±μΌλ‘ λΆνλ©λλ€. νμ λ°©μμ λ€μ λ€ κ°μ§λ‘ λλ©λλ€:
- μμν – λ§€λμ μμ΄μ νΈκ° μμ μ λΆν νμ¬ νμ μμ΄μ νΈμκ² ν λΉ
- λ³λ ¬ν – κ° μμ΄μ νΈκ° λμμ λ 립λ μμ μ μν
- μμ°¨ν – νμ΄νλΌμΈμ²λΌ μμλλ‘ μμ
- κ²½μν – λμΌν μμ μ μ¬λ¬ μμ΄μ νΈκ° μν ν μ΅μ κ²°κ³Ό μ ν
π§° smolagentμ ν΅μ¬ κΈ°λ₯
smolagentλ Hugging Faceκ° κ°λ°ν λΌμ΄λΈλ¬λ¦¬λ‘, λ¨μνλ©΄μλ μ μ°ν μμ΄μ νΈ κ΅¬νμ κ°λ₯νκ² ν©λλ€. νΉμ§μ λ€μκ³Ό κ°μ΅λλ€:
- μ½λ κΈ°λ° μ‘μ : μμ΄μ νΈκ° JSON λμ Python μ½λλ‘ νλμ μ μνλ©°, μ΄λ 볡ν©μ μμ μ²λ¦¬μ λꡬ κ²°ν©(composability)μ μ 리ν©λλ€.
- 컀μ€ν λꡬ μμ±: @tool λ°μ½λ μ΄ν°λ₯Ό μ¬μ©ν΄ κ°λ¨ν λꡬ μμ± κ°λ₯
- λꡬ ν΅ν©: μΉ κ²μ, μ½λ μ€ν, PDF λΆμ λ±μ κΈ°λ₯μ ν¬ν¨νλ©° LangChain λ± ν νλ μμν¬ λꡬλ νΈν
- λ€μ€ λͺ¨λΈ μ§μ: Hugging Face, Azure, OPI λ± λ€μν λͺ¨λΈ μ°λ κ°λ₯
π¦οΈ μ€μ : λ μ¨ λΆμ μμ΄μ νΈ λ§λ€κΈ°
κΈ°μ΄ νλ‘μ νΈλ‘ λ μ¨ λ°μ΄ν° λΆμ μμ΄μ νΈλ₯Ό ꡬνν©λλ€. ν΅μ¬ μ μ°¨λ λ€μκ³Ό κ°μ΅λλ€:
- 컀μ€ν λꡬ μμ± – μν λ°μ΄ν°λ₯Ό λ°ννλ get_weather_data ν¨μ μ μ
- μΈλΆ λΌμ΄λΈλ¬λ¦¬ νμ© – μ: μκ°νλ₯Ό μν matplotlib μ¬μ©μ νμ©
- ν둬ννΈ κΈ°λ° μ€ν – λμΏ λ μ¨ λ°μ΄ν°λ₯Ό μμ§, νκ· μ¨λ κ³μ°, κ°μμΌ μ νμΈ, μ°¨νΈλ‘ μκ°ν
μμ΄μ νΈλ λ΄λΆμ μΌλ‘ Python μ½λλ₯Ό μμ±·μ€ννμ¬ λͺ©νλ₯Ό λ¬μ±νλ©°, μ€ν κ³Όμ κ³Ό ν ν° μ¬μ©λμ λ‘κ·Έλ‘ μμΈν νμΈ κ°λ₯ν©λλ€.
π§π» μ¬μ©μ μΈν°νμ΄μ€ λ° κ³΅μ
μμ΄μ νΈλ₯Ό λ μ½κ² μ¬μ©νκ³ κ³΅μ νκΈ° μν΄ λ€μ κΈ°λ₯μ΄ μ 곡λ©λλ€:
- Gradio UI ν΅ν©: ν΄λ¦ ν λ²μΌλ‘ μΉ κΈ°λ° μΈν°νμ΄μ€ κ΅¬μΆ κ°λ₯
- Hugging Face Hub μ°λ: μμ΄μ νΈ λ° λꡬλ₯Ό "μ€νμ΄μ€"λ‘ μ λ‘λνμ¬ λ€λ₯Έ μ¬μ©μμ 곡μ λ° μ¬μ¬μ© κ°λ₯
- μ½λ μ¬μ¬μ©: Hubμμ λ€λ₯Έ μ¬λμ΄ λ§λ μμ΄μ νΈλ λΆλ¬μ νμ© κ°λ₯
π€ κ³ κΈ: λ©ν°μμ΄μ νΈ λ¦¬μμΉ μμ€ν ꡬμΆ
μ€μ κ³Όμ λ‘ μμ₯ λν₯ λΆμ μμ΄μ νΈ νμ ꡬμ±ν©λλ€:
- μΉ μμ΄μ νΈ: μ 보 κ²μ λ° μΉ νμ΄μ§ μ€ν¬λν
- λΆμ μμ΄μ νΈ: κ°μ± λΆμ, ν΅μ¬ μ§ν μΆμΆ λ± μν
- λ§€λμ μμ΄μ νΈ: μ 체 μμ κ³ν μ립 λ° μν λ°°λΆ
μ΄λ¬ν λ©ν° μμ΄μ νΈ κ΅¬μ‘°λ μ ν΅μ νμ΄νλΌμΈλ³΄λ€ λμ μ μ°μ±κ³Ό νμ₯μ±μ μ 곡ν©λλ€. OPI API λͺ¨λΈ μ¬μ© μ API ν€ λ° λͺ¨λΈ μ±λ₯ μ 보λ₯Ό ν΅ν΄ μ ν©ν λͺ¨λΈμ μ ννλ©°, μκ°ν ν¨μλ‘ μ 체 ꡬ쑰λ₯Ό μκ°μ μΌλ‘ νμΈν μ μμ΅λλ€.
π μ΄μ νκ²½ λͺ¨λν°λ§: OpenTelemetryμ Langfuse
μμ΄μ νΈμ μ±λ₯μ λͺ¨λν°λ§νκΈ° μν΄ OpenTelemetry νμ€κ³Ό Langfuse μ€νμμ€ νλ«νΌμ μ¬μ©ν©λλ€. μ΄ μ‘°ν©μ λ€μμ κ°λ₯νκ² ν©λλ€:
- νΈλ μ΄μ€(Trace) λ° μ€ν¬(Span) λ¨μμ μ€ν λΆμ
- μμ΄μ νΈ λ¨κ³λ³ λ‘κ·Έ, ν ν° μ¬μ©λ, μ§μ° μκ° μκ°ν
- λ컀 κΈ°λ° λ‘컬 μλ² λλ ν΄λΌμ°λ μ°λ
μ€ν νλ¦ μ 체λ₯Ό νλμ νμ ν μ μμ΄, μ€μ¬μ© νκ²½μμμ λ¬Έμ μ§λ¨ λ° κ°μ μ λ§€μ° μ μ©ν©λλ€.
β μμ½ λ° λ§λ¬΄λ¦¬
μ΄ κ°μλ LLMμ νκ³λ₯Ό λμ΄ λ₯λμ μ΄κ³ λͺ©μ μ§ν₯μ μΈ AI μμ€ν ꡬνμ μ κ³Όμ μ ν¬κ΄ν©λλ€. μ΄λ‘ λΆν° μ€μ΅κΉμ§ μ κ°λλ©°, λ€μκ³Ό κ°μ μλ ν보λ₯Ό λͺ©νλ‘ ν©λλ€:
- AI μμ΄μ νΈμ ꡬ쑰 λ° λΆνλ νμ λ°©μ μ΄ν΄
- smolagentλ₯Ό νμ©ν 컀μ€ν μμ΄μ νΈ κ°λ° λ° λꡬ μμ±
- μ½λ κΈ°λ° μμ΄μ νΈ μ€κ³ λ° μ΄μ
- λ©ν°μμ΄μ νΈ μμ€ν λ° μ€μκ° λͺ¨λν°λ§ ꡬμΆ
μ§μμ μΌλ‘ νμ΅νκ³ λ€μν νλ μμν¬ λ° μ¬λ‘λ₯Ό νμν¨μΌλ‘μ¨, μ€μ μ 무λ μ νμ AI μμ΄μ νΈλ₯Ό ν¨κ³Όμ μΌλ‘ μ μ©ν μ μλ κΈ°λ°μ λ§λ ¨ν μ μμ΅λλ€.