Skip to content

DataScience-Lab-Yonsei/25-2_DSL_Modeling_NLP2_HospitalAgent

Repository files navigation

25-2_DSL_Modeling_NLP2_HospitalAgent

Hospital Reservation System with Multi-Agent Orchestration

This project was conducted by the Natural Language Processing Team 2 as part of the 2025 Fall modeling project at Data Science Lab, Yonsei University.

병원 μ˜ˆμ•½ μ‹œμŠ€ν…œμ„ μœ„ν•œ LangGraph 기반 Multi-Agent Chat Systemμž…λ‹ˆλ‹€.


πŸ‘₯ Team

Cohort Members
12th Eunhee Kim, Kunwoo Kim
13th Sehyun Park (Leader)
14th Dongjun Shin, Junho Yeo

πŸš€ Quick Start

How to Run Code

# 1. Install dependencies
pip install -r requirements.txt
pip install langgraph-cli

# 2. Set up environment variables
cp env_example.txt .env
# Edit .env file with your API keys (OPENAI_API_KEY, TAVILY_API_KEY, etc.)

# 3. Start the RAG server (in first terminal)
cd rag_doctor_agent && python a2a_wrapper.py

# 4. Run LangGraph (in second terminal)
cd ../ && langgraph dev

# 5. (Optional) Use custom chat interface (in third terminal)
# LangGraph Studio UI automatically launches in the browser when you run `langgraph dev`
# But you can also use the custom terminal interface:
python chat_interface.py

접속 정보:

  • LangGraph Studio UI: http://localhost:8123 (μžλ™μœΌλ‘œ λΈŒλΌμš°μ €μ—μ„œ μ—΄λ¦Ό)
  • Chat Interface: ν„°λ―Έλ„μ—μ„œ python chat_interface.py μ‹€ν–‰

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

μƒˆλ‘œμš΄ 3-Agent μ‹œμŠ€ν…œ

μ‚¬μš©μž μž…λ ₯
    ↓
μ—μ΄μ „νŠΈ1(κ΄€λ¦¬μž) 🎯
    β”œβ”€ μ˜ˆμ•½ κ΄€λ ¨ β†’ μ—μ΄μ „νŠΈ2(μ˜ˆμ•½) πŸ“…
    β”œβ”€ 증상-μ˜λ£Œμ§„ λ§€ν•‘ β†’ μ—μ΄μ „νŠΈ3(RAG) 🧠  
    └─ 병원 정보 β†’ Tavily 검색 툴 πŸ”

μ—μ΄μ „νŠΈ2(μ˜ˆμ•½) πŸ“…
    β”œβ”€ μ‚¬μš©μž 정보 μˆ˜μ§‘ (LLM 기반)
    β”œβ”€ 증상 μˆ˜μ§‘ β†’ μ—μ΄μ „νŠΈ3 호좜
    └─ Supabase νˆ΄λ“€ (쑰회/생성/λ³€κ²½)

μ—μ΄μ „νŠΈ3(RAG) 🧠
    └─ κΈ°μ‘΄ rag_doctor_agent ν™œμš©

폴더 ꡬ쑰

medical_reservation_agent/
β”œβ”€β”€ chat_interface.py        # πŸ’¬ 터미널 μ±„νŒ… μΈν„°νŽ˜μ΄μŠ€
β”œβ”€β”€ graph.py                 # πŸ“Š LangGraph μ§„μž…μ 
β”œβ”€β”€ langgraph.json           # LangGraph Studio μ„€μ • 파일
β”œβ”€β”€ main/
β”‚   β”œβ”€β”€ agents/              # πŸ€– μ—μ΄μ „νŠΈλ“€
β”‚   β”‚   β”œβ”€β”€ agent1_manager.py      # κ΄€λ¦¬μž μ—μ΄μ „νŠΈ
β”‚   β”‚   β”œβ”€β”€ agent2_reservation.py  # μ˜ˆμ•½ μ—μ΄μ „νŠΈ
β”‚   β”‚   └── agent3_rag.py          # RAG μ—μ΄μ „νŠΈ
β”‚   β”œβ”€β”€ tools/               # πŸ”§ νˆ΄λ“€
β”‚   β”‚   β”œβ”€β”€ tavily_search.py       # Tavily 웹검색 툴
β”‚   β”‚   └── supabase_mcp_tool.py   # Supabase MCP 툴
β”‚   β”œβ”€β”€ langgraph_workflow.py      # LangGraph μ›Œν¬ν”Œλ‘œμš° μ •μ˜
β”‚   └── langgraph_state.py         # μƒνƒœ λͺ¨λΈ μ •μ˜
β”œβ”€β”€ rag_doctor_agent/        # 🧠 RAG μ„œλ²„
β”‚   β”œβ”€β”€ a2a_wrapper.py             # Agent-to-Agent 래퍼
β”‚   └── main/                      # RAG νŒŒμ΄ν”„λΌμΈ
└── test/                    # πŸ§ͺ ν…ŒμŠ€νŠΈ νŒŒμΌλ“€

πŸ“‹ ν™˜κ²½ λ³€μˆ˜ μ„€μ •

.env 파일 생성 ν›„ λ‹€μŒ API 킀듀을 μ„€μ •ν•˜μ„Έμš”:

ν•„μˆ˜:

  • OPENAI_API_KEY: OpenAI API ν‚€ (LLM μ‚¬μš©)
  • TAVILY_API_KEY: Tavily 검색 API ν‚€ (병원 정보 검색)

선택사항:

  • LANGSMITH_*: LangSmith 좔적 (μ›Œν¬ν”Œλ‘œμš° 디버깅)
  • SUPABASE_*: Supabase λ°μ΄ν„°λ² μ΄μŠ€ (μ˜ˆμ•½ 관리)
    • Supabase ν”„λ‘œμ νŠΈμ—μ„œ URLκ³Ό ν‚€ λ°œκΈ‰

πŸ’¬ μ‚¬μš© 방법

1. LangGraph Studio UI (μΆ”μ²œ)

langgraph dev
  • λΈŒλΌμš°μ €μ—μ„œ μžλ™μœΌλ‘œ http://localhost:8123 μ—΄λ¦Ό
  • κ·Έλž˜ν”½ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ›Œν¬ν”Œλ‘œμš° μ‹œκ°ν™”
  • μ‹€μ‹œκ°„ 디버깅 및 좔적 κ°€λŠ₯

2. 터미널 μ±„νŒ… μΈν„°νŽ˜μ΄μŠ€

python chat_interface.py

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

  • πŸ’¬ μ‹€μ‹œκ°„ λŒ€ν™” μΈν„°νŽ˜μ΄μŠ€
  • πŸ“ μ„Έμ…˜ 관리 및 μ»¨ν…μŠ€νŠΈ μœ μ§€
  • πŸ”§ μ‹œμŠ€ν…œ λͺ…λ Ήμ–΄ (/help, /status, /history, /save λ“±)
  • 🎯 닀쀑 ν„΄ μ˜ˆμ•½ ν”Œλ‘œμš°
  • πŸ’Ύ λŒ€ν™” μ €μž₯/뢈러였기

μ‚¬μš© μ˜ˆμ‹œ:

πŸ‘€ μ‚¬μš©μž: μ˜ˆμ•½ν•˜κ³  μ‹Άμ–΄μš”
πŸ€– μ–΄μ‹œμŠ€ν„΄νŠΈ: πŸ“‹ **μ˜ˆμ•½ 정보 μˆ˜μ§‘ 쀑**
λˆ„λ½λœ 정보: ν™˜μžλͺ…, μ „ν™”λ²ˆν˜Έ

πŸ‘€ μ‚¬μš©μž: ν™κΈΈλ™μž…λ‹ˆλ‹€. 010-1234-5678μ΄μ—μš”
πŸ€– μ–΄μ‹œμŠ€ν„΄νŠΈ: βœ… **μ˜ˆμ•½ 정보 μˆ˜μ§‘ μ™„λ£Œ**
μ–΄λ–€ μ¦μƒμœΌλ‘œ μ˜ˆμ•½ν•˜μ‹œλ‚˜μš”?

μžμ„Έν•œ μ‚¬μš©λ²•: CHAT_GUIDE.md μ°Έκ³ 


πŸ§ͺ ν…ŒμŠ€νŠΈ

ν…ŒμŠ€νŠΈ 파일 μ‹€ν–‰

# 각 μ—μ΄μ „νŠΈ κ°œλ³„ ν…ŒμŠ€νŠΈ
python test/test_agent1_routing.py      # Agent1 λΌμš°νŒ… ν…ŒμŠ€νŠΈ
python test/test_rag_agent.py          # RAG Agent ν…ŒμŠ€νŠΈ

# 톡합 ν…ŒμŠ€νŠΈ
python test/test_full_system.py        # 전체 μ‹œμŠ€ν…œ 톡합 ν…ŒμŠ€νŠΈ
python test/test_multi_turn_conversation.py  # 닀쀑 ν„΄ λŒ€ν™” ν…ŒμŠ€νŠΈ
python test/test_schedule_booking.py    # μ˜ˆμ•½ ν”Œλ‘œμš° ν…ŒμŠ€νŠΈ

# 툴 ν…ŒμŠ€νŠΈ
python test/test_tool_calling.py       # Supabase MCP 툴 ν…ŒμŠ€νŠΈ

LangGraph Studioμ—μ„œ ν…ŒμŠ€νŠΈ

langgraph dev μ‹€ν–‰ ν›„ λΈŒλΌμš°μ €μ—μ„œ:

  • medical_reservation κ·Έλž˜ν”„ 선택
  • μ›Œν¬ν”Œλ‘œμš° μ‹œκ°ν™” 확인
  • 각 λ…Έλ“œλ³„ μ‹€ν–‰ μƒνƒœ λͺ¨λ‹ˆν„°λ§
  • μ‹€μ‹œκ°„ 디버깅

πŸ€– μ—μ΄μ „νŠΈ μ‹œμŠ€ν…œ μ„€λͺ…

μ—μ΄μ „νŠΈ1 (κ΄€λ¦¬μž) 🎯

  • μ—­ν• : LLM 기반 μ‚¬μš©μž μž…λ ₯ 뢄석 및 μ§€λŠ₯ν˜• λΌμš°νŒ…
  • λΆ„κΈ° 둜직:
    • μ˜ˆμ•½ κ΄€λ ¨ μš”μ²­ β†’ μ—μ΄μ „νŠΈ2(μ˜ˆμ•½)
    • 증상-μ˜λ£Œμ§„ λ§€ν•‘ μš”μ²­ β†’ μ—μ΄μ „νŠΈ3(RAG)
    • 병원 정보 μš”μ²­ β†’ Tavily 검색 툴
  • νŠΉμ§•: ν”„λ‘¬ν”„νŠΈ 기반 μ˜λ„ λΆ„λ₯˜, LLM을 ν™œμš©ν•œ μ§€λŠ₯ν˜• νŒλ‹¨

μ—μ΄μ „νŠΈ2 (μ˜ˆμ•½) πŸ“…

  • μ—­ν• : LLM 기반 μ˜ˆμ•½ κ΄€λ ¨ λͺ¨λ“  처리 (생성, 확인, μ·¨μ†Œ)
  • κΈ°λŠ₯:
    • ν”„λ‘¬ν”„νŠΈ 기반 μ‚¬μš©μž 정보 μˆ˜μ§‘ (이름, 성별, μ—°λ½μ²˜)
    • λˆ„λ½λœ 정보에 λŒ€ν•œ μΉœμ ˆν•œ μž¬μš”μ²­
    • 증상 μˆ˜μ§‘ ν›„ μ—μ΄μ „νŠΈ3 호좜
    • Supabase νˆ΄μ„ μ‚¬μš©ν•œ μ˜ˆμ•½ 관리
  • νŠΉμ§•: LLM이 μ‚¬μš©μž μž…λ ₯을 μ΄ν•΄ν•˜κ³  적절히 응닡

μ—μ΄μ „νŠΈ3 (RAG) 🧠

  • μ—­ν• : 증상을 기반으둜 μ μ ˆν•œ μ˜λ£Œμ§„ μΆ”μ²œ
  • κΈ°λŠ₯:
    • κΈ°μ‘΄ rag_doctor_agent ν™œμš©
    • 증상 뢄석 및 μ§„λ£Œκ³Ό λ§€ν•‘
    • μ˜λ£Œμ§„ μΆ”μ²œ 및 신뒰도 제곡
  • νŠΉμ§•: κΈ°μ‘΄ RAG νŒŒμ΄ν”„λΌμΈ μž¬μ‚¬μš©

νˆ΄λ“€ πŸ”§

Tavily 검색 툴

  • μš©λ„: λ°”λ₯Έλ§ˆλ””병원 μ›Ήμ‚¬μ΄νŠΈ(https://barunjoint.kr/) μ „μš© 검색
  • μ œν•œμ‚¬ν•­: λ°˜λ“œμ‹œ ν•΄λ‹Ή λ„λ©”μΈμ—μ„œλ§Œ 검색
  • 검색 μœ ν˜•: 휴무일, μš΄μ˜μ‹œκ°„, μ—°λ½μ²˜, μœ„μΉ˜ λ“±

Supabase νˆ΄λ“€ (4개 μ „λ¬Έν™”)

  • supabase_read_tool: μ˜ˆμ•½ 데이터 쑰회 (슬둯 쑰회, ν™˜μž μ˜ˆμ•½ λͺ©λ‘)
  • supabase_create_tool: μƒˆ μ˜ˆμ•½ 생성
  • supabase_update_tool: μ˜ˆμ•½ 정보 μˆ˜μ •
  • supabase_delete_tool: μ˜ˆμ•½ μ·¨μ†Œ
  • νŠΉμ§•: 각 μž‘μ—…λ³„λ‘œ μ „λ¬Έν™”λœ 별도 툴, ν”„λ‘¬ν”„νŠΈ 기반 μžλ™ 선택

πŸ”„ μ›Œν¬ν”Œλ‘œμš° 흐름

  1. μ‚¬μš©μž μž…λ ₯ β†’ μ—μ΄μ „νŠΈ1(κ΄€λ¦¬μž)
  2. μ˜λ„ 뢄석 β†’ μ μ ˆν•œ μ—μ΄μ „νŠΈ/툴 선택
  3. λΌμš°νŒ…:
    • μ˜ˆμ•½ β†’ μ—μ΄μ „νŠΈ2 β†’ ν•„μš”μ‹œ μ—μ΄μ „νŠΈ3 호좜 β†’ Supabase MCP 툴
    • μ˜λ£Œμ§„ μΆ”μ²œ β†’ μ—μ΄μ „νŠΈ3 β†’ RAG νŒŒμ΄ν”„λΌμΈ
    • 병원 정보 β†’ Tavily 검색 툴
  4. 응닡 생성 β†’ μ‚¬μš©μžμ—κ²Œ κ²°κ³Ό 전달

πŸ“ μ£Όμš” κΈ°λŠ₯

  • βœ… Multi-Agent Orchestration - 3개 μ—μ΄μ „νŠΈμ˜ ν˜‘μ—… μ‹œμŠ€ν…œ
  • βœ… LangGraph μ›Œν¬ν”Œλ‘œμš° - μƒνƒœ 기반 μ›Œν¬ν”Œλ‘œμš° 관리
  • βœ… RAG 기반 μ˜λ£Œμ§„ μΆ”μ²œ - 증상 뢄석 및 μ μ ˆν•œ μ˜λ£Œμ§„ λ§€ν•‘
  • βœ… μ‹€μ‹œκ°„ μ±„νŒ… μΈν„°νŽ˜μ΄μŠ€ - 터미널 및 LangGraph Studio UI
  • βœ… μ„Έμ…˜ 관리 - μ‚¬μš©μžλ³„ λŒ€ν™” μ»¨ν…μŠ€νŠΈ μœ μ§€
  • βœ… Supabase MCP 톡합 - μ˜ˆμ•½ 데이터 관리
  • βœ… Tavily μ›Ή 검색 - 병원 정보 μ‹€μ‹œκ°„ 검색
  • βœ… LangSmith 좔적 - μ›Œν¬ν”Œλ‘œμš° 디버깅 및 μ„±λŠ₯ 뢄석

πŸ› οΈ 개발 및 디버깅

LangSmith 연동

LangGraph Studioμ—μ„œ μ›Œν¬ν”Œλ‘œμš° 싀행을 μΆ”μ ν•˜κ³  디버깅할 수 μžˆμŠ΅λ‹ˆλ‹€:

  • LangSmith λŒ€μ‹œλ³΄λ“œ: https://smith.langchain.com
  • λͺ¨λ“  LLM 호좜, μ—μ΄μ „νŠΈ μ‹€ν–‰, 도ꡬ μ‚¬μš© 좔적
  • μ„±λŠ₯ 뢄석 및 μ΅œμ ν™”

둜그 확인

각 μ—μ΄μ „νŠΈ μ‹€ν–‰ μ‹œ μƒμ„Έν•œ λ‘œκ·Έκ°€ μ½˜μ†”μ— 좜λ ₯λ©λ‹ˆλ‹€:

🎯 Agent1: μ‚¬μš©μž μ˜λ„ 뢄석 쀑...
πŸ“… Agent2: μ˜ˆμ•½ 정보 μˆ˜μ§‘ 쀑...
🧠 Agent3: RAG 기반 μ˜λ£Œμ§„ μΆ”μ²œ...
βœ… μ›Œν¬ν”Œλ‘œμš° μ™„λ£Œ

πŸ“š μΆ”κ°€ λ¬Έμ„œ

  • CHAT_GUIDE.md: μ±„νŒ… μΈν„°νŽ˜μ΄μŠ€ 상세 μ‚¬μš©λ²•
  • LANGGRAPH_STUDIO_SETUP.md: LangGraph Studio μ„€μ • κ°€μ΄λ“œ
  • MCP_SERVER_SETUP.md: MCP μ„œλ²„ μ„€μ • 방법
  • test/TEST_GUIDE.md: ν…ŒμŠ€νŠΈ μ‹€ν–‰ κ°€μ΄λ“œ

πŸ“ž 문제 ν•΄κ²°

λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ λ‹€μŒμ„ ν™•μΈν•΄μ£Όμ„Έμš”:

  1. λͺ¨λ“  μ˜μ‘΄μ„±μ΄ μ„€μΉ˜λ˜μ—ˆλŠ”μ§€ 확인 (pip install -r requirements.txt)
  2. RAG μ„œλ²„κ°€ μ‹€ν–‰ 쀑인지 확인 (python rag_doctor_agent/a2a_wrapper.py)
  3. ν™˜κ²½ λ³€μˆ˜κ°€ μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜μ—ˆλŠ”μ§€ 확인 (.env 파일)
  4. LangGraph Studioμ—μ„œ μ›Œν¬ν”Œλ‘œμš° μƒνƒœ 확인
  5. LangSmithμ—μ„œ μ—λŸ¬ 둜그 확인

πŸ“„ License

This project is part of the Data Science Lab, Yonsei University modeling project.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages