streamlit-macp-agents / README_KOR.md
jackkuo's picture
fix: track PNGs with LFS
aa98b19

A newer version of the Streamlit SDK is available: 1.48.1

Upgrade

LangGraph ์—์ด์ „ํŠธ + MCP

English Korean

GitHub License Python Version

project demo

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

project architecture

LangChain-MCP-Adapters๋Š” LangChain AI์—์„œ ์ œ๊ณตํ•˜๋Š” ํˆดํ‚ท์œผ๋กœ, AI ์—์ด์ „ํŠธ๊ฐ€ Model Context Protocol(MCP)์„ ํ†ตํ•ด ์™ธ๋ถ€ ๋„๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” MCP ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ReAct ์—์ด์ „ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

  • Streamlit ์ธํ„ฐํŽ˜์ด์Šค: MCP ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋œ LangGraph ReAct Agent์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค
  • ๋„๊ตฌ ๊ด€๋ฆฌ: UI๋ฅผ ํ†ตํ•ด MCP ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€, ์ œ๊ฑฐ ๋ฐ ๊ตฌ์„ฑ(Smithery JSON ํ˜•์‹ ์ง€์›). ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ ๋„ ๋™์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต: ์—์ด์ „ํŠธ ์‘๋‹ต๊ณผ ๋„๊ตฌ ํ˜ธ์ถœ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธ
  • ๋Œ€ํ™” ๊ธฐ๋ก: ์—์ด์ „ํŠธ์™€์˜ ๋Œ€ํ™” ์ถ”์  ๋ฐ ๊ด€๋ฆฌ

MCP ์•„ํ‚คํ…์ฒ˜

MCP(Model Context Protocol)๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. MCP ํ˜ธ์ŠคํŠธ: Claude Desktop, IDE ๋˜๋Š” LangChain/LangGraph์™€ ๊ฐ™์ด MCP๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ.

  2. MCP ํด๋ผ์ด์–ธํŠธ: ์„œ๋ฒ„์™€ 1:1 ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ํด๋ผ์ด์–ธํŠธ๋กœ, ํ˜ธ์ŠคํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  3. MCP ์„œ๋ฒ„: ํ‘œ์ค€ํ™”๋œ ๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํŠน์ • ๊ธฐ๋Šฅ์„ ๋…ธ์ถœํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ์ฃผ์š” ๋ฐ์ดํ„ฐ ์†Œ์Šค ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Docker ๋กœ ๋น ๋ฅธ ์‹คํ–‰

๋กœ์ปฌ Python ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ ๋„ Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ(Docker Desktop)

์•„๋ž˜์˜ ๋งํฌ์—์„œ Docker Desktop์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

Docker Compose๋กœ ์‹คํ–‰ํ•˜๊ธฐ

  1. dockers ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd dockers
  1. ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— API ํ‚ค๊ฐ€ ํฌํ•จ๋œ .env ํŒŒ์ผ ์ƒ์„ฑ.
cp .env.example .env

๋ฐœ๊ธ‰ ๋ฐ›์€ API ํ‚ค๋ฅผ .env ํŒŒ์ผ์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

(์ฐธ๊ณ ) ๋ชจ๋“  API ํ‚ค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž…๋ ฅํ•˜์„ธ์š”.

  • ANTHROPIC_API_KEY: Anthropic API ํ‚ค๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "claude-3-7-sonnet-latest", "claude-3-5-sonnet-latest", "claude-3-haiku-latest" ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • OPENAI_API_KEY: OpenAI API ํ‚ค๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "gpt-4o", "gpt-4o-mini" ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • LANGSMITH_API_KEY: LangSmith API ํ‚ค๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ LangSmith tracing์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ANTHROPIC_API_KEY=your_anthropic_api_key
OPENAI_API_KEY=your_openai_api_key
LANGSMITH_API_KEY=your_langsmith_api_key
LANGSMITH_PROJECT=LangGraph-MCP-Agents
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com

(์‹ ๊ทœ ๊ธฐ๋Šฅ) ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ์‚ฌ์šฉ

๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ์‹œ USE_LOGIN์„ true๋กœ ์„ค์ •ํ•˜๊ณ , USER_ID์™€ USER_PASSWORD๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

USE_LOGIN=true
USER_ID=admin
USER_PASSWORD=admin123

๋งŒ์•ฝ, ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, USE_LOGIN์„ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

USE_LOGIN=false
  1. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์— ๋งž๋Š” Docker Compose ํŒŒ์ผ ์„ ํƒ.

AMD64/x86_64 ์•„ํ‚คํ…์ฒ˜(Intel/AMD ํ”„๋กœ์„ธ์„œ)

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker compose -f docker-compose-KOR.yaml up -d

ARM64 ์•„ํ‚คํ…์ฒ˜(Apple Silicon M1/M2/M3/M4)

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker compose -f docker-compose-KOR-mac.yaml up -d
  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8585 ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ‘์†

(์ฐธ๊ณ )

  • ํฌํŠธ๋‚˜ ๋‹ค๋ฅธ ์„ค์ •์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋นŒ๋“œ ์ „์— ํ•ด๋‹น docker-compose-KOR.yaml ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์„ธ์š”.

์†Œ์Šค์ฝ”๋“œ๋กœ ๋ถ€ํ„ฐ ์ง์ ‘ ์„ค์น˜

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ํด๋ก ํ•ฉ๋‹ˆ๋‹ค
git clone https://github.com/teddynote-lab/langgraph-mcp-agents.git
cd langgraph-mcp-agents
  1. ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜๊ณ  uv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค
uv venv
uv pip install -r requirements.txt
source .venv/bin/activate  # Windows์˜ ๊ฒฝ์šฐ: .venv\Scripts\activate
  1. API ํ‚ค๊ฐ€ ํฌํ•จ๋œ .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(.env.example ์—์„œ ๋ณต์‚ฌ)
cp .env.example .env

๋ฐœ๊ธ‰ ๋ฐ›์€ API ํ‚ค๋ฅผ .env ํŒŒ์ผ์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

(์ฐธ๊ณ ) ๋ชจ๋“  API ํ‚ค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž…๋ ฅํ•˜์„ธ์š”.

  • ANTHROPIC_API_KEY: Anthropic API ํ‚ค๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "claude-3-7-sonnet-latest", "claude-3-5-sonnet-latest", "claude-3-haiku-latest" ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • OPENAI_API_KEY: OpenAI API ํ‚ค๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "gpt-4o", "gpt-4o-mini" ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • LANGSMITH_API_KEY: LangSmith API ํ‚ค๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ LangSmith tracing์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ANTHROPIC_API_KEY=your_anthropic_api_key
OPENAI_API_KEY=your_openai_api_key(optional)
LANGSMITH_API_KEY=your_langsmith_api_key
LANGSMITH_PROJECT=LangGraph-MCP-Agents
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
  1. (์‹ ๊ทœ ๊ธฐ๋Šฅ) ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ์‚ฌ์šฉ

๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ์‹œ USE_LOGIN์„ true๋กœ ์„ค์ •ํ•˜๊ณ , USER_ID์™€ USER_PASSWORD๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

USE_LOGIN=true
USER_ID=admin
USER_PASSWORD=admin123

๋งŒ์•ฝ, ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, USE_LOGIN์„ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

USE_LOGIN=false

์‚ฌ์šฉ๋ฒ•

  1. Streamlit ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. (ํ•œ๊ตญ์–ด ๋ฒ„์ „ ํŒŒ์ผ์€ app_KOR.py ์ž…๋‹ˆ๋‹ค.)
streamlit run app_KOR.py
  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜์–ด ๋ฉ”์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  2. ์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MCP ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค

์œ ์šฉํ•œ MCP ์„œ๋ฒ„๋ฅผ ์ฐพ์œผ๋ ค๋ฉด Smithery๋ฅผ ๋ฐฉ๋ฌธํ•˜์„ธ์š”.

๋จผ์ €, ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ์˜ JSON ๊ตฌ์„ฑ์—์„œ COPY ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

copy from Smithery

๋ณต์‚ฌ๋œ JSON ๋ฌธ์ž์—ด์„ Tool JSON ์„น์…˜์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

tool json

Add Tool ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ "Registered Tools List" ์„น์…˜์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, "Apply" ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒˆ๋กœ์šด ๋„๊ตฌ๋กœ ์—์ด์ „ํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋„๋ก ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

tool json
  1. ์—์ด์ „ํŠธ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

check status

  1. ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์งˆ๋ฌธ์„ ํ•˜์—ฌ ๊ตฌ์„ฑ๋œ MCP ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ReAct ์—์ด์ „ํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

project demo

ํ•ธ์ฆˆ์˜จ ํŠœํ† ๋ฆฌ์–ผ

๊ฐœ๋ฐœ์ž๊ฐ€ MCP์™€ LangGraph์˜ ํ†ตํ•ฉ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋” ๊นŠ์ด ์•Œ์•„๋ณด๋ ค๋ฉด, ํฌ๊ด„์ ์ธ Jupyter ๋…ธํŠธ๋ถ ํŠœํ† ๋ฆฌ์–ผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

์ด ํ•ธ์ฆˆ์˜จ ํŠœํ† ๋ฆฌ์–ผ์€ ๋‹ค์Œ ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  1. MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ • - MCP ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ MultiServerMCPClient ๊ตฌ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ• ํ•™์Šต
  2. ๋กœ์ปฌ MCP ์„œ๋ฒ„ ํ†ตํ•ฉ - SSE ๋ฐ Stdio ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ์—์„œ ์‹คํ–‰ ์ค‘์ธ MCP ์„œ๋ฒ„์— ์—ฐ๊ฒฐ
  3. RAG ํ†ตํ•ฉ - ๋ฌธ์„œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด MCP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํŠธ๋ฆฌ๋ฒ„ ๋„๊ตฌ ์ ‘๊ทผ
  4. ํ˜ผํ•ฉ ์ „์†ก ๋ฐฉ๋ฒ• - ํ•˜๋‚˜์˜ ์—์ด์ „ํŠธ์—์„œ ๋‹ค์–‘ํ•œ ์ „์†ก ํ”„๋กœํ† ์ฝœ(SSE ๋ฐ Stdio) ๊ฒฐํ•ฉ
  5. LangChain ๋„๊ตฌ + MCP - MCP ๋„๊ตฌ์™€ ํ•จ๊ป˜ ๋„ค์ดํ‹ฐ๋ธŒ LangChain ๋„๊ตฌ ํ†ตํ•ฉ

์ด ํŠœํ† ๋ฆฌ์–ผ์€ MCP ๋„๊ตฌ๋ฅผ LangGraph ์—์ด์ „ํŠธ์— ๊ตฌ์ถ•ํ•˜๊ณ  ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋‹จ๊ณ„๋ณ„ ์„ค๋ช…์ด ํฌํ•จ๋œ ์‹ค์šฉ์ ์ธ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค

MIT License

ํŠœํ† ๋ฆฌ์–ผ ๋น„๋””์˜ค ๋ณด๊ธฐ(ํ•œ๊ตญ์–ด)

Tutorial Video Thumbnail

์ฐธ๊ณ  ์ž๋ฃŒ