μ΄λ² νΈμ **βμ§λ¬Έμ λ°μ μΉ κ²μ β ν΅μ¬ 3μ€ μμ½β**κΉμ§ μλμΌλ‘ μ²λ¦¬νλ μ΅μ μμ΄μ νΈλ₯Ό λ§λ λ€.
ν΅μ¬μ 볡μ‘ν νλ μμν¬κ° μλλΌ, μ¬ν κ°λ₯ν μ€ν λ¨κ³μ μ±κ³΅ νμ κΈ°μ€μ λ¨Όμ κ³ μ νλ κ²μ΄λ€.
- μ΄μ νΈ: π€ 14. λ³ΈνΈ 07
- λ€μ μ€μ΅ νμ₯ ν¬μΈνΈ: κ²μ νμ§ νκ°μ
μ λΆμ¬
evalμλν
ν μ€ κ²°λ‘
μ΄λ³΄μλ βμλνλ 1κ° μμ΄μ νΈ + λͺ νν μ±κ³΅νμ βλΆν° μμνλ©΄, μ΄ν λ©ν°μμ΄μ νΈ νμ₯μ΄ ν¨μ¬ μ¬μμ§λ€.
flowchart LR U[μ¬μ©μ μ§λ¬Έ] --> A[CodeAgent] A --> T[WebSearchTool νΈμΆ] T --> R[κ²μ κ²°κ³Ό] R --> S[3μ€ μμ½ μμ±] S --> O[μ΅μ’ μλ΅ + μΆμ²]
μ€μ΅ λͺ©ν
smolagentsκΈ°λ° μ΅μ μΉκ²μ μμ½ μμ΄μ νΈλ₯Ό μ€ννλ€.- μ λ ₯/μΆλ ₯ κ³μ½μ κ³ μ ν΄ μ€ν¨ μμΈμ λΉ λ₯΄κ² μ§λ¨νλ€.
- μ€ν μ±κ³΅ μ¬λΆλ₯Ό λμΌλ‘ νμΈ κ°λ₯ν κΈ°μ€μΌλ‘ νμ νλ€.
μ€λΉλ¬Ό
- λꡬ: Python 3.10+, ν°λ―Έλ, μΈν°λ· μ°κ²°
- μ λ ₯: λͺ¨λΈ API ν€ 1κ° (μ: OpenAI νΈν ν€)
- μμ
ν΄λ μμ:
~/hf-agents-lesson15
μ€λ¬΄ ν: ν μ¨λ³΄λ© λ¬Έμμλ βμ§μ Python λ²μ βκ³Ό βκ²μ¦ν ν¨ν€μ§ λ²μ βμ κ°μ΄ λ¨κΈ°λ©΄ μ¬νλ₯ μ΄ μ¬λΌκ°λ€.
1) νκ²½ μ€λΉ
- λꡬ: ν°λ―Έλ
- μ λ ₯: κ°μνκ²½ + ν¨ν€μ§ μ€μΉ
- μ€νλͺ λ Ή:
mkdir -p ~/hf-agents-lesson15
cd ~/hf-agents-lesson15
python3 -m venv .venv
source .venv/bin/activate
pip install -U smolagents litellm duckduckgo-search- μ±κ³΅νμ :
(.venv)ν둬ννΈ νμpipμ€μΉ μλ¬ μμ
2) νκ²½λ³μ μ€μ
- λꡬ: ν°λ―Έλ
- μ λ ₯: API ν€
- μ€νλͺ λ Ή:
export OPENAI_API_KEY="YOUR_API_KEY"
# νμ μ λͺ¨λΈλͺ
λ λͺ
μ
export MODEL_ID="openai/gpt-4o-mini"- μ±κ³΅νμ :
echo $OPENAI_API_KEY | wc -cκ²°κ³Όκ° 1λ³΄λ€ νΌ
3) μμ΄μ νΈ μ½λ μμ±
- λꡬ: μλν° λλ ν°λ―Έλ
- μ λ ₯: μλ μ½λ
- μ€νλͺ λ Ή:
cat > lesson15_web_summary_agent.py <<'PY'
from __future__ import annotations
import os
from smolagents import CodeAgent, DuckDuckGoSearchTool, LiteLLMModel
def build_agent() -> CodeAgent:
model_id = os.getenv("MODEL_ID", "openai/gpt-4o-mini")
model = LiteLLMModel(model_id=model_id)
tools = [DuckDuckGoSearchTool()]
system_prompt = """
λλ μ€λ¬΄ν 리μμΉ λ³΄μ‘° μμ΄μ νΈλ€.
λ°λμ μλ νμμΌλ‘ λ΅ν΄λΌ.
FINAL:
- summary_1: ...
- summary_2: ...
- summary_3: ...
- sources: [URL1, URL2]
""".strip()
return CodeAgent(
tools=tools,
model=model,
additional_authorized_imports=["json", "re"],
system_prompt=system_prompt,
)
def main() -> None:
question = "2026λ
AI μμ΄μ νΈ λμ
μ μ€μνμ΄ λ¨Όμ μ»λ μ΄μμ μ΄μ 3κ°μ§λ₯Ό μ€λͺ
ν΄μ€"
agent = build_agent()
result = agent.run(question)
print(result)
if __name__ == "__main__":
main()
PY- μ±κ³΅νμ :
lesson15_web_summary_agent.pyνμΌ μμ±- μ½λμ
DuckDuckGoSearchTool,CodeAgentν¬ν¨
4) μ€ν
- λꡬ: Python
- μ λ ₯: μ¬μ©μ μ§λ¬Έ 1κ°(μ½λ λ΄ κΈ°λ³Έκ°)
- μ€νλͺ λ Ή:
python lesson15_web_summary_agent.py- μ±κ³΅νμ :
- μΆλ ₯μ
FINAL:λ¬Έμμ΄ ν¬ν¨ summary_1~3νλͺ© μ‘΄μ¬sourcesμ URL 2κ° μ΄μ ν¬ν¨
- μΆλ ₯μ
5) μ€ν¨ 볡ꡬ(μ΄λ³΄μ νμ)
- λꡬ: ν°λ―Έλ
- μ λ ₯: μλ¬ μ νλ³ μ κ²
- μ€νλͺ λ Ή:
# ν¨ν€μ§ νμΈ
pip show smolagents litellm duckduckgo-search
# ν€ νμΈ
python - <<'PY'
import os
print("OPENAI_API_KEY exists:", bool(os.getenv("OPENAI_API_KEY")))
print("MODEL_ID:", os.getenv("MODEL_ID", "openai/gpt-4o-mini"))
PY- μ±κ³΅νμ :
- λλ½ ν¨ν€μ§/νκ²½λ³μλ₯Ό μ¦μ μλ³ κ°λ₯
μ€λ¬΄ μ μ© ν¬μΈνΈ
- μΆλ ₯ κ³μ½(FINAL λΈλ‘) κ³ μ
β n8n/μ€ν¬λ¦½νΈμμ μμ μ μΌλ‘ νμ± κ°λ₯ - λꡬ 1κ°λ‘ μμ ν νμ₯
β κ²μ 1κ° μμ ν λ€ κ³μ°/λ¬Έμμμ± ν΄ μΆκ°κ° μμ - μ±κ³΅νμ κΈ°μ€μ μ½λ μμ λ¬Έμν
β νμ κ° βμλνλ€βμ κΈ°μ€μ ν΅μΌ - μ€λ₯ μ§λ¨ λͺ
λ Ήμ ν¨κ» μ 곡
β μ΄λ³΄μ μ§μ λΉμ©μ ν¬κ² μ€μ
μμ£Ό λ§νλ λ¬Έμ μ ν΄κ²°
-
AuthenticationErrorλλ ν€ κ΄λ ¨ μ€λ₯- μμΈ: νκ²½λ³μ λ―Έμ€μ /μ€ν
- ν΄κ²°:
export OPENAI_API_KEY=...μ¬μ€μ ν λμΌ μ Έμμ μ¬μ€ν
-
κ²μ κ²°κ³Όκ° λΉμ΄ μμ
- μμΈ: λ€νΈμν¬ μ ν λλ μΌμμ κ²μ μ€ν¨
- ν΄κ²°: μ§λ¬Έμ λ ꡬ체ν(κΈ°κ°/ν€μλ μΆκ°), μ μ ν μ¬μλ
-
μΆλ ₯ νμμ΄ FINAL κ³μ½κ³Ό λ€λ¦
- μμΈ: μμ€ν ν둬ννΈκ° μ½ν¨
- ν΄κ²°: νμ κ°μ 문ꡬ(νλλͺ /κ°μ) λ λͺ μ
체ν¬λ¦¬μ€νΈ
- κ°μνκ²½ μμ± λ° ν¨ν€μ§ μ€μΉ μλ£
- API ν€/λͺ¨λΈ νκ²½λ³μ νμΈ
-
python lesson15_web_summary_agent.pyμ μ μΆλ ₯ -
FINALλΈλ‘ + μΆμ² URL 2κ° μ΄μ νμΈ - μ€ν¨ 볡ꡬ λͺ λ ΉμΌλ‘ μμΈ μ¬ν κ°λ₯
μ°Έκ³ λ§ν¬ (μ°μ μμ)
- https://github.com/huggingface/agents-course
- https://huggingface.co/learn/agents-course
- https://huggingface.co/docs/smolagents
μμ±ν AI νμ© κ³ μ§
μ΄ λ¬Έμλ μμ±ν AIλ₯Ό νμ©ν΄ μ΄μ μμ±, μ€μ΅ μ μ°¨ ꡬ쑰ν, μμ μ½λ μ 리λ₯Ό μννμΌλ©°, μ΅μ’ λ°ν μ μ¬λμ΄ λͺ λ Ή μ¬νμ±κ³Ό λ§ν¬ μ ν¨μ±μ μ κ²νλ€.