Frame at 0.00s
MCP(Managed Code Platform)를 활용한 데이터 분석 에이전트 구현 ## 1. MCP와 LangChain 연동 * **MCP 활용:** 데이터 분석 에이전트가 MCP 도구에 접근하여 필요한 도구를 가져다 사용하는 방식 * **LangChain 기반 에이전트:** * LangGraph 또는 LangChain 기반 에이전트가 MCP 도구에 쉽게 연결되도록 돕는 역할 * `LangChain MCP Adapter`가 연결 다리 역할 수행 * **Python SDK:** * MCP 서버 및 클라이언트 구현을 위한 Python SDK 제공 * GitHub 주소에서 확인 가능 * **SDK (Software Development Kit):** 특정 플랫폼용 앱 개발을 위한 도구 모음 ## 2. MCP Python SDK * **목적:** MCP 서버 클라이언트 구축을 위한 Python 기반 개발 키트 * **기능:** * MCP 표준을 따르는 MCP 서버 구축 * MCP 서버에 연결 가능한 MCP 클라이언트 구축 * **구현:** * `FastMCP`로 임포트 * `server.py` 등의 파일로 작성 * `FastMCP()`를 통해 서버 생성 (서버 이름 포함) * 서버 내 도구, 리소스, 프롬프트 추가 가능 ### 2.1. MCP 구성 요소 * **도구 (Tools):** * AI 에이전트가 외부 시스템에서 작업을 수행하도록 하는 도구 정의 * 사용자 질문에 필요한 도구를 판단하여 호출 * 예시: BMI 지수 계산, 날씨 반환 도구 * **리소스 (Resources):** * AI 에이전트 및 모델에 필요한 정보 또는 컨텍스트 제공 * 서버가 가진 데이터, 콘텐츠, 설정 등을 LLM에 공개 * 예시: DB 스키마, 사용자 정보 * **프롬프트 (Prompts):** * 재사용 가능한 프롬프트 템플릿을 MCP 서버에 저장 * 에이전트 필요 시 템플릿을 가져와 사용 * 예시: 데이터 분석 조수 역할을 위한 시스템 메시지 ### 2.2. MCP 서버 코드 예시 ```python from fastmcp import FastMCP # MCP 서버 생성 server = FastMCP("MyMCP_Server") # 도구 추가 (예: 덧셈) @server.tool def add(a: int, b: int) -> int: return a + b # 리소스 추가 (예: 데이터, 설정) # server.resource("my_data", {"key": "value"}) # 프롬프트 추가 # server.prompt("my_prompt", "This is a prompt template.") ``` ## 3. MCP 서버 구축 및 클라이언트 연결 ### 3.1. MCP 서버 구축 1. **도구 정의:** `@server.tool` 데코레이터를 사용하여 도구 구현 * **특정 컬럼 통계 (describe):** CSV 파일 및 컬럼명을 입력받아 요약 통계값 반환 (Pandas `describe` 활용) * **히스토그램 시각화 (plot_histogram):** CSV 파일 및 컬럼명을 받아 히스토그램 생성 및 PNG 파일로 저장, 경로 반환 * **모델링 (modeling):** CSV 파일, X, Y 값을 입력받아 예측 모델 학습 및 정확도/RMS 값 반환 (분류/회귀 모델, 랜덤 포레스트/리그레서 사용) 2. **리소스 및 프롬프트 추가:** * `MCP Resource`: 데이터, 리소스, 설정 정의 * `MCP Prompt`: 재사용 가능한 프롬프트 템플릿 정의 (시스템 메시지, 사용자 메시지 포함) 3. **전송 방식 지정:** * **STDIO (Standard Input/Output):** 서버와 클라이언트가 동일 프로세스 내에서 작동하거나 로컬 모델 실행 시 사용 * **SSE (Server-Sent Events):** 서버와 클라이언트 간 효율적인 단방향 통신, 실시간 데이터 업데이트 시 사용 ### 3.2. MCP 클라이언트 구현 1. **환경 설정:** * OpenAI API 키 등 환경 변수 설정 * 사용할 LLM 모델 로드 2. **MCP 서버 연결:** * `stdio_server_parameters()`를 사용하여 서버 파라미터 생성 (STDIO 방식) * `python -m server.py` 형태로 커맨드 입력 (Python 기반 실행) 3. **클라이언트 생성 및 세션 관리:** * `AsyncClient`를 통해 비동기 클라이언트 생성 * `session` 단위로 서버와 클라이언트 연동 및 에이전트 작동 관리 4. **랭체인 MCP 어댑터 활용:** * `LangChain MCP Adapter` 라이브러리 설치 (`pip install langchain-mcp-adapter`) * `load_mcp_tool()` 함수를 사용하여 MCP 서버의 도구들을 LangChain 툴로 변환 * `create_react_agent()` 등을 사용하여 툴 콜링 에이전트 구현 * `load_mcp_prompt()` 함수를 사용하여 MCP 서버의 프롬프트 로드 5. **에이전트 실행:** * 사용자 입력 처리 * 로드된 프롬프트와 사용자 입력을 기반으로 에이전트 `invoke` * LLM이 도구를 호출하고 결과를 반환 ## 4. 실행 예시 (데이터 분석 에이전트) 1. **터미널 2개 실행:** * **Terminal 1:** MCP 서버 구동 (`python data_server.py`) * **Terminal 2:** 클라이언트 실행 (요청 주고받기) 2. **질문 예시:** * **통계:** "아이리스 데이터의 petal_length 컬럼 통계를 내주세요." * `describe` 도구 호출 결과 반환 * **시각화:** "아이리스 데이터의 sepal_length 컬럼 분포를 시각화해주세요." * `plot_histogram` 도구 호출, 히스토그램 이미지 저장 및 경로 반환 * **모델링:** "아이리스 데이터에서 sepal_length와 sepal_width를 사용하여 class_name을 예측하는 모델을 학습하고 결과를 알려주세요." * `modeling` 도구 호출, 분류 모델 학습 및 정확도 결과 반환 3. **반복 처리:** `while` 문 등을 사용하여 에이전트 입력 반복 처리 가능 ## 5. 추가 고려 사항 * **커스터마이징:** 에이전트 로직, 도구, 프롬프트 등은 필요에 따라 자유롭게 커스터마이징 가능 * **다양한 주제 적용:** 데이터 분석 외 다른 주제에 대한 프로젝트 및 도구 구현 가능