Frame at 0.00s

네, 안녕하세요. 이번 시간에는 MCP를 활용해서 데이터 분석 에이전트를 한번 만들어 보려고 합니다. 이때 MCP를 활용한다는 뜻은 이 데이터 분석 에이전트가 MCP 도구에 접근해서 이 데이터 분석에 필요한 도구들을 가져다 쓴다는 의미고 이때 저희가 랭그래프나 랭체인 기반의 에이전트를 만들게 될 텐데 이때 이 에이전트가 MCP 도구에 쉽게 연결될 수 있도록 이 연결다리 역할을 하는 것이 바로 랭체인에서 제공하는 랭체인 MCP 어댑터라는 겁니다. 그래서 저희가 이 MCP 서버와 클라이언트들을 파이썬으로 한번 구현을 해볼 텐데요. 이때 공식적으로 파이썬을 통해서 MCP를 구현하기 위한 이 SDK를 제공을 하고 있습니다. 그래서 이 SDK는 아래의 GitHub 주소에 들어가 보시면 쉽게 확인을 하실 수가 있고 그래서 이 MCP Python SDK라는 거는 먼저 SDK, 이 소프트웨어 지벨로먼트 키트라는 거는 개발자가 어떤 특정 플랫폼용 앱을 개발할 수 있도록 하는 도구들의 모음을 의미합니다. 그래서 이때 mcp 파이썬 SDK라는 거는 mcp를 구현하기 위해서 mcp 서버 클라이언트들을 구축하기 위해서 파이썬 기반으로 개발자들이 구현할 수 있도록 제공하는 키트라고 보시면 될 것 같고 이때 mcp 파이썬 SDK를 사용을 하게 되면 이 mcp 표준을 따르는 mcp 서버들을 저희가 만들 수가 있고요. 이렇게 만든 mcp 서버들에 연결할 수 있는 mcp 클라이언트들을 구축을 할 수도 있게 됩니다. 그래서 이 mcp SDK를 사용해서 mcp 서버를 구축하는 코드를 간단하게 살펴보시면 먼저 기본적으로 이 SDK는 FastMCP라는 이름으로 임포트를 해주실 수가 있습니다. 이 Python 코드는 서버.py와 같은 형태의 이름으로 지어질 수가 있고 그리고 Fast MCP라는 걸 통해서 저희가 어떤 MCP 서버를 만들어 줄 건지 이 MCP 서버의 이름과 함께 이렇게 서버를 생성을 해줄 수가 있고요. 그 아래쪽에 보시면 이 서버 안에 어떤 도구들이 들어갈 수 있는지를 직접 정의해줄 수가 있습니다. 여기서는 이 데모라는 MCP 서버 안에 더셈을 진행해주는 도구들이 들어가 있는 것을 보실 수가 있고 여기서는 MCP 도구뿐만 아니라 리소스, 프롬프트를 또 추가로 해주실 수가 있는데 여기 아래쪽에 있는 게 바로 MCP 리소스입니다. 리소스는 뒤에서도 다시 설명을 해드리겠지만 이 MCP가 가지고 있는 데이터나 리소스 혹은 컨피그레이션 이런 것들이 정의가 가능합니다. 그래서 앞에서 보신 것처럼 이 MCP를 구현하기 위한 구성 요소에는 크게 세 가지를 확인하실 수 있습니다. 첫 번째로 가장 중앙에 있는 도구인데요. MCP 서버를 만든다는 뜻은 저희가 MCP 도구들을 정의하는 것과 같았잖아요. 그래서 이 AI 에이전트가 외부 시스템에서 작업을 수행할 수 있도록 하는 도구를 정의해줄 수가 있습니다. 이 AI 에이전트가 사용자 질문을 받아서 사용자 질문에는 어떤 도구가 필요할 것이다 이런 판단들을 해서 상황에 필요한 도구들을 끌어와서 사용을 해줄 수가 있었는데 그때 정의를 해줄 수가 있는 것들이 MCP 도구, MCP 툴입니다. 그래서 여기 그림에서는 BMI 지수를 계산을 한다거나 아니면 날씨를 반환하는 이런 도구들을 정의해주는 것을 확인을 하실 수가 있고 두 번째로는 리소스입니다. 리소스는 AI 에이전트, AI 모델에게 필요한 정보나 컨텍스트를 제공한다는 건데 이 말은 이 서버가 가지고 있는 데이터나 콘텐츠를 LLM에게 공개한다는 뜻입니다. LLM에게 제공해줄 수 있는 컨텍스트는 기본적으로 DB의 스키마라던가 아니면 사용자의 정보라던가 이런 기본적인 정보들이 될 수가 있을 것 같습니다. 그리고 마지막으로는 프롬프트입니다. 프롬프트는 AI 에이전트가 사용자 질문을 받아서 어떤 특정 프롬프트에 의해서 동작을 진행을 하게 될 텐데 이때 에이전트마다 그때마다 필요할 때마다 프롬프트를 계속 작성을 해주는 게 아니라 재사용 가능한 프롬프트 템플릿을 미리 MCP 서버에다가 넣어두고 필요할 때마다 가져와서 쓸 수 있는 형태로도 사용이 가능합니다. 그래서 이렇게 MCP 서버를 구축을 했다면 이제 이 MCP 서버를 클라이언트와 연결해서 클라이언트 위에서 사용을 해줄 텐데 이때도 코드를 간단하게 살펴보시면 이렇게 뭔가 서버를 불러와서 파이썬 기반으로 실행을 하는 이런 것들을 입력해서 서버 파라미터를 생성해주는 코드입니다. 이거를 이제 세션 단에서 관리를 해주면서 이 클라이언트가 서버와 연동이 되고 그 연동된 것을 기반으로 에이전트가 작동을 할 수 있도록 코드를 작성을 해줄 수가 있습니다. 이건 뒤에서 실습을 통해서 좀 더 자세히 살펴보도록 하겠습니다. 그래서 이 MCP 표준 전송 유형을 지정을 해줄 수가 있는데 이 말은 저희가 이제 서버와 클라이언트들이 정보를 서로 주고 받을 거고 이때 전송 방식을 지정하는 겁니다. 이때는 두 가지가 있고 첫 번째는 스탠다드 인풋 아웃풋, STDIO입니다. 이거는 서버와 클라이언트가 동일한 프로세스 내에서 작동을 하거나 모델을 로컬에서 실행할 때 주로 사용을 할 수가 있고요. 두 번째는 서버 센트 이벤트, SSE라는 겁니다. 이거는 서버와 클라이언트 간의 효율적인 단방향 통신, STTP 연결을 통해서 간단한 실시간 데이터 업데이트를 사용할 때, 구현할 때 사용이 가능합니다. 그래서 STDIO는 주로 로컬 환경에서 에이전트를 동작을 할 때, 이 모델이 통신을 할 때 주로 사용을 하실 수가 있고, SSE는 웹 기반의 어플리케이션에서 이 모델의 스트리밍 출력들을 실시간으로 받아야 할 때 그럴 때 주로 사용을 하실 수가 있습니다. 그래서 랭체인 MCP 어댑터를 한번 들어와 보시면요. 이렇게 리드미를 한번 같이 읽어보겠습니다. 여기 나와 있는 것처럼 이 라이브러리는 랭체인이나 랭그래프 기반의 어떤 에이전트를 구현을 할 때 이 MCP 도구들을 쉽게 호환될 수 있도록 하는 라이브러리라고 설명이 되어 있고요. 이제 앞에서 보신 것처럼 저희가 MCP 서버와 MCP 클라이언트를 뭔가 파이썬 기반으로 구현을 해줄 수가 있었어요. 이런 것들이 이제 구현이 되어 있다면 이걸 이제 본격적으로 저희가 랭그래프 에이전트를 만들어서 이걸 연결을 해줘야 하는데 이때 쉬운 연결을 해주는 것이 바로 랭체인 MCP 어댑터에서 제공하고 있는 이런 함수들입니다. 여기에는 로드 MCP 툴 같은 것들을 사용해서 MCP 도구들을 쉽게 불러와 줄 수도 있고요. 그래서 다시 정리하면 이 랭체인 혹은 랭그래프로 구현된 에이전트에서 MCP 도구들을 사용을 해주어야 할 때 랭그래프에서 사용할 수 있는 형태의 랭체인 툴로 변환해주는 역할이 랭체인 MCP 어댑터입니다. 그래서 기존에 저희가 랭그래프를 통해서 이 에이전트를 구현하는 방식은 그대로 유지를 할 거고 이때 도구를 사용할 때만 이 도구만 MCP로 사용을 해주는 게 가능해지는 겁니다. 그래서 클라이언트 안에서 이 MCP 도구들을 가져와주는 역할을 이 랭체인 MCP 어댑터가 해주게 될 거예요. 그래서 다시 돌아와서 저희는 오늘 데이터 분석을 진행하는 에이전트를 만들어 보려고 합니다. 제가 생각했을 때 데이터 분석을 진행하는 에이전트가 필요할 것 같은 데이터 도구들에는 크게 세 가지가 있을 수 있다고 생각을 했습니다. 그래서 저는 첫 번째로 데이터 통계 담당, 데이터가 가지고 있는 어떤 최소 최대 값이나 평균 값 이런 것들을 담당해주는 도구가 하나 있을 수 있을 것 같고 두 번째는 데이터 시각화 담당. 데이터를 시각화해서 그 분포를 표현해주는 도구. 그리고 세 번째는 이런 데이터를 가지고 어떤 예측 모델을 만들려고 할 때 이 데이터 모델링을 담당해주는 도구가 있으면 좋을 것 같다고 생각했어요. 그래서 이 세 가지 도구들을 저희는 MCP 서버 위에다가 구현을 미리 해놓고 이거를 이제 끌어와서 랭그래프 기반의 에이전트가 사용을 할 수 있도록 해줄 겁니다. 저는 이제 VS 코드에서 진행을 해줄 거고 제 코드에서 랭체인 MCP 어댑터 데이터 분석 에이전트라는 이름으로 제가 폴더 안에다가 코드를 작성을 해두었습니다. 여기에서 데이터 서버 py 파일과 데이터 클라이언트 py 파일을 주로 확인하시면 되고 여기 emb.파일에는 저희가 오픈 AI 모델을 사용해서 LLM을 사용해줄 거라서 오픈 AI API 키를 여기다가 넣어주시면 될 것 같습니다. 여기 example 아니라 .emb 파일에다가 작성을 같은 형식으로 진행을 해주시면 되고 그러면 먼저 데이터 서버부터 한번 확인을 해볼게요. 저희가 MCP 서버와 클라이언트를 파이썬 기반으로 만들어줄 수 있다고 했습니다. 그래서 먼저 첫 번째로 제가 데이터 분석을 진행하는 MCP 서버를 이렇게 만들어 놓았어요. 그리고 이거 시작하기 전에 만약에 이제 랭체인 MCP 어댑터가 설치가 안 되신 분들은 설치는 그냥 이렇게 PI Install, PIP Install, Leng Chain MCP Adapter 이렇게 해주시면 됩니다. 이거는 그 기터부에 설치하는 명령어들은 나와 있고요. 아무튼 이렇게 설치가 되신 후에 진행을 해주시면 됩니다. 간단하게 살펴보면 저는 이 MCP 서버에 크게 세 가지 툴을 정의를 하고 싶었어요. 그래서 첫 번째로 이렇게 mcp.tool이라는 데코레이터를 통해서 구현을 해주시면 되고 첫 번째로 이 특정 컬럼에 대한 통계, 디스크라이브를 진행하는 도구를 만들어 주었습니다. 이때 이 도구들의 디스크립션을 함께 확인을 하실 수가 있는데 간단하게 살펴보면 먼저 입력 값으로 분석하려고 하는 csv 파일과 또 그 안에 있는 컬럼명을 입력으로 받아서요. 그 특정 컬럼에 대한 요약된 어떤 통계값을 제공하는 도구입니다. 그래서 간단하게 판다스에서 디스크라이브를 반환해주는 것으로 간단하게 구현을 해봤고 이걸 딕셔너리로 변환해서 반환을 해줄 겁니다. 그리고 두 번째로는 히스토그램을 시각화해주는 도구입니다. 여기서도 동일하게 데코레이터 써주었고요. 디스크립션 함께 보시면 입력받은 csv 파일에서 특정 컬럼에 대한 히스토그램을 생성하고 저장하는 것까지 진행해주는 도구예요. 여기에서 먼저 데이터 읽어드려서 이렇게 시각화해주는 코드들을 작성을 해두었습니다. 특정 컬럼 받았기 때문에 그 특정 컬럼에 대한 분포를 시각화하는 코드입니다. 그래서 이거는 제가 작성하고 싶은 대로 했기 때문에 여러분들이 뭔가 원하는 방향이 있으면 그거에 맞춰서 시각화 해주는 코드를 작성해주시면 될 것 같고요. 마지막에 현재 디렉토리에다가 이 컬럼의 이름을 넣어서 png 파일로 저장까지 해주는 걸로 마무리를 했고 반환되는 값으로는 저장된 그림의 경로를 반환하도록 했습니다. 그리고 마지막으로 모델링을 해주는 도구인데요. 이때 모델링을 한다는 것은 저희가 csv 파일을 통해서 뭔가 x값이나 y값들이 있을 거고 이때 x값을 통해서 y값을 예측하는 모델을 만들고 싶은 거예요. 그래서 이때 모델을 학습하고 그 학습된 결과를 정확도나 그런 매트릭에 의해서 계산된 결과까지 반환할 수 있도록 하는 도구를 정의를 해봤습니다. 그래서 보시면 입력 값으로 CSV 파일과 또 X와 Y 값을 입력 받을 수 있도록 했고 그래서 여기서도 동일하게 데이터 읽어드려서 X와 Y값 정의해서 X가 가지고 있는 피처들에 대해서 라벨 인코딩도 진행해주고 또 만약에 이걸 판단했을 때 이게 분류 모델이라고 하면 랜덤 포레스트 클래시파이어 모델을 사용해주도록 했고 또 매트릭은 정확도를 사용할 거고 만약에 이게 회계 모델이라고 하면 리그레서 모델을 사용하고 RMS이라는 매트릭을 사용할 거다. 이런 식으로 정의를 해주고 여기서 테스트셋, 트레이닝셋을 나누어서 학습 진행하고 예측을 한 후에 그 예측값을 실제로 정확도나 RMS 값을 계산해서 결과값으로 이렇게 학습한 모델의 타입과 사용한 매트릭의 종류 그리고 그 매트릭에 대한 정확도까지 반환할 수 있도록 정의를 해두었습니다. 사실 이 부분은 데이터 분석이나 데이터 사이언스 직무가 아니신 분들은 좀 낯설거나 그다지 필요하지 않은 내용일 수 있을 것 같아요. 그래서 저는 이번에 데이터 분석을 주제로 진행을 했기 때문에 이런 모델링하는 코드들을 좀 넣어봤는데 여러분들이 원하시는 분석이 따로 있으시다면 이 부분들은 정말 다양하게 커스텀이 가능하실 것 같습니다. 이렇게 저는 도구 3개를 만들어 놓았고요. 마지막으로 제가 이 mcp 서버에서 mcp 도구뿐만 아니라 리소스와 프롬프트도 추가를 해줄 수가 있다고 했는데 저는 mcp 프롬프트를 한번 추가를 해봤습니다. 저희가 이제 클라이언트 단에서 랭그래프나 랭체인 기반의 에이전트를 만들어서 이 에이전트가 어떤 프롬프트를 뭔가 입력을 받아서 그거에 대한 답변을 해주게 될 텐데 이때 사용을 하게 될 프롬프트를 클라이언트 단에서 직접 입력을 해줄 수도 있지만 그런 게 아니라 MCP 서버 위에서 재사용 가능한 템플릿을 미리 지정을 해줄 수 있다고 했습니다. 그래서 저는 너는 데이터 분석을 진행하는 조수 역할을 한다. 그렇기 때문에 뭔가 툴 콜링이나 데이터 분석 이런 결과들을 깔끔하게 정리해서 반환해라 라고 하는 이런 시스템 메시지를 좀 추가를 미리 해두었어요. 그래서 저희가 나중에 클라이언트 단에서 얘를 불러와서 사용자 입력 값을 메시지라는 걸 통해서 받을 거거든요. 그래서 이때 이 베이스 모델은 여기 나와 있는 MCP SDK에서 기본적으로 제공을 하고 있는 프롬프트 베이스 모델입니다. 그래서 이 베이스 어시스턴트 메시지와 유저 메시지가 있는데 이 시스템 메시지 같은 경우에는 어시스턴트 메시지에 싸서 이렇게 작성을 해두었고 그리고 이후에 저희가 사용자에게 받게 될 그 메시지는 이렇게 유저 메시지로 들어갈 수 있도록 이렇게 메시지 형태로 반환되는 프롬프트를 미리 제가 작성을 해두었습니다. 이게 뒤에서 어떻게 사용되는지는 간단하게 살펴보면 될 것 같고요. 마지막에는 이렇게 이 전송 방식을 지정을 해주시면 되는데 저는 이거를 그냥 로컬에서 간단하게 돌리는 거잖아요. 그래서 두 가지 방식 중에 저는 stdio를 사용을 해주었습니다. 네, 그럼 여기까지가 MCP 서버를 구축하는 방법들을 살펴보았고요. 이제는 이 서버를 연결해주는 클라이언트를 한번 구현을 해보려고 합니다. 클라이언트에서는 저희가 직접 사용해줄 LLM이라던가 MCP 서버들을 직접 연결을 해줄 텐데 첫 번째로 저희가 사용해줄 이 OpenAI 모델을 사용해주기 위해서 환경 변수들 불러오는 코드, 또 사용할 모델들을 이렇게 미리 불러와 주었습니다. 여기가 이제 MCP 서버를 불러와주는 부분인데요. 이 stdio 서버 파라미터라는 게 이 stdio 방식으로 이 MCP 서버들을 만들어주는, MCP 서버들을 연결해주는 이 서버 파라미터를 생성하는 코드입니다. 그래서 저희가 앞에서 데이터 서버.py 파일이라는 걸로 MCP 서버를 만들어 주었잖아요. 그래서 그 부분이 여기 아규먼트로 들어가면 되고 이거는 파이썬 기반으로 실행이 될 거기 때문에 커맨드 부분에는 파이썬 입력해 주시면 이렇게 MCP 서버가 연결될 준비가 된 겁니다. 이제 이 서버 파라미터를 가지고 있는 클라이언트를 만들어 주시면 돼요. 비동기 함수를 통해서 처리가 되고 있고 이 서버 파라미터를 가지고 있는 STDIO 방식으로 통신을 하는 클라이언트를 생성하는 부분입니다. 얘는 읽고 쓰고가 가능하고 이렇게 클라이언트를 불러와줬으면 이 클라이언트가 이렇게 세션 단으로 관리가 될 겁니다. 그래서 이 안에서 이 세션 안에서 저희가 랭그래프나 랭체인 기반의 에이전트를 마음대로 구현을 해주시면 되고요. 여기 안에 보시면은 이제 그 세션에 한해서 그 세션 안에서 우리가 정의해 줄 수 있는 에이전트를 만들어주기 위해서 가장 처음에 세션 초기화 진행해 준 후에 에이전트가 만들어지고 유저 인풋 들어가고 뭔가 프롬프트 처리해서 결과값을 받아오는 코드입니다. 그래서 하나씩 좀 살펴보면요. 먼저 에이전트 부분인데요. 저희가 이제 이 에이전트가 필요할 결국 도구들을 불러와주기 위해서 이 MCP 서버를 만들어줬던 거였어요. 그래서 앞에서도 설명했지만 이 MCP라는 표준으로 정의된 이 MCP라는 걸로 만들어진 MCP 서버까지는 만들어줬는데 이거를 랭그래프 기반의 에이전트를 만들어주고 이거랑 어떻게 연결을 하는지 그게 이제 문제잖아요. 그런 것들을 이제 진행을 해주는 게 여기 나와 있는 랭체인 MCP 어댑터라는 걸 사용을 해줄 수가 있다는 겁니다. 여기 보시면 로드 MCP 툴이라는 걸 통해서 도구들을 불러와 줄 수 있는 거예요. 이때 파라미터로 세션이 들어갔잖아요. 이 세션은 저희가 앞에서 만들어준 MCP 서버가 포함되어 있는 이 서버 파라미터를 포함하고 있는 바로 그 세션입니다. 그래서 이 세션만 입력을 해주시면 이 해당 MCP 서버가 가지고 있는 그 MCP 도구들 저희는 데이터 분석을 위한 총 3개의 도구들이 있었죠. 그래서 그 도구들을 이렇게 랭체인 형태의 툴로 변환해주는 작업을 이 코드 한 줄로 처리가 된 겁니다. 그 다음에 이제 도구들을 불러왔으면 그 도구를 에이전트와 연결을 해줄 텐데 여기서 제가 사용을 해준 거는 사전 구축된 이 Create React Agent라는 겁니다. 앞에서도 아마 나왔을 텐데 이 Create React Agent는 기존의 랭 그래프에서 제공하는 툴 콜링 에이전트를 구현하기 위한 사전 구축 에이전트입니다. 그래서 여기 입력 값으로 이 에이전트가 어떤 LLM을 사용을 할 건지 또 이 LLM이 어떤 도구와 접근을 할 수 있는지 사용을 할 수 있는 이런 도구들을 입력만 해주시면 이 에이전트는 사용자의 입력을 받아서 그 사용자 입력이 어떤 도구가 필요한지 스스로 판단을 해서 그 도구들을 호출한 후에 그 호출 결과를 기반으로 답변해주는 에이전트입니다. 그래서 이 코드 같은 경우에는 기존의 랭 그래프 위에서 구현해준 그 방식과 동일한 건데 여기에서 바뀐 점은 이 툴만 바뀌었어요. 이 툴이 기존에는 이 툴을 정의해줄 때 랭체인 위에서 구현되어 있는 태블릿 서치라던가 아니면 직접 커스텀해준 그런 툴들이 입력이 되었었다면 이제는 MCP 서버 위에서 관리되는 도구들을 저희가 불러와준 거예요. 그래서 이렇게 에이전트를 만들어 주었고요. 이때 저는 정말 간단한 에이전트를 만들어 주었지만 이렇게 표준화된 방식으로 도구만 불러와 줄 수 있다면 더 복잡한 에이전트도 만들어 줄 수가 있겠죠. 그래서 이렇게 에이전트를 만들어 주셨다면 사용자 입력을 저희가 받게 될 거고 이제 여기서 앞에서 만들어준 MCP 프롬프트가 사용될 차례입니다. 이 MCP 프롬프트를 받아오는 것도 위에서 사용해준 이 로드 MCP 툴이라고 하는 함수와 동일한 형태로 사용을 해줄 수가 있습니다. 여기에서는 load MCP 프롬프트라고 하는 함수를 사용을 해줄 수가 있고 여기에서 유저 인풋을 메시지라고 하는 이 파라미터의 입력으로 들어가도록 해주었어요. 여기 앞에서 저희가 프롬프트를 작성해줄 때 이 메시지라는 입력 값을 뚫어 놓았잖아요. 이 유저 메시지로 입력을 받을 수 있도록 이렇게 남겨두었었는데 이 부분에 유저 인풋이 들어가도록 설정을 해주는 겁니다. 그리고 이때 입력에 default prompt라고 하는 이름을 작성해주었는데 이게 바로 앞에서 제가 작성해준 이 prompt 함수의 이름입니다. 그래서 다시 돌아와서 이렇게 prompt를 받아왔다면 이 프롬프트는 이미 랭체인 형태로 랭체인에서 다루어줄 수 있는 프롬프트 형태, 메시지 형태로 변환이 된 상태이기 때문에 이거를 바로 에이전트에 인보크 해주시면 돼요. 여기에서는 제가 비동기 처리를 통해서 A인보크를 사용을 해주었지만 여기에서 스트리밍도 사용해줄 수 있고 원하는 형태로 사용을 해줄 수가 있습니다. 그래서 다시 정리하면 저희가 MCP 서버 위에서 정의해준 도구들을 여기에서 불러와서 이 도구들이 랭체인 위에서 사용될 수 있는 그 툴로서 변환이 되었기 때문에 저희가 기존에 사용하던 랭그래프에서 사용하던 그 코드 그대로 이 툴만 입력을 해서 사용이 가능해졌고 이 프롬프트 같은 경우에도 MCP 서버 위에서 정의되어 있는 이 프롬프트를 그대로 가져와서 이때 이 입력값만 사용자 입력으로 넣어줘서 바로 인보크가 가능해졌습니다. 그래서 이 결과값을 그대로 출력을 해보시면 이 LLM이 데이터 분석에 필요한 도구들을 불러와서 그 도구들의 결과를 기반으로 아마 답변해주는 내용들이 출력이 되게 될 겁니다. 그럼 본격적으로 얘를 어떻게 사용을 하냐면요. 아래쪽에 터미널을 통해서 실행을 해줄 거고 터미널은 총 두 개 열어줄 겁니다. 왜냐하면 하나는 MCP 서버를 구동할, 계속 돌려놓을 터미널 그리고 하나는 클라이언트를 실행해서 연결되어 있는 서버에 요청을 주고받는 그 클라이언트를 실행하게 될 터미널 두 개를 열어줄 거예요. 그래서 첫 번째로 우선 제가 지금 존재하고 있는 이 경로에 접근을 하셔서요. 여기서 저는 이제 먼저 이 데이터 서버.py 파일을 실행을 먼저 해놓겠습니다. 그 말은 이제 mcp 서버를 사용해주기 위해서 mcp 서버를 지금 돌려놓겠다는 의미예요. 이렇게 하면 지금 이 mcp 서버 저희가 정의해놓은 데이터 분석을 위한 mcp 서버가 돌아가고 있는 상태고요. 여기에다가 하나 더 추가해서 이제 여기에서 제가 필요한 클라이언트를 실행을 해줄 겁니다 클라이언트를 이렇게 실행을 해줄 거고요 클라이언트 이제 실행을 하니까 제가 이제 사용자의 입력을 직접 받도록 했었습니다 그래서 이 질문을 입력하세요 창이 이렇게 뜬 걸 확인할 수 있고 제가 이 데이터 분석에서 준비해놓은 데이터가 아이리스 데이터라는 거거든요. 그래서 얘를 좀 같이 보시면 정말 간단한 데이터예요. 그래서 그냥 실습력으로 좀 준비를 해봤고 제가 질문을 한번 남겨볼게요. 저희가 가지고 있는 데이터 분석 툴에는 세 가지가 있었습니다. 첫 번째는 데이터 통계를 진행하는 도구였어요. 그래서 저는 먼저 이 아이리스 데이터 파일에 여기서 컬럼명이 총 6개 정도가 있는데 여기서 저는 페탈 랭스라고 하는 뭐든 상관없어요. 저는 이제 페탈 랭스로 한번 해보겠습니다. 페탈 랭스 컬럼에 통계를 내주세요 라고 해보겠습니다. 그러면 이제 프롬프트가 사용자 입력을 받아서 프롬프트를 불러와서 인보크가 될 준비가 된 거고 리스폰스가 바로 나왔죠. 그래서 보시면 이렇게 뭔가 도구 호출을 통해서 미리 지정해놓은 디스크라이브를 진행하는 도구에 접근을 했을 거예요. 그래서 그 접근을 해서 도구의 호출 결과를 받아왔고 그걸 기반으로 이렇게 답변을 해주고 있습니다. 그리고 만약에 이 중간에 실행 과정이 좀 궁금하신 분들은 이렇게 마지막 값만 받아오지 마시고 이 리스폰스 전체 출력해서 확인을 해보셔도 됩니다. 이번에는 전체 출력 되도록 한번 진행해볼게요. 다른 질문을 또 해보겠습니다. 또 클라이언트를 실행해서 두 번째로는 통계가 아니라 데이터 시각화하는 도구였잖아요. 한번 그 도구를 사용할 수 있도록 질문을 해볼게요. 이번에도 동일하게 아이리스 데이터 사용해줄 텐데 이 파일에 세팔 랭스라고 하는 컬럼에 분포를 시각화해주세요. 한번 해보겠습니다. 네, 그럼 뭔가 이제 결과값들이 나왔는데 제가 리스폰스를 출력을 하도록 했었어요. 그래서 여기를 보시면은 여기 좀 잘 안 보이실 수도 있는데 여기 툴 메시지가 있거든요. 툴 메시지 보시면은 저희가 MCP 서버 위에서 만들어줬던 플롯 히스토그램이라는 함수가 바로 그 두 번째 데이터 시각화를 진행하는 그 도구예요. 그래서 그 도구를 저희가 호출을 해서 이 LLM이 실행을 했다는 뜻입니다. 그래서 그 도구를 호출을 했고 이때 그 도구를 통해서 그 시각화된 결과를 저장까지 아마 했을 거예요. 그래서 여기에 AI 메시지로 이제 시각화를 해서 여기 경로에다가 저장을 해놓았다라고 답변을 해주고 있고 최종 답변을 이렇게 확인을 하실 수가 있습니다. 그래서 실제로 그 도구를 통해서 해당 경로에다가 데이터 시각화 결과를 저장까지 해주었기 때문에 이렇게 저장된 결과까지 이렇게 확인을 하실 수가 있습니다. 또 다른 시각화도 한번 해볼까요? 이번에는 set 파일 랭스가 아니라 페탈 랭스나 이런 걸로 한번 진행해볼게요. 이렇게 입력을 한번 해보겠습니다. 그럼 이번에도 생성이 되었고 여기에 보시면 또 페탈 랭스라고 하는 PNG 파일이 생겼죠. 이렇게 그림을 확인을 하실 수가 있습니다. 그러면 이제 마지막으로 세 번째 모델링하는 부분까지 한번 실험을 해보겠습니다. 이번에 예측 모델을 만들어 줄 텐데 주로 이 아이리스 데이터에서는 이 클래스 네임, 붓꽃의 어떤 종류를 예측하는 문제로 많이 활용이 되거든요. 그 부분들을 한번 질문을 해서 적절히 얘가 데이터 모델링을 하는 도구를 불러와서 처리를 해주는지 확인해보겠습니다. 그래서 여기서 저는 세팔 랭스랑 세팔의 너비라고 하는 이 피처를 사용해서 클래스 네임을 예측하는 모델을 학습하고 결과를 알려주세요 라고 한번 해보겠습니다. 네 그럼 지금 결과가 바로 나왔고요. 여기도 중간에 보시면 여기 이제 툴 메시지라는 걸 통해서 툴 메시지에서 여기 네임에 모델이라고 되어 있거든요. 이 MCP 서버 위에서 제가 모델이라는 이름으로 이 모델링하는 도구를 이름을 지어줬었어요. 그래서 실제로 얘는 MCP 서버 위에 있는 모델링하는 도구들을 호출해서 학습을 실제로 진행을 했고 그때의 결과를 딕셔너리 형태로 받아왔고 그 호출된 결과 딕셔너리를 기반으로 이렇게 답변까지 해주고 있습니다. 이때 저는 분류 모델이었기 때문에 분류 모델이었고 정확도를 기반으로 80% 정도의 점수가 나왔다라고 결과를 반환해주고 있네요. 그러면 이제 마지막으로 저는 이제 클라이언트를 계속 호출하면서 입력을 해주었는데 만약에 이렇게 매번 클라이언트 호출하는 게 아니라 여기서 반복 처리를 해주고 싶다라고 하면 여기서 에이전트 부분은 여러분들이 정말 원하는 대로 커스텀이 가능하거든요. 그 부분까지만 좀 보여드리면 예를 들어서 여기 에이전트까지는 됐고 여기 입력을 해줄 때 이런 식으로 바꿔줄 수도 있겠죠. 반복적으로 받고 싶다고 하면 트름은 써가지고 이런 식으로 해주시면 될 것 같아요. 이런 식으로 while문 추가해주시면 계속 클라이언트를 입력을 해주는 게 아니라 계속 클라이언트를 실행해주시는 게 아니라 계속 입력을 반복적으로 받고 끝날 때 브레이크는 걸어두어야겠죠. 그래서 만약에 유저 인풋에 만약에 뭐 이렇게 할까요? 저는 큐를 많이 써서 이런 식으로 해서 브레이크도 걸어주시면 구현이 가능할 것 같습니다 이렇게 해서 얘도 실행을 해볼게요 보시면은 네, 뭐 아까 했던 것처럼 해줄 수 있겠죠? 만약에 이런 질문을 했어요. 패스 데이터 네. 이런 식으로 또 받아오고 계속해서 지금 질문을 입력하라고 하고 있죠. 이렇게 계속 반복적으로 여러분들이 원하시는 에이전트도 구현을 해줄 수가 있습니다. 네, 그럼 여기까지 하면 데이터 분석 에이전트를 MCP를 통해서 한번 구현을 해봤습니다. 실제로 저는 이제 꽤 간단한 튜토리얼을 좀 보여드린 것 같고 이제 마지막에 제가 보여드린 것처럼 이 에이전트는 여러분들이 원하시는 형태로 이 세션 안에서 관리를 해주고 또 원하는 대로 커스텀이 가능하기 때문에 그런 부분들을 또 다양하게 시도를 해보시면 좋을 것 같습니다. 또 제가 한 데이터 분석 뿐만이 아니라 여러분들이 원하시는 주제를 하나 잡아서 그 프로젝트에서 필요한 도구들을 한번 직접 구현도 해보시고 또 프롬프트도 저보다 훨씬 더 다양한 프롬프트도 한번 짜보시고 이렇게 진행을 하실 수도 있을 것 같습니다. 그럼 이번 영상은 여기까지 하겠습니다. 감사합니다.