Skip to content

dominhok/mini-aiffelthon

Repository files navigation

πŸ¦‹ λ‚˜λ§Œμ˜ λΉ„μ„œ λ‚˜λΉ„

Korean GitHub License Python Version

🧠 ν”„λ‘œμ νŠΈ κ°œμš”

**λ‚˜λ§Œμ˜ λΉ„μ„œ λ‚˜λΉ„(Nabi)**λŠ” LangGraph ReAct μ—μ΄μ „νŠΈμ™€ MCP(Model Context Protocol)λ₯Ό ν™œμš©ν•˜μ—¬ μ‚¬μš©μžμ˜ 일상을 λ•λŠ” AI λΉ„μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€. Streamlit으둜 κ΅¬μΆ•λœ μ›Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•˜λ©°, Upstage Solar LLM을 기반으둜 μž‘λ™ν•©λ‹ˆλ‹€.

λ‚˜λΉ„λŠ” MCPλ₯Ό 톡해 λ‹€μ–‘ν•œ 도ꡬ와 μ—°λ™λ©λ‹ˆλ‹€:

  • 날씨 정보: μ‚¬μš©μžμ˜ ν˜„μž¬ μœ„μΉ˜λ₯Ό 기반으둜 날씨λ₯Ό μ•Œλ €μ€λ‹ˆλ‹€ (mcp_server_local.py).
  • Google Workspace 연동: Google 계정 인증을 톡해 Gmail 확인/검색/전솑 및 Google Calendar 일정 쑰회/μΆ”κ°€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€ (gsuite_mcp_server.py).
  • 정보 검색 및 λΈŒλ¦¬ν•‘: Perplexity AIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή 검색을 μˆ˜ν–‰ν•˜κ³ , μ‚¬μš©μžκ°€ μ„€μ •ν•œ 관심 뢄야에 λŒ€ν•œ μ΅œμ‹  정보 λ³΄κ³ μ„œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€ (pplx_search_mcp_server.py).

✨ μ£Όμš” κΈ°λŠ₯

  • λŒ€ν™”ν˜• AI λΉ„μ„œ: Upstage Solar LLM 기반의 μžμ—°μŠ€λŸ¬μš΄ λŒ€ν™” κΈ°λŠ₯
  • 날씨 정보 쑰회: ν˜„μž¬ μœ„μΉ˜ 기반 μ‹€μ‹œκ°„ 날씨 정보 제곡
  • Google 계정 연동 (OAuth):
    • Gmail: 받은 νŽΈμ§€ν•¨ 확인, 이메일 검색, 이메일 μž‘μ„± 및 전솑
    • Google Calendar: λ‹€κ°€μ˜€λŠ” 일정 확인, μƒˆλ‘œμš΄ 일정 μΆ”κ°€
  • 관심 λΆ„μ•Ό λ³΄κ³ μ„œ: μ„€μ •λœ 관심사에 λŒ€ν•œ μ΅œμ‹  정보 μžλ™ λΈŒλ¦¬ν•‘
  • 직접 μ›Ή 검색: Perplexity AIλ₯Ό ν†΅ν•œ μ‹€μ‹œκ°„ 정보 검색
  • Streamlit 기반 μ›Ή μΈν„°νŽ˜μ΄μŠ€: μ‚¬μš©μž μΉœν™”μ μΈ UI 제곡

πŸ“¦ DEMO

였늘의 λ³΄κ³ μ„œ

둜그인 μ‹œ μžλ™ 쑰회



ν˜„μž¬ 날씨 쑰회

ν˜„μž¬ 날씨



일정 κ°€μ Έμ˜€κΈ°

일정 쑰회



일정 μΆ”κ°€ν•˜κΈ°

일정 생성



πŸ— μ•„ν‚€ν…μ²˜

μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨
  1. Streamlit UI (app_KOR.py): μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•˜λŠ” μ›Ή ν”„λ‘ νŠΈμ—”λ“œ.
  2. LangGraph ReAct Agent: μ‚¬μš©μžμ˜ μš”μ²­μ„ μ΄ν•΄ν•˜κ³  μ μ ˆν•œ 도ꡬλ₯Ό 선택 및 μ‹€ν–‰ν•˜λŠ” 핡심 둜직 (Upstage Solar LLM μ‚¬μš©).
  3. MCP ν΄λΌμ΄μ–ΈνŠΈ (langchain-mcp-adapters): LangGraph μ—μ΄μ „νŠΈμ™€ MCP μ„œλ²„ κ°„μ˜ 톡신을 μ€‘κ°œ.
  4. MCP μ„œλ²„ (mcp_server_*.py): νŠΉμ • κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 독립적인 ν”„λ‘œμ„ΈμŠ€.
    • weather: 날씨 정보 제곡 (OpenWeatherMap API μ‚¬μš©)
    • gsuite: Gmail 및 Google Calendar κΈ°λŠ₯ 제곡 (Google API μ‚¬μš©)
    • pplx_search: μ›Ή 검색 κΈ°λŠ₯ 제곡 (Perplexity AI API μ‚¬μš©)
    • μ°Έκ³ : ν˜„μž¬ κ΅¬ν˜„μ—μ„œλŠ” Streamlit 앱이 μ‹œμž‘λ  λ•Œ MultiServerMCPClientλ₯Ό 톡해 이 μ„œλ²„λ“€μ„ λ‘œμ»¬μ—μ„œ stdio 전솑 λ°©μ‹μœΌλ‘œ μžλ™ μ‹€ν–‰ν•˜λ €κ³  μ‹œλ„ν•©λ‹ˆλ‹€.

βš™οΈ μ„€μΉ˜

  1. μ €μž₯μ†Œ 클둠:

    git clone https://github.com/Minhokei/langgraph-mcp-agents.git # μ‹€μ œ μ €μž₯μ†Œ URL둜 λ³€κ²½ν•˜μ„Έμš”
    cd langgraph-mcp-agents
  2. 가상 ν™˜κ²½ 생성 및 μ˜μ‘΄μ„± μ„€μΉ˜ (uv μ‚¬μš© ꢌμž₯):

    • uvκ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄ λ¨Όμ € μ„€μΉ˜ν•©λ‹ˆλ‹€: pip install uv
    • 가상 ν™˜κ²½μ„ μƒμ„±ν•˜κ³  ν™œμ„±ν™”ν•©λ‹ˆλ‹€:
      uv venv
      source .venv/bin/activate  # Linux/macOS
      # .venv\Scripts\activate  # Windows
    • requirements.txt 파일의 μ˜μ‘΄μ„±μ„ μ„€μΉ˜ν•©λ‹ˆλ‹€:
      uv pip install -r requirements.txt

πŸ›  사전 μ€€λΉ„: API ν‚€ 및 Google Cloud μ„€μ •

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜κΈ° 전에 ν•„μš”ν•œ API 킀와 Google Cloud 섀정을 μ™„λ£Œν•΄μ•Ό ν•©λ‹ˆλ‹€.

  1. Google Cloud μ„€μ •:

    • Google Cloud Console (https://console.cloud.google.com/)μ—μ„œ μƒˆ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜κ±°λ‚˜ κΈ°μ‘΄ ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    • Gmail API와 Google Calendar APIλ₯Ό κ²€μƒ‰ν•˜μ—¬ "μ‚¬μš© μ„€μ •"ν•©λ‹ˆλ‹€.
    • "API 및 μ„œλΉ„μŠ€" > "μ‚¬μš©μž 인증 정보"둜 μ΄λ™ν•©λ‹ˆλ‹€.
    • "+ μ‚¬μš©μž 인증 정보 λ§Œλ“€κΈ°" > "OAuth ν΄λΌμ΄μ–ΈνŠΈ ID"λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
    • "μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μœ ν˜•"으둜 **"μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜"**을 μ„ νƒν•©λ‹ˆλ‹€.
    • "승인된 λ¦¬λ””λ ‰μ…˜ URI" μ„Ήμ…˜μ—μ„œ "+ URI μΆ”κ°€"λ₯Ό ν΄λ¦­ν•˜κ³  λ‹€μŒ URIλ₯Ό λͺ¨λ‘ μΆ”κ°€ν•©λ‹ˆλ‹€(ν•˜λ‚˜λŠ” 둜컬 개발용, λ‹€λ₯Έ ν•˜λ‚˜λŠ” 배포 μ‹œ ν•„μš”ν•  수 있음):
      • http://localhost:8501/callback
      • (배포 μ‹œ μ‚¬μš©ν•  URI, 예: https://your-app-domain.com/callback)
    • "λ§Œλ“€κΈ°"λ₯Ό ν΄λ¦­ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈ ID와 ν΄λΌμ΄μ–ΈνŠΈ λ³΄μ•ˆ 비밀이 ν‘œμ‹œλ©λ‹ˆλ‹€. JSON λ‹€μš΄λ‘œλ“œ λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ credentials.json νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜κ³  ν”„λ‘œμ νŠΈ 루트 디렉토리에 μ €μž₯ν•©λ‹ˆλ‹€.
    • "OAuth λ™μ˜ ν™”λ©΄"을 μ„€μ •ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ 앱을 κ²Œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€.
  2. API ν‚€ μ€€λΉ„:

    • Upstage AI API ν‚€: https://console.upstage.ai/ μ—μ„œ κ°€μž…ν•˜κ³  API ν‚€λ₯Ό λ°œκΈ‰λ°›μŠ΅λ‹ˆλ‹€.
    • OpenWeatherMap API ν‚€: https://openweathermap.org/ μ—μ„œ κ°€μž…ν•˜κ³  API ν‚€λ₯Ό λ°œκΈ‰λ°›μŠ΅λ‹ˆλ‹€ (무료 ν”Œλžœ κ°€λŠ₯).
    • Perplexity AI API ν‚€: https://docs.perplexity.ai/ μ—μ„œ κ°€μž…ν•˜κ³  API ν‚€λ₯Ό λ°œκΈ‰λ°›μŠ΅λ‹ˆλ‹€.

🧾 .env 파일 μ„€μ •

ν”„λ‘œμ νŠΈ 루트 디렉토리에 .env νŒŒμΌμ„ μƒμ„±ν•˜κ³ , λ‹€μŒκ³Ό 같이 API 킀와 섀정을 μž…λ ₯ν•©λ‹ˆλ‹€.

# .env

# Upstage API Key
UPSTAGE_API_KEY="μ—¬λŸ¬λΆ„μ˜ Upstage API ν‚€"

# OpenWeatherMap API Key
WEATHERMAP_API_KEY="μ—¬λŸ¬λΆ„μ˜ OpenWeatherMap API ν‚€"

# Perplexity AI API Key
PERPLEXITY_API_KEY="μ—¬λŸ¬λΆ„μ˜ Perplexity AI API ν‚€"

# Google OAuth Credentials File Path
# Google Cloud Consoleμ—μ„œ λ‹€μš΄λ‘œλ“œν•œ credentials.json 파일의 경둜
# 예: GOOGLE_CREDENTIALS_PATH="./credentials.json" (ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— μ €μž₯ν•œ 경우)
GOOGLE_CREDENTIALS_PATH="μ—¬λŸ¬λΆ„μ˜ credentials.json 파일 경둜"

# Google OAuth Redirect URI
# 둜컬 개발 μ‹œ: http://localhost:8501/callback
# 배포 μ‹œ: 배포된 μ•±μ˜ callback URI (Google Cloud Console에 λ“±λ‘ν•œ URI와 μΌμΉ˜ν•΄μ•Ό 함)
REDIRECT_URI="http://localhost:8501/callback"

πŸš€ μ‚¬μš©λ²•

  1. 가상 ν™˜κ²½ ν™œμ„±ν™”:

    source .venv/bin/activate  # Linux/macOS
    # .venv\Scripts\activate  # Windows
  2. Streamlit μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰:

    streamlit run app_KOR.py

    앱이 μ‹€ν–‰λ˜λ©΄ μžλ™μœΌλ‘œ MCP μ„œλ²„λ“€(weather, gsuite, pplx_search)을 둜컬 ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹€ν–‰ν•˜λ €κ³  μ‹œλ„ν•©λ‹ˆλ‹€.

  3. μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ•± 접속: 터미널에 ν‘œμ‹œλœ URL(κΈ°λ³Έκ°’: http://localhost:8501)둜 μ ‘μ†ν•©λ‹ˆλ‹€.

  4. Google 계정 연동 (ν•„μš”μ‹œ):

    • μ‚¬μ΄λ“œλ°”μ˜ "Google 계정 연동" μ„Ήμ…˜μ—μ„œ "Google 계정 μ—°λ™ν•˜κΈ°" λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.
    • Google 둜그인 및 λ™μ˜ 화면을 μ§„ν–‰ν•©λ‹ˆλ‹€.
    • μ„±κ³΅μ μœΌλ‘œ μ—°λ™λ˜λ©΄ μ‚¬μ΄λ“œλ°”μ— "βœ… Google 계정이 μ—°λ™λ˜μ—ˆμŠ΅λ‹ˆλ‹€." λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. 이제 Gmail 및 μΊ˜λ¦°λ” κ΄€λ ¨ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. 관심 λΆ„μ•Ό μ„€μ • (선택):

    • μ‚¬μ΄λ“œλ°”μ˜ "관심 λΆ„μ•Ό μ„€μ •" μ„Ήμ…˜μ—μ„œ 관심사λ₯Ό μž…λ ₯ν•˜κ³  "관심 λΆ„μ•Ό μ €μž₯" λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.
    • μ €μž₯ μ‹œ μžλ™μœΌλ‘œ ν•΄λ‹Ή 관심사에 λŒ€ν•œ λ³΄κ³ μ„œ 생성이 μ‹œμž‘λ©λ‹ˆλ‹€.
  6. λ‚˜λΉ„ λΉ„μ„œμ™€ λŒ€ν™”:

    • "πŸ¦‹ λ‚˜λΉ„ λΉ„μ„œ" νƒ­ ν•˜λ‹¨μ˜ μž…λ ₯창에 μ§ˆλ¬Έμ΄λ‚˜ μš”μ²­μ„ μž…λ ₯ν•©λ‹ˆλ‹€.
    • λ‚˜λΉ„λŠ” μ§ˆλ¬Έμ„ λΆ„μ„ν•˜κ³  ν•„μš”μ— 따라 μ—°λ™λœ 도ꡬ(날씨, Gmail, μΊ˜λ¦°λ”, 검색)λ₯Ό μ‚¬μš©ν•˜μ—¬ 닡변을 μƒμ„±ν•©λ‹ˆλ‹€.
  7. 관심뢄야 λ³΄κ³ μ„œ 확인:

    • "πŸ” 관심뢄야 λ³΄κ³ μ„œ" νƒ­μœΌλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.
    • 관심 λΆ„μ•Όκ°€ μ„€μ •λ˜μ–΄ μžˆλ‹€λ©΄ μžλ™μœΌλ‘œ μƒμ„±λœ μ΅œμ‹  정보 λΈŒλ¦¬ν•‘μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • ν•˜λ‹¨μ˜ μž…λ ₯창을 톡해 직접 μ›ν•˜λŠ” ν‚€μ›Œλ“œλ‘œ μ›Ή 검색을 μˆ˜ν–‰ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

πŸ“š μ°Έκ³  및 기반 ν”„λ‘œμ νŠΈ

이 "λ‚˜λΉ„ λΉ„μ„œ" μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ LangGraph와 MCP(Model Context Protocol)λ₯Ό ν†΅ν•©ν•˜λŠ” 방법을 λ³΄μ—¬μ£ΌλŠ” teddylee777/langgraph-mcp-agents ν”„λ‘œμ νŠΈλ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μ£Όμš” μ°Έκ³  λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ LICENSE νŒŒμΌμ„ μ°Έκ³ ν•˜μ„Έμš”.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •