์ด๋ฒ ํธ์ smolagents ์์ด์ ํธ์ ์ธ๋ถ ๋๊ตฌ ์๋ฒ(MCP)๋ฅผ ๋ถ์ด๋ ๊ฐ์ฅ ๊ธฐ๋ณธ ํ๋ฆ์ ๋ค๋ฃฌ๋ค.
ํต์ฌ ๋ชฉํ๋ ๋ณต์กํ ๋ฉํฐ์์ด์ ํธ๊ฐ ์๋๋ผ, โ๋๊ตฌ๋ฅผ ์์ ํ๊ฒ ์ฐ๊ฒฐํ๊ณ ์ค์ ๋ก ํธ์ถ๋๋์ง ํ์ธโ ํ๋ ๊ฒ์ด๋ค.
- ์ด์ ํธ: ๐ค 17. ๋ณธํธ 09
- ๋ค์ ํ์ฅ: MCP ์ธ์ฆ/๊ถํ ๋ถ๋ฆฌ, ์คํจ ์ฌ์๋ ์ ์ฑ , ์ด์ ๋ก๊ทธ ํ์คํ
ํ ์ค ๊ฒฐ๋ก
์์ด์ ํธ ๋์ ์ด๋ฐ์๋ ๋ชจ๋ธ ํ๋๋ณด๋ค โ๋๊ตฌ ์ฐ๊ฒฐ ๊ฒ์ฆ(์ฐ๊ฒฐโํธ์ถโ๊ฒฐ๊ณผ)โ์ ๋จผ์ ํ์คํํ๋ฉด ์ค๋ฌด ์คํจ๊ฐ ํฌ๊ฒ ์ค์ด๋ ๋ค.
flowchart LR U[์ฌ์ฉ์ ์ง๋ฌธ] --> A[CodeAgent] A --> C[ToolCollection.from_mcp] C --> M[MCP Server] M --> C C --> A A --> R[์ต์ข ๋ต๋ณ + ์ฌ์ฉ๋๊ตฌ ๋ก๊ทธ]
์ค์ต ๋ชฉํ
ToolCollection.from_mcp๊ฐ๋ ์ ์ดํดํ๋ค.- ๋ก์ปฌ MCP ์๋ฒ(์: filesystem)๋ฅผ smolagents์ ์ฐ๊ฒฐํ๋ค.
- ๋๊ตฌ ํธ์ถ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ๋ก๊ทธ๋ก ํ์ธํ๋ค.
์ค๋น๋ฌผ
- ๋๊ตฌ: Python 3.10+, Node.js 18+, ํฐ๋ฏธ๋
- ์ ๋ ฅ: OpenAI ํธํ API ํค 1๊ฐ
- ์คํ ํ๊ฒฝ: Linux/macOS (Windows๋ WSL ๊ถ์ฅ)
- ์์
ํด๋ ์์:
~/hf-agents-lesson18
์ด๋ณด์ ํ: ์ฒ์์๋ โ์ฝ๊ธฐ ์ ์ฉ ๋๊ตฌโ๋ถํฐ ๋ถ์ด์. ์ฐ๊ธฐ/์ญ์ ๊ถํ ๋๊ตฌ๋ ์ด์ ์ฌ๊ณ ์ํ์ด ํฌ๋ค.
1) ํ๋ก์ ํธ/ํจํค์ง ์ค๋น
- ๋๊ตฌ: ํฐ๋ฏธ๋
- ์ ๋ ฅ: ๊ฐ์ํ๊ฒฝ + ํจํค์ง ์ค์น
- ์คํ๋ช ๋ น:
mkdir -p ~/hf-agents-lesson18
cd ~/hf-agents-lesson18
python3 -m venv .venv
source .venv/bin/activate
pip install -U "smolagents[toolkit,litellm,mcp]" mcp- ์ฑ๊ณตํ์ :
(.venv)ํ๋กฌํํธ ํ์pip install์๋ฌ ์์ด ์ข ๋ฃ
2) MCP ์๋ฒ ํ์ธ(ํ์ผ์์คํ ์์)
- ๋๊ตฌ: ํฐ๋ฏธ๋
- ์ ๋ ฅ: MCP ์๋ฒ ์คํ ๊ฐ๋ฅ ์ฌ๋ถ
- ์คํ๋ช ๋ น:
npx -y @modelcontextprotocol/server-filesystem --help- ์ฑ๊ณตํ์ :
- help/usage ๋ฌธ๊ตฌ ์ถ๋ ฅ
command not found๋๋ npm ๊ถํ ์ค๋ฅ๊ฐ ์์
3) ํ๊ฒฝ๋ณ์ ์ค์
- ๋๊ตฌ: ํฐ๋ฏธ๋
- ์ ๋ ฅ: ๋ชจ๋ธ/API ํค
- ์คํ๋ช ๋ น:
export OPENAI_API_KEY="YOUR_API_KEY"
export MODEL_ID="openai/gpt-4o-mini"- ์ฑ๊ณตํ์ :
echo $MODEL_ID๊ฐ ํ์ธ ๊ฐ๋ฅpython -c "import os; print(bool(os.getenv('OPENAI_API_KEY')))"๊ฒฐ๊ณผ๊ฐTrue
4) MCP ์ฐ๊ฒฐ ์์ด์ ํธ ์ฝ๋ ์์ฑ
- ๋๊ตฌ: ์๋ํฐ ๋๋ ํฐ๋ฏธ๋
- ์ ๋ ฅ: ์๋ ์ฝ๋
- ์คํ๋ช ๋ น:
cat > lesson18_mcp_agent.py <<'PY'
from __future__ import annotations
import os
from smolagents import CodeAgent, LiteLLMModel, ToolCollection
def build_agent() -> CodeAgent:
model = LiteLLMModel(model_id=os.getenv("MODEL_ID", "openai/gpt-4o-mini"))
# ๋ก์ปฌ ํด๋๋ฅผ ์ฝ๋ filesystem MCP ์๋ฒ ์ฐ๊ฒฐ (์ฝ๊ธฐ ์ค์ฌ ๊ถ์ฅ)
tools = ToolCollection.from_mcp(
command="npx",
args=[
"-y",
"@modelcontextprotocol/server-filesystem",
".",
],
)
return CodeAgent(
tools=tools.tools,
model=model,
max_steps=6,
)
def main() -> None:
agent = build_agent()
question = "ํ์ฌ ํด๋์์ md ํ์ผ ๋ชฉ๋ก์ ์ฐพ์, ํ์ผ๋ช
๋ง bullet 3๊ฐ ์ด๋ด๋ก ์์ฝํด์ค."
result = agent.run(question)
print("\n=== AGENT RESULT ===")
print(result)
if __name__ == "__main__":
main()
PY- ์ฑ๊ณตํ์ :
lesson18_mcp_agent.pyํ์ผ ์์ฑ- ์ฝ๋์
ToolCollection.from_mcp(...)ํฌํจ
5) ์คํ ๋ฐ ๋๊ตฌ ํธ์ถ ๊ฒ์ฆ
- ๋๊ตฌ: Python
- ์ ๋ ฅ: ์ง๋ฌธ 1๊ฐ(์ฝ๋ ๋ด ๊ธฐ๋ณธ๊ฐ)
- ์คํ๋ช ๋ น:
python lesson18_mcp_agent.py- ์ฑ๊ณตํ์ :
- ์์ด์ ํธ ์ถ๋ ฅ์ด ์์ฑ๋จ
- ๋ก์ปฌ ํ์ผ ๊ด๋ จ ๊ฒฐ๊ณผ๊ฐ ํฌํจ๋จ
- ์ค๋ฅ ์์ด ์ข ๋ฃ ์ฝ๋ 0
6) ์คํจ ์ ์ ๊ฒ ๋ฃจํด(์ด๋ณด์์ฉ)
- ๋๊ตฌ: ํฐ๋ฏธ๋
- ์ ๋ ฅ: ์ค์น/ํ๊ฒฝ/์คํ ์ํ ์ง๋จ
- ์คํ๋ช ๋ น:
pip show smolagents mcp
node -v
npm -v
python - <<'PY'
import os
print("MODEL_ID:", os.getenv("MODEL_ID"))
print("OPENAI_API_KEY set:", bool(os.getenv("OPENAI_API_KEY")))
PY- ์ฑ๊ณตํ์ :
- ํจํค์ง/Node ๋ฒ์ /ํ๊ฒฝ๋ณ์ ๋๋ฝ ์ฌ๋ถ ์ฆ์ ํ์ธ ๊ฐ๋ฅ
์ค๋ฌด ์ ์ฉ ํฌ์ธํธ
- MCP ์ฐ๊ฒฐ์ ํ์ค ์ธํฐํ์ด์ค๋ก ๊ด๋ฆฌ
๋์ค์ ๋๊ตฌ๋ฅผ ๋ฐ๊ฟ๋ ์์ด์ ํธ ๊ตฌ์กฐ๋ฅผ ํฌ๊ฒ ๋ฐ๊พธ์ง ์์๋ ๋๋ค. - ๊ถํ ์ต์ํ ์์น ๋จผ์ ์ ์ฉ
์ด๋ฐ์๋ ์ฝ๊ธฐ ์ ์ฉ ๋๊ตฌ๋ก ์์ํด ์ด์ ๋ฆฌ์คํฌ๋ฅผ ์ค์ธ๋ค. - ๋๊ตฌ ํธ์ถ ๋ก๊ทธ๋ฅผ ๋ฐ๋์ ๋จ๊ธฐ๊ธฐ
์คํจ ๋ถ์(๊ถํ, ๊ฒฝ๋ก, ์๋ต ํฌ๋งท)์ ๊ฐ์ฅ ๋น ๋ฅธ ๋จ์๊ฐ ๋๋ค. - ์์ ์ฑ๊ณต ์๋๋ฆฌ์ค๋ถํฐ ๊ณ ์
โํ์ผ ๋ชฉ๋ก ์กฐํโ์ฒ๋ผ ๋จ์ ์์ ์ด ์์ ํ๋๋ฉด, ๊ทธ๋ค์์ ์ฐ๊ธฐ/๋ณํ ์๋ํ๋ก ํ์ฅํ๋ค.
์์ฃผ ๋งํ๋ ๋ฌธ์
npx์คํ ์คํจ- ํด๊ฒฐ: Node/npm ๋ฒ์ ์ ๊ฒ, ์ฌ๋ด๋ง ํ๋ก์ ์ค์ ํ์ธ
- ์์ด์ ํธ๊ฐ ๋๊ตฌ๋ฅผ ์ ์ฐ๊ณ ์ถ๋ก ๋ง ํจ
- ํด๊ฒฐ: ์ง๋ฌธ์ โํ์ฌ ํด๋์์โ์ฒ๋ผ ๋๊ตฌ ํ์์ฑ์ ๋ช ์
- ๊ฒฝ๋ก ๊ถํ ์ด์
- ํด๊ฒฐ: ๋๊ตฌ ์๋ฒ ์คํ ๋ฃจํธ ๊ฒฝ๋ก๋ฅผ ๋ช ํํ ์ง์ ํ๊ณ ์ฝ๊ธฐ ๊ฐ๋ฅ ๊ฒฝ๋ก์ธ์ง ํ์ธ
์ฒดํฌ๋ฆฌ์คํธ
- ๊ฐ์ํ๊ฒฝ + ํจํค์ง ์ค์น ์๋ฃ
- MCP ์๋ฒ help ์ถ๋ ฅ ํ์ธ
- API ํค/๋ชจ๋ธ ์ค์ ์๋ฃ
-
ToolCollection.from_mcp์ฝ๋ ์์ฑ ์๋ฃ - ์คํ ์ ๋๊ตฌ ๊ธฐ๋ฐ ๊ฒฐ๊ณผ ํ์ธ
์ฐธ๊ณ ๋งํฌ (์ฐ์ ์์)
- https://github.com/huggingface/agents-course
- https://huggingface.co/learn/agents-course
- https://huggingface.co/docs/smolagents
์์ฑํ AI ํ์ฉ ๊ณ ์ง
์ด ๋ฌธ์๋ ์์ฑํ AI๋ฅผ ํ์ฉํด ์ด์ ๊ตฌ์กฐํ, ์ค์ต ์ฝ๋ ๊ณจ๊ฒฉ ์์ฑ, ์ฒดํฌ๋ฆฌ์คํธ ์ ๋ฆฌ๋ฅผ ์ํํ์ผ๋ฉฐ, ์ต์ข ๋ฐํ ์ ์ฌ๋์ด ๋ช ๋ น/๋งํฌ/์ฌํ ๋จ๊ณ๋ฅผ ๊ฒํ ํ๋ค.