소개
기존에 만들어본 모바일 카톡봇 시스템을
구청의 실제 정책 환경 및 민원 응답 프로젝트에 적용해보고 싶어서
첫 번째 후속 사례로 도전하게 되었습니다.
“한방식권 정책이 뭐예요?”
“정산은 어떤 시간에 하나요?”
“식권을 분실했는데 다시 받을 수 있나요?”
이런 질문들을 카톡 오픈채팅방에서 실시간으로 안내해주는 Q&A 챗봇을 만들어보자는 목표였어요.
💡 한방식권이란? 바이브 코딩으로 웹앱을 만들었어요~ㅎ(제가 만든것은 아님)
구청이 시행하는 디지털 식권 정책으로, QR코드 기반 식권을 활용
직원은 식권을 그냥 사용만 하면 되고,
식당은 QR만 스캔하면 자동으로 팀별 사용량 정리가 되며,
점심담당자는 수기 집계나 보고 없이 바로 점심 통계 확인이 가능한 효율적인 시스템입니다.
진행 방법
(1) 사전작업 및 계획 수립 💡
Claude + Codex 병행 전략
우선 문서가 있어야. DB를 만들죠~노트북 lm 활용해서 기존의 자료 넣고 만들라고 했어요
Claude에게는 구조 설계를, Codex에게는 구현 가능성과 리스크 점검을 맡기고
각자의 제안을 서로에게 재검토시키는 것을 통해 균형적인 조합 아키텍처 도출
특히 DB 구조, 보안 인증, FTS5 사용 유무 등을 논의하며 최적화
사용 프롬프트
@/c:/Users/user/Documents/KaTokBot/한방 쿠폰 Q&A.md 이문서의 내용을 바탕으로 FastAPi서버에 DB로 내용을 넣어서, CatBot_Multiturn을 통해 질문, 답변에 해당하는 자료를 줄테니, 비슷한 내용를 찾아서 답변을 만드는 로직을 파이선으로 구축하는것을 검토해. 개발은 시작하지 말고 구현계획을 잘 만들자. 우리 환경에 맞게 아키텍처를 만들어라.최종 결정 요약
항목
Codex 우려
해결책
동시성 잠금
✅ High
WAL 모드 + Reload 시간 분리
스키마 오염
✅ High
화이트리스트 + 명시적 테이블명 검증
백업 전략
✅ Medium
Reload 시 자동 백업
보안 리스크
⚠️ Medium
API 키 인증 포함
(2) 초기 챗봇 및 서버 구성 🧱
휴대폰에 구버전 Google Play 앱 대신 메신저R 최신 APK 직접 설치
CatBot_Multiturn.js에 QA context 삽입 기능 추가FastAPI 서버를 GCP VM에 구성
/api/qa/reload: Q&A 마크다운 DB 적재/api/qa/search: 사용자 질의 → 유사 Q&A 반환 (FTS5 기반)
(3) RAG 전환 및 운영 고도화 🔁
RAG 방식으로 전환한 이유
키워드 기반 FTS5는 정확도 한계 존재
의미 기반 검색을 위해
sentence-transformers (ko-sbert-sts)적용벡터DB로 Chroma 사용 (
data/chroma_db)
전환 해결 과정 후 핵심 요약
항목
전환 내용
검색 정확도
FTS5 → ko-sbert-sts 의미 검색 전환
구조 설계
Chroma DB, SIMILARITY_THRESHOLD=0.7 적용
응답 포맷
QA 외 추가/추론 금지, 답변 없을 시 “모르겠습니다” 응답
프롬프트
상위 등수 (top_k=1), temperature=0.2, 히스토리 무시
안정성 확보
numpy==1.26.4, torch-CPU 포함
서버 적용 절차
가상환경 활성화
source .venv/bin/activate서버 재시작
pkill -f "python run.py"
nohup python run.py > output.log 2>&1 &벡터 DB 재구축
curl -X POST http://localhost:9000/api/qa/reload \
-H "X-Api-Key: your admin key"검색 테스트
curl -X POST http://localhost:9000/api/qa/search \
-H "Content-Type: application/json" \
-d '{"query":"식당 점심 방법","top_k":1}'특정 환경 모듈 업데이트==vm에서 의존성 설치시 버전 및 용량 한계가 있는 이슈 발생
NumPy 에러 해결:
pip uninstall -y numpy && pip install numpy==1.26.4CUDA 크기 업데이트:
pip install --no-cache-dir torch==2.2.2 --index-url https://download.pytorch.org/whl/cpu운영 팁
QA 정확도 조정 원하면
SIMILARITY_THRESHOLD수정 후 reload로그 모니터링:
tail -f output.log, 오류는grep -i "error" output.log
결과화면
유사도로만 구현했을때
백터DB로 구현했을때
배우며 느낀점들 ✨
다시 말하자면, LLM에게 코드를 물어보는 것보다 “협업 구조를 구성하는 것”이 훨씬 효과적
서버에서 로그기록을 보면서 디버그 하면 좋음
RAG 방식의 의미 기반 검색이 실제 사용자 질문에 훨씬 유연하게 대응
작은 프로젝트지만 실무에서 바로 쓸 수 있는 실용적인 시스템 완성
도움 받은 글
카톡봇 스터디~질의응답~!!!!