혹시 회의록 작성 때문에 골치 아팠던 적, 다들 한 번쯤 있으시죠? 저 역시 이전 프로젝트에서 리포트 요약 챗봇을 개발하며, 회의록을 포함한 체계적인 문서화의 중요성을 뼈저리게 느꼈어요.
회의 내용을 일일이 기억해서 꼼꼼히 정리하는 것도, 나중에 필요한 정보를 찾는 것도, 심지어 누군가에게 간단한 질문을 하는 것조차 망설여질 때가 많았습니다.
그러던 중, "오늘의 집" 기술 블로그에 소개된 AI 인턴 '오집사' 개발기였습니다! '오집사'는 Amazon Bedrock을 활용하여 구축된 사내 챗봇으로, 슬랙(Slack)에 배포되어 팀원들의 업무를 돕는다고 합니다.
사용자가 Slack의 커맨드를 활용해 오집사를 호출하면, 해당 질의는 Amazon Bedrock Agent로 전달.
Agent는 연결된 Knowledge Base에게 해당 질의를 전달.
Knowledge Base에서 답변과 가장 관련성이 높은 정보를 Amazon OpenSearch Vector Store에서 조회하여 제공.
S3에 저장되어 있는 데이터가 업데이트 된 경우, Amazon OpenSearch Vector Store와 동기화 과정을 수행.
Notion Data Parser 코드가 주기적(1주일에 한번)으로 동작하며 Notion에 저장된 데이터를 Markdown 형식으로 다운받아 S3에 저장.
특히, 스레드에 쌓인 이전 논의 이력을 빠르게 파악하거나, 사내 문서 검색이 필요할 때 등, 다른 페이지로 이동 없이 슬랙 내에서 바로 '오집사'를 호출하여 사용할 수 있다는 점이 매력적으로 다가왔습니다.
이 글을 읽고, 저도 우리 팀의 과거 노션 데이터를 활용하여, 정보 접근성은 높여주는 챗봇을 만들어 보기로 결심했습니다.
"오늘의 집"은 '오집사' 개발에 Amazon Bedrock을 활용했다고 합니다. Amazon Bedrock은 LLM, 임베딩 모델, 벡터 스토어 등 AI 개발에 필요한 다양한 기능을 제공하는 플랫폼입니다. 하지만, 저는 프로토타입으로 빠르게 구현해보고, 비용적인 측면(취준생이기에,,)도 고려하여, LLM(OpenAI API)을 제외한 나머지 부분은 오픈소스 기술을 적극 활용해 보려고 합니다. 이를 통해, '오집사'와 유사한 기능을 제공하면서도, 우리 팀의 상황에 맞는 챗봇을 구축할 수 있을 것입니다.
제가 구상하고 있는 챗봇의 주요 기능은 다음과 같습니다.
노션 데이터, 기반의 챗봇
우리 팀의 노션 페이지들을 챗봇과 연결합니다.
프로젝트 문서, 회의록, 업무 매뉴얼 등, 흩어져 있던 정보들이 챗봇의 지식 베이스가 됩니다.
척척 답변하는 Q&A
"A 프로젝트 디자인 가이드는 어디 있지?", "지난 회의 때 B 기능 출시 일정은 어떻게 정해졌더라?" 같은 질문에, 챗봇이 맥락을 파악하여 가장 관련 있는 답변을 찾아줍니다.
기대 효과: 업무 효율성 향상 및 소통 개선
정보 접근성 향상: 필요한 정보를 빠르고 쉽게 찾을 수 있습니다.
업무 효율성 증대: 단순 반복적인 업무를 챗봇에게 맡겨, 더 중요한 일에 집중할 수 있습니다.
소통 개선: 누구나 쉽게 정보에 접근하고, 질문할 수 있는 환경을 조성합니다.
지식 자산 축적: 팀의 지식과 노하우를 체계적으로 축적하고 관리할 수 있습니다.
예정된 기술 스택
FastAPI: 빠르고 효율적인 챗봇 API 서버를 구축
LangChain: RAG 모델 구현
Sentence Transformers: 문서의 의미를 벡터로 표현해주는 임베딩 모델
ChromaDB: 벡터 데이터베이스
OpenAI API: 인공지능 API입니다.
Docker: 컨테이너화
Jenkins: CI/CD 파이프라인 구축
Grafana & Prometheus: 모니터링, 대시보드로 시각화
Slack API: 사용자와 챗봇을 연결하는 편리한 인터페이스를 제공.
Notion API: 노션 데이터를 챗봇에 연동.
Git, GitHub: 코드 버전 관리와 협업
챗봇
슬랙
사용자는 익숙한 슬랙에서 챗봇에게 질문하거나, @mention으로 호출.
RAG
FastAPI로 구축된 챗봇 API는 사용자의 질문을 분석.
RAG(Retrieval-Augmented Generation) 모델이 핵심 역할을 합니다.
Retrieval: 사용자 질문을 벡터로 변환하고, ChromaDB에서 가장 유사한 문서를 검색.
Generation: LangChain이 OpenAI API에 검색 결과와 질문을 전달하여, 자연스러운 답변을 생성.
데이터는 노션
Notion Data Parser가 노션 API를 통해, 필요한 데이터를 추출하고 가공.
초기에는 추출된 데이터를 S3에 임시 저장하지만, 추후 더 효율적인 스토리지를 고려할 예정.
Sentence Transformers로 생성된 임베딩은 ChromaDB에 저장.
챗봇 실시간 모니터링
Grafana와 Prometheus로 챗봇의 성능, 리소스 사용량, 에러 등을 실시간으로 모니터링.
자동화로 효율성 극대화!
Git과 GitHub로 코드 버전 관리를 하고, Docker로 챗봇 애플리케이션을 컨테이너화.
Jenkins를 통해 CI/CD 파이프라인을 구축하여, 코드 변경 시 자동 빌드, 테스트, 배포.
Webhooks를 활용하여, GitHub나 노션(Zapier 경유) 이벤트 발생 시 Jenkins 작업이 트리거되도록 하여, 데이터 업데이트, 모델 재학습, 배포 등을 자동화.
작업 기간은 2주(1월 27일 ~ 2월10일) 정도로 생각하고 있고, MLOps 과정 연습을 위한 Toy project입니다.