
ARC-AI: MERN 스택을 사용하여 구축한 자율형 AI 에이전트 워크스페이스 (RAG 메모리, 실시간 웹 리서치, WhatsApp 자동화
요약
MERN 스택을 기반으로 구축된 ARC-AI는 RAG 메모리, 실시간 웹 리서치, WhatsApp 자동화 기능을 갖춘 자율형 AI 에이전트 워크스페이스입니다. 단순한 챗봇을 넘어 장기 기억과 선제적 루틴 실행을 통해 실제 행동이 가능한 셀프 호스팅 도구를 지향합니다.
핵심 포인트
- MERN 스택 기반의 풀스택 자율형 AI 에이전트 구축
- RAG를 활용한 4단계 계층형 메모리 시스템 구현
- WhatsApp, 이메일 등 외부 서비스와 연동되는 실행 능력
- 공급자 중립적 런타임 및 샌드박스 코드 실행 환경 제공
🤖 ARC-AI란 무엇인가?
**ARC-AI (Autonomous Real-time Conversational Agent)**는 제가 구축해 온 풀스택(full-stack), 음성 활성화 AI 어시스턴트로, 일반적인 "시스템 프롬프트가 있는 챗봇"을 넘어섭니다. 이는 장기 기억(long-term memory), 실시간 웹 리서치(live web research), 선제적인 예약 루틴(proactive scheduled routines), 그리고 실제로 _행동(act)_할 수 있는 능력(WhatsApp 메시지 전송, 이메일 전송, 자체 UI 제어 등)을 갖춘 지속 가능한 AI 워크스페이스입니다.
ChatGPT, Claude, 그리고 Cursor 사이의 어딘가에 위치하지만, 셀프 호스팅(self-hosted)이 가능하고 MERN 스택 기반이며 완전히 당신의 소유인 도구라고 생각하면 됩니다.
🔗 라이브 데모: https://arc-ai-project.vercel.app/
🔗 소스 코드: https://github.com/Aashutosh31/arc-ai-project
📽️ 최신 영상: https://www.instagram.com/aashutosh_bairagi.31/reel/DYmluEPxOhf/
🎥 전체 워크스루:
구축 이유
대부분의 "AI 어시스턴트"는 반응형(reactive)입니다. 사용자가 질문하면 답하고, 탭을 닫는 순간 모든 것을 잊어버립니다. 저는 실제 에이전트(agent)처럼 동작하는 무언가를 원했습니다. 즉, 중요한 것을 기억하고, 스스로 조사하며, 백그라운드에서 예약된 작업을 실행하고, 채팅창 안에 갇혀 있는 대신 실제 세상(브라우저, WhatsApp, 이메일)으로 뻗어 나갈 수 있는 도구 말입니다.
이는 단순히 LLM API 호출을 연결하는 것이 아니라, 실제 인프라를 구축해야 함을 의미했습니다. 즉, 공급자 중립적인 런타임(provider-agnostic runtime), 워크스페이스 격리(workspace isolation), 벡터 메모리(vector memory), 샌드박스 코드 실행(sandboxed code execution), 그리고 프로덕션급 라이프사이클 관리(production-grade lifecycle management)가 필요했습니다.
🧠 핵심 기능
무한한 메모리 (RAG)
ARC-AI는 단순히 채팅 로그를 보관하는 것에 그치지 않습니다. 데이터 오염을 방지하고 검색(retrieval)의 정확도를 유지하기 위해 메모리를 네 가지 별도의 계층으로 분리합니다:
- 대화 기록 (Conversation History)
- 작업 컨텍스트 (Working Context)
- 의미론적 메모리 (Semantic Memory)
- 장기 사용자 사실 (Long-Term User Facts)
검색(retrieval)은 Pinecone 벡터 검색을 사용하여 관련성 점수 산정(relevance scoring), 최신성 가중치 부여(recency weighting), 중복 억제(duplicate suppression) 과정을 거칩니다. 이를 통해 어시스턴트는 알고 있는 모든 정보를 프롬프트에 쏟아붓는 대신, 우선순위가 높고 노이즈가 적은 컨텍스트를 가져옵니다.
🎥 라이브 비전 및 멀티모달 라우팅 (Live Vision & Multimodal Routing)
ARC-AI는 볼 수 있습니다. 웹캠이 활성화된 상태에서 말을 하면, 현재 프레임을 캡처하여 음성 입력과 동일한 실시간 소켓 페이로드(socket payload)로 직접 전달합니다. 시각적 컨텍스트는 시각 기능이 있는 모델(Pixtral)로 라우팅되며, 폴백(fallback) 시 시각 정보가 조용히 유실되는 것을 방지하기 위한 가드레일(guardrails)이 적용됩니다.
🌐 라이브 웹 리서치 (Live Web Research)
실시간 DOM 스크래핑 (Cheerio)과 API 기반의 검색, 날씨, 뉴스 검색 기능을 결합하여, 답변이 학습 데이터의 컷오프(cutoff) 시점에 국한되지 않도록 합니다.
⏰ 프로액티브 루틴 엔진 (Proactive Routine Engine)
일상적인 영어로 요청하면 이를 예약된 크론 잡(cron job)으로 변환합니다. 반복되는 알림, 지연된 작업, 백그라운드 루틴 등을 수동적인 크론 구문(cron syntax) 입력 없이 수행할 수 있습니다.
💬 WhatsApp 자동화 (WhatsApp Automation)
통합된 WhatsApp 워크플로우를 통해 메시지 작성 및 전송을 완전히 자율적으로 수행하므로, 에이전트가 앱 외부에서 실제로 사용자(또는 타인)에게 연락할 수 있습니다.
🖥️ UI 액추에이션 (UI Actuation)
어시스턴트는 대화 컨텍스트에 따라 자신의 인터페이스에서 직접 동작할 수 있습니다. 테마 변경, 웹사이트 열기, 미디어 재생, 클립보드 복사 등을 수행합니다.
🏗️ 내부 구조: 공급자 불가지론적(Provider-Agnostic), 워크스페이스 격리형 런타임 (Runtime)
이 아키텍처는 현재에 이르기까지 몇 차례의 주요한 진화를 거쳤습니다:
- 공급자 오케스트레이션 런타임 (Provider-orchestrated runtime) —
LLMRouter가 Gemini (추론, 멀티모달, 계획, 긴 컨텍스트)와 Mistral (빠름, 저렴함, 요약, 폴백) 사이를 동적으로 선택하며, 공급자 간의 스트리밍 연속성과 도구 호출 (tool-call) 일관성을 유지합니다. - 멀티 워크스페이스 런타임 (Multi-workspace runtime) — 모든 워크스페이스는 각각 독립된 환경으로 동작합니다. 대화, 메모리, 실행, 그리고 Pinecone 벡터 네임스페이스 (vector namespaces)까지 모두 워크스페이스별로 범위가 지정되어 워크스페이스 간의 데이터 유출이 전혀 발생하지 않습니다.
- 실행 격리 (Execution isolation) —
TaskPlanner/TaskExecutor시스템은 재시도, 복구 및 재계획 (replanning) 과정을 해당 작업이 시작된 워크스페이스 내로 엄격히 제한합니다.
- 실시간 Socket.IO 파이프라인 (Realtime Socket.IO pipeline) — 음성 또는 텍스트 입력이 ai:stt:final을 통해 흐르고, 생성을 위해 라우팅되며, 토큰 단위로 스트리밍됩니다. 또한 중단 상황에서도 깔끔한 최종 완료를 보장합니다.
🔥 v1.0.0 (첫 번째 안정화 버전)의 새로운 기능
최신 릴리스의 핵심은 ARC-AI를 단순한 "멋진 데모"에서 실제로 프로덕션 환경에 셀프 호스팅 (self-host) 할 수 있는 수준으로 만드는 것이었습니다:
보안 강화 (Security hardening)
- LLM이 실행하는 모든 코드에 대해, 지원이 중단되고 취약한
vm2실행기를 QuickJS WebAssembly 샌드박싱 (sandboxing) (quickjs-emscripten)으로 교체하여 RCE (원격 코드 실행) 취약점을 해결했습니다. GOOGLE_TOKEN_ENCRYPTION_KEY가 이제 필수 환경 변수(env var)가 되었습니다. 이 변수가 누락되면 서버는 보안에 취약한 상태로 조용히 폴백(fallback)하는 대신, 시작 시 즉시 오류를 발생시키며 종료됩니다.- 와일드카드 CORS를 동적 오리진 리졸버(dynamic origin resolver)로 교체하여, 인증된 요청(credentialed-request) 검증 문제를 해결했습니다. 런타임 신뢰성 (Runtime reliability)
- 활동 인식 유휴 리퍼(activity-aware idle reaper)가 5분간 활동이 없는 headless Chromium (WhatsApp) 세션을 종료하여, RAM/CPU 점유를 방지합니다.
SIGINT/SIGTERM발생 시 우아한 종료(Graceful shutdown)를 지원합니다. HTTP 서버, MongoDB 연결, 그리고 Puppeteer/WhatsApp 프로세스가 모두 병렬로 깔끔하게 정리됩니다.- 클라이언트 파괴(destruction)와 복구 훅(recovery hooks) 사이의 레이스 컨디션(race conditions)을 수정했습니다. 온보딩 및 배포 (Onboarding & deployment)
- Docker Compose가 이제 하드코딩된 호스트 경로 대신 이식 가능한 상대적 바인드 마운트(relative bind mounts)를 사용합니다.
- 루트와 서버 모두를 위한 전체 .env.example 템플릿을 제공하며, 모든 LLM 라우팅/모델/타임아웃 옵션을 문서화했습니다.
💻 기술 스택 (Tech Stack)
| 계층 (Layer) | 기술 (Technology) |
|---|---|
| 프론트엔드 (Frontend) | React, Vite, Tailwind CSS, Web Speech API |
| ... |
⚙️ 직접 시도해보기
git clone https://github.com/Aashutosh31/arc-ai-project.git
cd arc-ai-project/server
npm install
...
또는 Docker로 실행하세요:
cd server
cp .env.example .env
docker compose up --build
전체 설정 지침(프론트엔드, Docker, 지속적인 WhatsApp 세션)은 README에 있습니다.
다음 단계 (What's next)
저는 멀티 워크스페이스 런타임을 더욱 강화하고 자율형 도구 생태계를 확장해 나가는 중입니다. 직접 사용해 보시고, 문제를 발견하거나 아이디어가 있다면 피드백을 진심으로 환영합니다. 저장소(repo)에 이슈(issues)와 PR(Pull Requests)이 열려 있습니다.
이 프로젝트가 흥미로우셨다면, 저장소에 ⭐를 남겨주시는 것이 큰 힘이 됩니다.
🔗 GitHub: github.com/Aashutosh31
🔗 LinkedIn: https://in.linkedin.com/in/aashutosh-bairagi-559aa530b
🐦 X/Twitter: @Aashutosh_dev31
🌐 포트폴리오: aashutoshbairagi.vercel.app
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
