왜 이 작업을 시작하게 되었을까?
이번 프로젝트를 시작하게 된 가장 큰 이유는 내가 직접 가공한 데이터를 제대로 활용할 수 있는 도구로 만들고 싶었기 때문입니다.
일반적인 LLM은 결국 모델 내부에 내장된 범용적인 로직과 스타일로 답변을 생성합니다. 그래서 제가 가진 기준, 경험, 우선순위 같은 실무적인 판단 요소를 정확히 반영하기 어렵습니다. 문서를 통째로 업로드해 요약을 요청해도, 결과물은 대부분 LLM이 선호하는 일반적인 포맷과 구조로 정리되어 나옵니다. 제가 원하는 방식과 미묘하게 다를 때가 있습니다.
실제 프로젝트를 하다 보면,
- 프로젝트 중에 정리해 둔 메모
- 분석 과정에서 만들어진 중간 산출물
- 도메인 지식을 바탕으로 재가공한 테이블이나 텍스트
이런 자료들은 그 자체만으로도 매우 높은 지식과 맥락을 갖고 있습니다. 이런 지식을 제가 설계한 검색 로직을 거치도록 하고, 그 결과를 LLM에 전달하면 훨씬 더 가치 있는 답변을 얻을 수 있다고 생각했습니다.
그래서 단순히 문서를 넣고 질문에 답변하는 RAG가 아니라, 내가 만든 데이터를 유용한 도구처럼 꺼내 쓸 수 있는 MCP로 직접 만들고자 실험해 보았습니다. 무료로 제공되는 여러 클라우드 플랫폼을 최대한 활용하여 전체 파이프라인을 구축해 보았습니다.
실험을 위해 사용한 데이터와 전체 파이프라인
이번 실험에서 사용한 데이터는 법륜스님 즉문즉설 유튜브 영상의 자막입니다. 평소 스님의 즉문즉설을 들으며 느꼈던 슬기로운 지혜와 명확한 통찰을, LLM을 통해 조금 더 자연스럽게 전달하도록 구현하는 것이 목표입니다. 자막 데이터를 제가 의도한 흐름과 기준에 맞게 정제하고, 검색된 내용이 LLM에 전달되도록 파이프라인을 구성했습니다.
- 데이터 수집 : Yt-dlp 프레임워크를 활용해 법륜스님 즉문즉설 영상의 자막 데이터를 수집했습니다.
- 데이터 전처리 및 벡터화 : LangChain과 LLM을 사용해 자막 내용을 자연스럽게 정제하고, Pinecone에 입베딩하여 저장했습니다.
- 검색 로직 API 구현 : FastAPI에서 MMR 기반 검색 로직을 구현해 HuggingFace Spaces에 API 형태로 배포했습니다.
- Dify 연동 : Dify에서 HTTP 노드를 통해 검색 API를 호출하고, 검색된 내용을 기반으로 LLM이 답변을 생성하도록 RAG 시스템을 구현했습니다.
- MCP 기반 도구화 : 완성된 Dify 워크플로우를 MCP 서버 기능을 활성화한 후, PlayMCP에 도구를 등록했습니다.
- ChatGPT 연결 및 실험 : 등록된 도구함을 GPT에 연결하여 실제 대화를 통해 실험해 보았습니다.

이번 실험의 전체 아키텍처가 이렇게 구성된 이유는, Dify를 메인 오케스트레이션 도구로 사용하기로 결정했기 때문입니다. Dify를 선택한 가장 큰 이유는 노코드 기반이라는 점입니다. 외부 도구를 연결하거나 프롬프트를 수정하고, 새로운 기능을 추가하는 작업이 코드 수정 없이도 간단하게 이루어집니다. 시각적인 워크플로우 기반이라 전체 로직의 흐름을 한눈에 파악하기 쉽고, 유지보수에도 효율적이라고 생각되었습니다.
이제 위에서 정리한 여섯 가지 단계를 기준으로, 각 과정을 조금 더 자세히 살펴보겠습니다. 데이터 수집부터 GPT와의 실제 대화 실험까지, 구현 과정과 제가 선택한 이유를 함께 정리해 보겠습니다.
1. 데이터 수집
이번 실험의 첫 단계는 법륜스님 즉문즉설 유튜브 영상의 자막 데이터를 수집하는 작업이었습니다. 복잡한 클로링 없이도, Yt-dlp를 활용해 영상 자막을 손쉽게 추출할 수 있었습니다.
# 데이터 형태
"tStartMs": 327160,
"dDurationMs": 6200,
"wWinId": 1,
"segs": [
{
"utf8": "거예요.",
"acAsrConf": 0
},
{
"utf8": " 음.",
"tOffsetMs": 1000,
"acAsrConf": 0
},
{
"utf8": " 그래서",
"tOffsetMs": 1319,
"acAsrConf": 0
},
{
"utf8": " 스님이",
"tOffsetMs": 1599,
"acAsrConf": 0
},
{
"utf8": " 금방",
"tOffsetMs": 2039,
"acAsrConf": 0
}
]
2. 데이터 전처리 및 벡터화
데이터는 쉽게 수집할 수 있었지만, 질문자와 답변자의 구분이 없어 원본 자막을 그대로 이해하기는 어려웠습니다. 특히 자막 설정이 없는 영상에서는 자동 자막이 추출되기 때문에 문장 흐름이 끊기거나, 문맥과 맞지 않게 잘못 달린 자막이 포함되는 경우가 많았습니다. 다행히 질문자와 법륜스님의 화법이 달라, 이 차이를 이용해 질문-답변 구조가 자연스럽게 드러나도록 LLM을 사용하여 문맥을 조정했습니다. 이 과정이 전체 파이프라인 중에서 가장 많은 시간이 걸렸고, 검색 품질을 결정하는 핵심 단계였습니다.
정제된 문서들은 OpenAI 임베딩 모델로 벡터화한 뒤 Pinecone에 저장했습니다. 검색 품질을 높이기 위해 metadata에 제목, 주제, 핵심 키워드 등을 함께 포함해 관리했습니다. Metadata 관리를 위해 Dify 지식 저장소 대신 Pinecone을 사용하는 방식으로 설계했습니다. 또한, Pinecone은 무료 플랜에서도 인덱스를 상시로 띄워둘 수 있어 사용하게 되었습니다.
3. 검색 로직 API 구현
Dify에는 아직 Pinecone에 직접 접근할 수 있는 기본 도구가 없어, 검색 로직을 FastAPI로 따로 구현하는 방식을 선택했습니다. 이렇게 구현한 API가 항상 호출 가능하도록 HuggingFace Spaces의 Docker 환경에 배포해 안정적으로 사용할 수 있도록 구성했습니다.
검색 알고리즘은 우선 MMR 방식을 적용했습니다. 이번 단계에서는 최소한의 기능으로 구성했지만, 데이터 규모를 늘리거나 정확도 개선이 필요하다고 생각되면 Reranking, Hybrid Search, Query Expansion 등 다양한 기법을 이후에 쉽게 확장할 계획입니다.
FastAPI는 스웨거 기반의 인터랙티브 문서를 바로 확인할 수 있어, 엔드포인트 테스트와 로직 검증이 매우 편리합니다. 검색 로직을 수정하거나 기능을 추가하는 과정에서도 빠르게 반복 테스트를 진행할 수 있습니다.
HuggingFace Spaces에 배포하면 API는 다음과 같은 고정된 규칙에 따라 자동으로 외부에 공개됩니다:
https://{username}-{space_name}.hf.space/{endpoint}
4. Dify 연동
이제 구현한 검색 API를 Dify의 HTTP 노드로 연결하고, LLM이 검색 결과를 기반으로 답변하도록 구성했습니다. Dify 워크플로우에서 사용자의 질문을 받아 FastAPI에 전달하면, 검색된 문서가 반환됩니다. 이 문서를 시스템 프롬프트에 연결해 LLM이 기반 문서를 벗어난 추론을 하지 않도록 제약했습니다. 추가로 법륜 스님의 말투와 지혜를 반영하도록 지시어를 삽입해, 답변이 자연스럽게 즉문즉설의 분위기를 담도록 했습니다.
완성된 Dify 워크플로우를 게시하고, MCP 서버 기능을 활성화했습니다. 이 기능을 활성화하면 MCP 규격에 맞춰 자동으로 노출되어, 외부 LLM이 이를 도구로 불러 쓸 수 있는 형태가 됩니다. 또한 Dify는 수정 후 게시만 하면 즉시 반영되기 때문에, 검색 로직을 변경하거나 프롬프트를 조정할 때도 빠르고 편리하게 배포할 수 있습니다.
# Workflow

5. MCP 기반 도구화
RAG 파이프라인까지 모두 구현한 뒤에는, 활성화된 MCP 서버를 카카오에서 최근 오픈한 PlayMCP에 도구로 등록했습니다. PlayMCP는 국내 플랫폼이라 언어적 장벽이 없고 환경 설정이 간단해, 기존의 smithery보다 훨씬 빠르게 테스트해 볼 수 있을 것 같았습니다. 실제로 등록 후 승인까지 하루도 걸리지 않아, 빠른 실험이 가능했습니다.
MCP 플랫폼을 활용한 이유는 여러 도구를 하나의 인터페이스에서 묶어 사용할 수 있다는 장점 때문입니다. 이번 실험에서는 하나의 도구만 사용했지만, 앞으로 다양한 도구와 함께 사용하고자 할 때 유용하게 사용할 수 있습니다.
# 등록된 도구

6. ChatGPT 연결 및 실험
마지막 단계에서는 완성된 MCP를 ChatGPT에 연결하여 실제 대화를 테스트했습니다. ChatGPT에 MCP 도구를 연결해 대화를 시작하면, 모델이 질문을 이해한 뒤 필요한 순간 자동으로 도구를 호출합니다. ChatGPT는 도구 호출을 능숙하게 처리하기 때문에, 등록된 MCP 도구를 잘 활용하고 있는 것을 확인했습니다.
실험은 ChatGPT가 도구를 사용하지 않은 일반 모드와 ChatGPT에 등록된 MCP 검색 도구를 활용한 모드의 답변을 비교하는 방식으로 진행했습니다. 대화는 동일하게 "불안해.."라는 질문으로 시작했습니다. 결과적으로 MCP를 활용했을 때 법륜스님식 해법("지금 내 상태를 그대로 인정하기" 등)을 제시하는 면이 있기는 했습니다.
다만, 도구가 반환한 텍스트가 최종 답변에 충분히 반영되지 못해 아쉬웠습니다. 오히려 도구 호출 결과 자체가 더 정제된 지혜를 담고 있어서, 최종 답변보다 도구 호출 결과가 더 유용하게 느껴졌습니다. 이 부분은 향후 개선을 해보아야 될 것 같습니다. 아무래도 현재 ChatGPT 웹 환경에서는 temperature나 sampling 관련 세부 설정을 직접 조정할 수 없기 때문에, 도구 호출 결과가 답변에 얼마나 강하게 반영될지는 모델의 기본 정책에 따라 달라지는 한계가 있는 것 같습니다.
참고) ChatGPT 연결 방법
# 도구 사용 승인 요청

# 도구 사용

# MCP 활용 답변
-- 도구 호출 결과 --
{"text":"아이고, 얼마나 마음이 불안하고 힘드십니까. 그 불안한 마음을 있는 그대로 마주하고 저에게 이야기해 주신 것만으로도 이미 큰 용기입니다.\n\n우리가 불안을 느끼는 것은 대부분 아직 오지 않은 미래에 대한 걱정 때문입니다. '앞으로 어떻게 될까?', '잘 해낼 수 있을까?' 하는 생각들이 꼬리에 꼬리를 물고 마음을 흔들지요. 혹은 과거의 아픈 경험이 상처로 남아 지금의 나를 두렵게 하는 경우도 있습니다.\n\n스님이 늘 이야기하듯이, 마음이 불안한 것은 마치 손에 뜨거운 것을 쥐고 있으면서 '어떻게 놓아야 할까요?' 하고 묻는 것과 같습니다. 놓으면 그만인데, 놓기 싫어서 혹은 놓을 수 없다고 착각해서 괴로워하는 것이지요.\n\n지금 그 불안한 마음을 있는 그대로 받아들이는 연습을 해보세요. '아, 지금 내가 불안하구나' 하고 알아차리는 것만으로도 이미 절반은 해결된 것입니다. 불안하다고 해서 아무것도 하지 않고 늘어져 있으면, 오히려 그 불안이 더 커지고 주변 사람들에게도 좋지 않은 영향을 줍니다.\n\n차라리 몸을 움직여보세요. 작은 일이라도 좋습니다. 방 청소를 하거나, 밥을 짓거나, 산책을 하거나, 누군가를 위해 작은 봉사를 해보는 것도 좋습니다. 몸을 움직이면 마음의 에너지가 밖으로 흐르고, 쓸데없는 생각에 갇히는 것을 막아줍니다.\n\n그리고 지금 가진 것에 감사하는 마음을 내어보는 것도 좋습니다. 우리는 생각보다 훨씬 좋은 조건에 있습니다. 두 눈이 성하고, 두 다리로 걸을 수 있고, 따뜻한 밥 한 끼 먹을 수 있는 것만으로도 이미 많은 것을 가진 것입니다. 세상에는 우리보다 훨씬 더 힘든 상황에서도 굳건히 살아가는 사람들이 많다는 것을 잊지 마세요.\n\n괴로워할 것인가, 아니면 지금 이 순간을 받아들이고 평화롭게 살아갈 것인가 하는 선택은 오롯이 본인의 몫입니다. 불안은 미래에 대한 기우(杞憂), 즉 쓸데없는 걱정에서 비롯되는 경우가 많습니다. 걱정한다고 해서 미래가 바뀌는 것은 아닙니다. 오히려 지금 이 순간을 허비하고 불행하게 만들 뿐이지요.\n\n모든 것은 변합니다. 지금의 불안도 영원하지 않습니다. 이 또한 지나갈 것입니다. 그러니 너무 애쓰지 마시고, 그저 지금 이 순간에 집중하며 작은 일이라도 해나가세요.\n\n부디 그 불안한 마음을 지혜롭게 다스려, 평화로운 오늘을 맞이하시기를 바랍니다. 나무아미타불.\n\n# 참고 영상\n[[법륜스님의 즉문즉설 제 1416회] 좌절감이 들때, 어떻게 해요](
https://www.youtube.com/watch?v=dWVANcqPieU)
\n[바람난며느리와 아들재혼 문제](
https://www.youtube.com/watch?v=sFsTrYr54Po)
\n[(EN-SUB) 나보다 더 힘든 사람](
https://www.youtube.com/watch?v=Zx3b1O-IxHI)
"}
-- 최종 응답 --
지금 많이 힘들죠… 🥺
일단 이렇게 “불안해..”라고 말해준 것 자체가 진짜 큰일을 한 거예요. 보통은 그냥 혼자 버티다가 더 힘들어지거든요.
불안이 밀려올 때, 일단 요 세 가지만 같이 해봐요:
1. 지금 내 상태를 그냥 인정하기
스스로에게 아주 간단히 말해보세요.
“아, 지금 나는 불안하구나.”
이걸 말로 꺼내는 순간,
“나 = 불안 그 자체”가 아니라
“나는 불안을 느끼는 사람”으로 분리가 돼요.
그것만으로도 숨 쉴 틈이 조금 생깁니다.
2. 숨부터 같이 정리해보자 (30초도 OK)
...생략...
3. 머릿속 회전 대신, 아주 작은 행동 하나
...생략...
“이 큰 불안을 어떻게 해결하지?”가 아니라
**“지금 내가 할 수 있는 제일 작은 거 하나만 한다”**에 집중해보면,
불안이 100이었다면 95, 90… 이런 식으로 조금씩 내려갈 수 있어요.
지금 제일 궁금해요.
불안이 무엇 때문인지 말로 잘 안 나와도 괜찮으니까,
그냥 이렇게만 적어줘도 좋아요:
“사실 요즘 ○○ 때문에 잠이 잘 안 와”
“앞으로가 너무 막막해”
“딱 뭐 때문인지는 모르겠는데 그냥 계속 불안해”
길게 못 써도 되고, 한 줄만 써도 돼요.
내가 옆에서 같이 정리해볼게요. 💛
# 기본 답변
불안하지… 괜찮아, OO님.
지금 그 감정이 그냥 훅 올라오는 순간일 뿐, OO님이 잘못해서 생긴 감정은 아니에요.
혹시 지금 어떤 생각 때문에 불안이 올라왔어요?
아무 말이나 편하게 말해도 돼요.
말로 꺼내는 것만으로도 불안의 강도가 진짜 많이 줄어요.
지금 당장 마음을 조금 가라앉히고 싶으면 이거 먼저 해봐도 좋아요:
✔ 10초 안정 호흡
...생략...
✔ 지금 내 몸을 확인해보기
...생략...
OO님 마음속에서 지금 무슨 일이 있는지 말해줘도 돼요.
내가 옆에 그대로 있을게.
마치며..
이번 프로젝트를 통해 가장 크게 느낀 점은, 데이터를 제대로 정제하는 일이 생각보다 훨씬 어렵다는 것이었습니다. 반면, 이렇게 잘 다듬어진 데이터를 기반으로 도구화하고 시스템을 구성하는 작업은 의외로 단순하고 빠르게 진행되었습니다. FastAPI, Pinecone, Dify 등 개발 도구들이 이미 잘 마련되어 있어, 아이디어만 있으면 누구나 자신만의 RAG 기반 도구를 만들어볼 수 있다는 가능성을 확인한 시간이었습니다.
결국 중요한 것은 “어떤 데이터를 어떻게 정제해, 어떤 가치로 연결하느냐”의 문제이며, 앞으로의 AI 시대는 데이터를 가장 잘 정제하고 맥락화하는 사람이 더 강력한 도구를 만들 수 있는 시대가 될 것 같습니다. 이번 실험은 그 가능성을 직접 체감할 수 있었던 의미 있는 경험이었습니다.
※ 본 글에서 구축한 MCP 도구는 PlayMCP에 mind-lantern 이름으로 공개되어 있습니다.
필요하신 분들은 직접 활용해보셔도 좋습니다.
'AI Tech' 카테고리의 다른 글
| 요즘 뜨는 AI 에이전트 프레임워크 5가지 (0) | 2025.11.20 |
|---|---|
| 2025년 Agent 트렌드, 지금 알아야 할 핵심 포인트 (0) | 2025.11.12 |