# Progress — syn-chat-bot > 최종 업데이트: 2026-03-19 ## Phase별 구현 현황 ### Phase 1-3: RAG v2 초기 셋업 (커밋 `6e6ffaa`, 2026-03-11) - 3단계 모델 라우팅 (local / api_light / api_heavy) - 멀티-컬렉션 RAG (documents, tk_company, chat_memory) - Qwen 9B 분류기 v2 → v3 (intent, response_tier, needs_rag, rag_target) - 프리필터 (인사/감사 정규식 → GPU 미호출) - 선택적 메모리 (Qwen 판단 → 가치 있으면 벡터화) - bot-postgres 12테이블, Qdrant 3컬렉션 - 페르소나 "이드" (전체/경량 프롬프트) - 안전장치: 토큰 검증, Rate Limit, 예산 상한, 분류기 fallback ### Phase 4-5: 회사 문서 + 현장 리포팅 + 보고서 (커밋 `f42096f`, 2026-03-11) - `/문서등록` 명령어 — 청킹 → tk_company 벡터 저장 (hash 중복/버전 관리) - 현장 리포트 — 사진+텍스트 → Claude Haiku Vision → 구조화 → field_reports + tk_company - `/보고서` 명령어 — 월간 보고서 생성 (report_cache) - heic_converter.py — HEIC→JPEG 변환 (macOS sips) - chat_bridge.py — DSM Chat API 브릿지 (사진 폴링/다운로드/HEIC 자동변환) - API 사용량 추적 (api_usage_monthly UPSERT) ### n8n Task Runner 샌드박스 대응 (커밋 `f7cccc9`, 2026-03-11) - n8n v2.11+ Code 노드 VM 샌드박스 대응 - `fetch()`/`$http.request()` → `require('http')`/`require('https')` 패턴 전환 - `NODE_FUNCTION_ALLOW_BUILTIN=crypto,http,https,url` 설정 ### Phase 5-6: Calendar/Mail/OmniFocus/News (커밋 `612933c`, 2026-03-14) - 분류기 v3: calendar, reminder, mail, note intent 추가 - caldav_bridge.py (:8092) — CalDAV REST 래퍼 (Synology Calendar CRUD) - inbox_processor.py — OmniFocus Inbox 폴링 (LaunchAgent, 5분 간격) - news_digest.py — RSS 뉴스 번역·요약 (LaunchAgent, 매일 07:00) - Mail Processing Pipeline (7노드) — IMAP 폴링 → Qwen 분류 → mail_logs - 메인 파이프라인 51노드로 확장 (calendar/mail/note 핸들러) ### DEVONthink 제거 + 모닝 브리핑 (2026-03-19) - DEVONthink 의존성 제거 → kb_writer로 전환 (news_digest, inbox_processor, mail pipeline) - devonthink_bridge.py 삭제 (macOS AppleScript 의존성 제거) - morning_briefing.py — 모닝 브리핑 (LaunchAgent, 매일 07:30) - 일정(CalDAV), 메일(mail_logs), 보고(field_reports), 뉴스(Karakeep) → Synology Chat - migrate-v5.sql — news_digest_log에 kb_path 컬럼 추가 --- ## 파일 인벤토리 ### Python 서비스 (6개) | 파일 | 포트/실행 | 역할 | |------|----------|------| | `caldav_bridge.py` | :8092 | CalDAV REST 래퍼 | | `chat_bridge.py` | :8091 | DSM Chat API 브릿지 | | `heic_converter.py` | :8090 | HEIC→JPEG 변환 | | `inbox_processor.py` | LaunchAgent 5분 | OmniFocus Inbox 폴링 | | `news_digest.py` | LaunchAgent 07:00 | 뉴스 번역·요약 | | `morning_briefing.py` | LaunchAgent 07:30 | 모닝 브리핑 | ### LaunchAgent plist (6개) | 파일 | 서비스 | |------|--------| | `com.syn-chat-bot.caldav-bridge.plist` | caldav_bridge | | `com.syn-chat-bot.chat-bridge.plist` | chat_bridge | | `com.syn-chat-bot.heic-converter.plist` | heic_converter | | `com.syn-chat-bot.inbox-processor.plist` | inbox_processor | | `com.syn-chat-bot.news-digest.plist` | news_digest | | `com.syn-chat-bot.morning-briefing.plist` | morning_briefing | ### n8n 워크플로우 (2개) | 파일 | 노드수 | 역할 | |------|--------|------| | `main-chat-pipeline.json` | 51 | 메인 채팅 파이프라인 | | `mail-processing-pipeline.json` | 7 | 메일 처리 파이프라인 | ### SQL (3개, 618줄) | 파일 | 역할 | |------|------| | `init/init.sql` | 초기 스키마 (5테이블) | | `init/migrate-v2.sql` | v2 마이그레이션 (7테이블 추가) | | `init/migrate-v3.sql` | v3 마이그레이션 (calendar_events 확장) | | `init/migrate-v5.sql` | v5 마이그레이션 (DEVONthink→kb_writer 전환) | ### 기타 | 파일 | 역할 | |------|------| | `docker-compose.yml` | bot-n8n + bot-postgres 컨테이너 | | `manage_services.sh` | LaunchAgent 일괄 관리 | | `start-bridge.sh` | 브릿지 서비스 시작 스크립트 | | `init/setup-qdrant.sh` | Qdrant 3컬렉션 초기화 | | `.env.example` | 환경 변수 템플릿 | --- ## 서비스 기동 전 수동 설정 가이드 맥북프로(또는 새 환경)에서 처음 기동할 때 필요한 설정. ### 1. 사전 요구사항 ``` # Homebrew brew install python@3.14 # Python 가상환경 python3 -m venv .venv source .venv/bin/activate pip install caldav aiohttp # Docker Desktop 설치 및 실행 ``` ### 2. NAS 설정 (192.168.1.227) - **Synology Chat**: Outgoing Webhook 생성 → URL: `http://<맥IP>:5678/webhook/chat` - **Synology Calendar**: `chatbot` 캘린더 생성 + CalDAV 접근용 계정 - **MailPlus**: IMAP 접근용 계정 설정 - **DSM Chat API**: chatbot-api 계정 생성 (사진 폴링용) ### 3. macOS 앱 설정 - **OmniFocus**: 설치 + Inbox 사용 설정 - **Ollama (맥미니)**: `ollama pull bge-m3 && ollama pull bge-reranker-v2-m3` ### 4. GPU 서버 (192.168.1.186) - Ollama 설치 + `ollama pull id-9b:latest` (이드 특화 모델, 기존 qwen3.5:9b-q8_0은 레거시 백업) - 포트 11434 개방 ### 5. 환경 변수 ```bash cp .env.example .env # .env 파일의 모든 changeme / xxxxx 값을 실제 값으로 교체 ``` ### 6. Docker 기동 + DB 마이그레이션 ```bash docker compose up -d # 초기 DB 설정 docker exec -i bot-postgres psql -U bot chatbot < init/init.sql docker exec -i bot-postgres psql -U bot chatbot < init/migrate-v2.sql docker exec -i bot-postgres psql -U bot chatbot < init/migrate-v3.sql # Qdrant 컬렉션 초기화 bash init/setup-qdrant.sh ``` ### 7. LaunchAgent 등록 ```bash # plist 파일 내 경로를 현재 환경에 맞게 수정 # (WorkingDirectory, ProgramArguments의 Python/스크립트 경로) cp com.syn-chat-bot.*.plist ~/Library/LaunchAgents/ bash manage_services.sh load ``` ### 8. n8n 워크플로우 임포트 1. `http://localhost:5678` 접속 2. Settings → Import → `n8n/workflows/main-chat-pipeline.json` 3. Settings → Import → `n8n/workflows/mail-processing-pipeline.json` 4. 워크플로우 내 Credential 재설정 (PostgreSQL, HTTP Header Auth 등) 5. 워크플로우 활성화 ### 9. 검증 ```bash # 브릿지 서비스 헬스체크 curl http://localhost:8090/health # heic_converter curl http://localhost:8091/health # chat_bridge curl http://localhost:8092/health # caldav_bridge # Docker 상태 docker compose ps # DB 연결 docker exec bot-postgres psql -U bot chatbot -c '\dt' ``` --- ## 다음 단계 (Phase 7+) - [ ] 전체 서비스 통합 테스트 (Synology Chat → n8n → 각 브릿지) - [ ] 분류기 v3 정확도 튜닝 (classification_logs 분석) - [ ] 비용 모니터링 대시보드 (api_usage_monthly 기반) - [ ] SLA 트래킹 스케줄 워크플로우 + 긴급 에스컬레이션 - [ ] CalDAV 양방향 동기화 - [ ] 메일 발송 (SMTP via MailPlus) - [ ] reminder 실구현 (알림 시간에 Synology Chat 푸시) - [ ] 모닝 브리핑 고도화 (주간 요약, 커스텀 섹션)