프라이빗 AI 챗봇 스택 구축하기: NanoGPT + Ollama + Python
요약
API 중단 및 속도 제한 문제를 해결하기 위해 NanoGPT와 Ollama를 결합한 자동 폴백(Fallback) 시스템 구축 방법을 소개합니다. NanoGPT를 기본 모델로 사용하고, 실패 시 로컬의 Ollama로 전환하며, 최악의 경우 메시지 큐를 사용하는 아키텍처를 제안합니다.
핵심 포인트
- NanoGPT와 Ollama를 활용한 이중화 스택 구축
- API 장애 시 로컬 모델로 자동 전환되는 폴백 메커니즘
- 서비스 안정성을 위한 메시지 큐(Queue) 도입의 중요성
- NanoGPT 사용 시 비용 절감 및 Ollama의 컨텍스트 관리 팁
API 중단으로 인해 내 챗봇이 먹통이 되는 것에 지쳤습니다
저는 커뮤니티 Discord를 위해 작은 챗봇을 운영하고 있습니다. 엄청난 규모는 아닙니다. 하루에 약 200개 정도의 메시지가 오갑니다. 하지만 OpenAI에 서비스 중단(Outage)이 발생하거나 속도 제한(Rate-limit)이 걸릴 때마다, 봇은 그냥... 죽어버렸습니다. 사용자들은 에러 메시지를 받게 되고, 저는 새벽 2시에 알림을 받으며 상황을 복구하기 위해 허둥지둥 움직여야 했습니다.
그래서 저는 자동으로 폴백(Fallback)되는 스택을 구축했습니다. NanoGPT를 기본(Primary)으로 사용하고, Ollama를 로컬 폴백(Local fallback)으로 사용합니다. NanoGPT의 API가 다운되면 로컬 모델로 전환됩니다. 만약 둘 다 다운되면 메시지를 큐(Queue)에 쌓아두고 재시도합니다. 이제 더 이상 새벽 2시에 호출당할 일은 없습니다.
전체 설치 과정을 확인하고 싶다면 훌륭한 NanoGPT 설정 가이드가 있습니다. 여기서는 Python 통합에 집중하겠습니다.
아키텍처 (The Architecture)
아이디어는 간단합니다. 먼저 NanoGPT를 시도하고(저렴하고 빠릅니다), 실패하면 Ollama로 폴백하며(로컬, 무료, 항상 사용 가능), 둘 다 실패하면 큐에 저장합니다.
사용자 메시지 -> NanoGPT API (기본)
|
v (실패 시)
...
환경 설정 (Setting Up the Environment)
# 프로젝트 생성
mkdir private-chatbot && cd private-chatbot
python -m venv venv && source venv/bin/activate
...
Ollama가 로컬에서 실행 중인지 확인하세요. 아직 설정하지 않았다면:
curl -fsSL https://ollama.ai/install.sh | sh
ollama pull llama3.1:8b
챗봇 클래스 (The Chatbot Class)
이것이 핵심입니다. 자동 폴백 기능을 갖추고 두 제공업체를 모두 처리하는 클래스입니다:
import os
import json
import time
...
테스트하기 (Testing It)
import asyncio
async def main():
...
이를 프로덕션 환경에서 운영하며 배운 점
NanoGPT의 지연 시간(Latency)은 가변적입니다. 때로는 200ms, 때로는 2s가 걸립니다. Ollama 폴백은 제 서버(3090에서 llama3.1:8b 실행 중)에서 네트워크 홉(Network hop)이 없기 때문에 실제로 더 빠릅니다.
Ollama의 컨텍스트 윈도우(Context window)가 중요합니다. 8B 모델은 4K 컨텍스트를 잘 처리하지만, 그 이상으로 넘어가면 품질이 급격히 떨어집니다. 제가 히스토리를 20개의 메시지로 자르는(Truncate) 데에는 이유가 있습니다.
큐(Queue)가 당신을 구해줄 것입니다. 두 제공업체가 모두 다운되었을 때(3개월 동안 두 번 발생했습니다), 큐가 있다면 사용자는 에러 대신 결국에는 응답을 받게 됩니다.
비용 비교. 요청당 약 $0.001인 NanoGPT와 약 $0.01인 OpenAI를 비교하면 — 하루 200개의 메시지 기준 하루 $0.20 대 $2입니다. 1년이면 $73 대 $730입니다. Ollama 폴백(Fallback)은 무료입니다.
NanoGPT의 모든 기능을 탐색하고 싶다면, 여기서 시작하세요. 그들의 가격 모델은 제가 발견한 API 액세스 방식 중 진정으로 최고입니다.
왜 모든 것에 Ollama만 사용하지 않나요?
저도 시도해 보았습니다. 두 가지 문제가 있었습니다. 첫째, 제 서버의 GPU는 다른 워크로드와 공유되므로 부하가 걸리면 Ollama가 느려집니다. 둘째, 8B 모델은 복잡한 추론(Reasoning)에 있어 NanoGPT의 모델만큼 뛰어나지 않습니다. 하이브리드(Hybrid) 접근 방식은 저렴한 기본 모델과 보장된 폴백을 통해 두 방식의 장점을 모두 제공합니다.
전체 설정 체크리스트
- NanoGPT API 키를 받으세요
- Ollama를 설치하고 모델을 풀(Pull) 하세요
- 위의 코드를 복사하세요
.env변수를 설정하세요python chatbot.py로 실행 및 테스트하세요- Discord 봇 / Telegram 봇 / 원하는 어떤 프론트엔드(Frontend)로든 감싸세요
전체 코드는 약 150줄의 Python으로 이루어져 있습니다. 프레임워크도, 마법 같은 기술도 없으며, 그저 폴백 로직이 포함된 API 호출뿐입니다. Python 3.10 이상이 설치된 모든 머신에서 작동합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기