AI 챗봇 로컬에서 만들기 — 이 사람이 만든 건 '생각하는 척'이 아니라 진짜 구조가 있는 AI야
인터넷 없이 돌아가는 AI 챗봇 로컬에서 만들기를 파이썬 18,000줄, 테스트 470개로 완성한 개발자가 전체 아키텍처를 공개했어.
왜 만들었냐
출발점은 단순했어. 외부 API가 죽었을 때 대화가 끊기는 게 싫었던 거야. 그냥 "Gemini 쓰다가 안 되면 끝" 이 아니라, 오프라인에서도 품질을 유지하는 시스템을 원했던 거거든. 거기다가 대화 맥락을 세션 넘어서 기억하고, 시간이 지날수록 스스로 행동 패턴을 개선하는 AI를 목표로 잡았어.
어떤 툴을 어떻게 썼냐
스택이 꽤 정교해.
- 기본 모델: Gemini 2.5 Flash (메인) + Ollama qwen3:4b (로컬 폴백)
- 메모리: ChromaDB — 의미 유사도 55% / 중요도 25% / 최신성 20% 가중치 하이브리드 검색
- 임베딩:
sentence-transformers all-MiniLM-L6-v2(384차원, 완전 오프라인) - 상태 저장: SQLite로 인지 상태 관리
- UI: FastAPI 웹(
localhost:8765) + Rich TUI + CLI 세 가지 동시 지원
핵심은 인지 파이프라인이야. Perception → Reflection → Integration → Aspiration → Expression 5단계로 처리되는데, 22개 플러그인이 글로벌 워크스페이스 이론(GWT) 기반으로 '주의 경쟁'을 벌여. 용량 한계 5개, 점수 기반 스포트라이트 메커니즘.
회로 차단기(circuit breaker)도 모듈별로 달려 있어서, Gemini가 세션 중간에 다운되면 Ollama가 자동 투입되고 — 사용자는 거의 못 느낀대.
성격 모델은 INFJ로 잡았는데, 이게 그냥 취향이 아니야. Ni(직관) = 장기 맥락 검색 가중치, Fe(감정) = 관계 컨텍스트 가중치, Ti(비판) = 내부 검토 패스, Se(감각) = 라이브 바디 스키마. 성격 유형이 설계 제약 시스템으로 기능한 거야.
결과는
수익 사례는 아니야. 근데 개발자가 공개한 포인트는 명확해 — "코드가 부끄럽지 않은 수준이 됐을 때 공개했다"는 거. GitHub 레포(timeless-hayoka/infj-bot)에 전체 코드가 올라가 있고, GWT 스코어링 구현과 하이브리드 검색 가중치에 대한 커뮤니티 피드백을 적극 구하는 중이야.
따라할 수 있는 포인트
AI 챗봇 로컬에서 만들기를 처음 시도한다면 이 구조에서 쪼개서 가져가면 돼.
- 폴백 구조부터 — Ollama + 회로 차단기 조합은 API 의존도 낮추는 가장 현실적인 방법이야
- ChromaDB 하이브리드 검색 — 순수 벡터 검색보다 중요도·최신성 가중치를 섞으면 맥락 품질이 올라가
- 성격 모델을 설계 제약으로 — 추상적인 AI 캐릭터 설정이 아니라, 모듈 동작 방식을 통제하는 규칙으로 쓸 수 있어
외부 서버 없이, 인터넷 끊겨도, 대화 맥락 기억하고 스스로 개선하는 AI — 이 사람은 그걸 코드로 증명했어.
🔗 참고 링크
- 원본 출처: I built a local AI companion with GWT, IIT proxy, ChromaDB hybrid retrieval, and Ollama fallback — here's every architectural decision I made and why
- 관련 AI 툴: Gemini · Ollama · ChromaDB · sentence-transformers · SQLite · FastAPI · Rich
댓글
댓글 쓰기