# rb8001 통합 및 트러블슈팅 가이드 ## 개요 rb10408_test와 rb10508_micro를 rb8001로 통합하는 과정에서 발생한 이슈들과 해결 방법을 정리한 문서입니다. --- ## 1. 초기 통합 이슈 ### 1.1 Import 오류 **문제**: rb8001 컨테이너 시작 시 다음 오류 발생 ```python ImportError: cannot import name 'calculate_memory_scores' from 'app.memory.scoring' ``` **원인**: rb10508_micro와 rb8001의 함수명이 다름 - rb10508_micro: `add_composite_scores`, `maximal_marginal_relevance` - rb8001 (잘못된): `calculate_memory_scores` **해결**: `/home/heejae/rb8001/app/memory/manager.py` 수정 ```python from app.memory.scoring import add_composite_scores, maximal_marginal_relevance ``` ### 1.2 포트 설정 혼란 **문제**: rb8001이 8000 포트로 실행됨 **사용자 피드백**: "8001이 아니라?" **해결**: 1. Dockerfile의 EXPOSE와 CMD 수정 2. docker-compose.yml의 포트 매핑 수정 3. .env 파일의 PORT=8001 설정 --- ## 2. Slack 봇 토큰 이슈 ### 2.1 봇 토큰 충돌 **문제**: "왜 A라는 채널에서 robeing을 언급해서 말하면 hj-robeing이 대답하는거야?" - A 채널: robeing (rb8001) - B 채널: hj-robeing (rb10408) **원인**: rb8001이 rb10408의 토큰을 사용 중 **해결**: .env 파일 수정 ```bash # 변경 전 SLACK_BOT_TOKEN=xoxb-9073915808149-9095834173536-... (hj-robeing) # 변경 후 SLACK_BOT_TOKEN=xoxb-9073915808149-9107868204992-... (robeing) ``` ### 2.2 멀티봇 지원 구현 **요구사항**: skill-slack 서비스가 여러 봇 토큰을 관리해야 함 **구현**: `/home/heejae/skill-slack/app/services/slack_client.py` ```python self.bot_tokens = { "rb8001": settings.SLACK_BOT_TOKEN_RB8001, "rb10408": settings.SLACK_BOT_TOKEN_RB10408, "default": settings.SLACK_BOT_TOKEN } def get_bot_token(self, bot_id: str = None) -> str: if bot_id and bot_id in self.bot_tokens: return self.bot_tokens[bot_id] return self.bot_tokens["default"] ``` --- ## 3. Gemini 설정 변경 ### 3.1 CLI 모드 전환 **사용자 요청**: "어 cli로 변경할게" **변경 내용**: `.env` 파일 ```bash GEMINI_USE_CLI=true GEMINI_CLI_PATH=/usr/local/node/bin/gemini ``` --- ## 4. 3초 ACK 메시지 제거 ### 4.1 불필요한 ACK 메시지 **문제**: rb10508_micro는 3초 ACK 메시지를 사용하지 않음 **사용자 피드백**: "rb10508_micro를 보면 🤔 답변 생성중입니다... 이러한 3초 ack을 안쓰고 있는데" **해결**: `/home/heejae/rb8001/app/router/slack_handler.py` ```python # 제거된 코드 # await ack("🤔 답변 생성중입니다... 잠시만 기다려주세요!") # await asyncio.sleep(3) # 즉시 응답 await ack() ``` --- ## 5. Thread Context 이슈 ### 5.1 /digest 명령어 thread_ts 누락 **문제**: "쓰레드 내에서 /digest를 하면 쓰레드를 못찾는데?" **원인**: thread_ts 파라미터가 전달되지 않음 **해결 1**: slack_handler.py에서 thread_ts 전달 ```python response = await command_handler.handle_command( command=command_name, text=text, user_id=user_id, channel_id=channel_id, thread_ts=thread_ts # 추가 ) ``` **해결 2**: ThreadDigestCommand에서 자동 감지 ```python if not thread_ts and hasattr(self, 'context'): thread_ts = self.context.get('thread_ts') ``` --- ## 6. ChromaDB 및 Memory 시스템 ### 6.1 Embedding Service 연결 실패 **문제**: "skill-embedding이 없다고?" **원인**: 1. 잘못된 포트 (8015 → 8515) 2. 잘못된 URL (skill-embedding → localhost) **해결**: ```python # embedding_client.py self.url = os.getenv('SKILL_EMBEDDING_URL', 'http://localhost:8515') ``` ### 6.2 ChromaDB _type KeyError **문제**: ChromaDB에서 '_type' 키 오류 **해결**: ChromaDB 재생성 ```bash rm -rf /home/heejae/rb8001/chroma_db # 컨테이너 재시작로 자동 재생성 ``` ### 6.3 Memory Search 통합 **문제**: "대화 중에 memory search가 작동하나?" **해결**: GeminiHandler에 memory search 기능 추가 ```python async def chat(self, message: str, ...): # Memory search memory_manager = MemoryManager(self.robeing_name) memories = await memory_manager.search_memories( query=message, n_results=3 ) if memories: memory_context = "\n\n[중요: 과거 대화 기록]\n" # ... memories 처리 ``` --- ## 7. ~~PostgreSQL 연결 (robeing-state-service)~~ (제거됨 - State Service 사용 안 함) ~~State Service는 더 이상 사용하지 않음~~ rb8001이 직접 PostgreSQL에 연결하여 상태 저장: - Host: localhost (51123 서버) - Port: 5432 - Database: main_db - User: robeings --- ## 8. 통합된 기능 목록 ### rb10408_test에서 통합된 기능 - ✅ Slack Request URL 변경 (rb10408 → rb8001) - ✅ Slack 봇 토큰 설정 - ✅ 멀티봇 토큰 지원 - ✅ LLM Gateway 이전 ### rb10508_micro에서 통합된 기능 - ✅ Gemini CLI 모드 - ✅ 3초 ACK 메시지 제거 - ✅ Thread context 자동 감지 - ✅ ChromaDB 메모리 시스템 - ✅ Memory search in conversation - ✅ Embedding service 연동 ### 새로 추가된 기능 - ✅ PostgreSQL 직접 연결 (State Service 사용 안 함) - ✅ DB에 직접 상태 저장 --- ## 9. 미구현 기능 (DOCS 기반) ### 스탯 시스템 확장 - [ ] Ethics 스탯 추가 - [ ] 스탯 포인트 분배 시스템 - [ ] 레벨업 시 포인트 획득 메커니즘 ### 스킬 시스템 - [ ] 30개 스킬 구현 (현재 부분 구현) - [ ] 스킬 레벨 시스템 - [ ] 스킬 쿨다운 ### 클래스 시스템 - [ ] 7개 클래스 구현 - 조율자(Conductor) - 기록자(Archivist) - 해석자(Interpreter) - 탐색자(Explorer) - 중재자(Mediator) - 예언자(Foresight) - 수행자(Executor) ### 기타 시스템 - [ ] 아이템 시스템 - [ ] DID 기반 아이덴티티 - [ ] GUI 통합 - [ ] 망각 메커니즘 - [ ] 요약 시스템 --- ## 10. 실행 명령어 정리 ### 기본 실행 ```bash # SSH 터널 시작 # rb8001 실행 (PostgreSQL 직접 연결) cd ~/rb8001 docker compose up -d # rb8001 실행 cd /home/heejae/rb8001 docker compose up -d # Skill services 실행 cd /home/heejae/skill-slack docker compose up -d ``` ### 트러블슈팅 ```bash # 로그 확인 docker logs rb8001 -f docker logs robeing_state -f # 컨테이너 재시작 docker compose restart # 전체 재빌드 docker compose down docker compose up -d --build # ChromaDB 초기화 rm -rf /home/heejae/rb8001/chroma_db docker compose restart ``` ### 상태 확인 ```bash # Health check curl http://localhost:8001/health curl http://localhost:8507/health # SSH 터널 확인 ps aux | grep "5433:localhost:5432" # PostgreSQL 접속 테스트 PGPASSWORD=19800508 psql -h localhost -p 5433 -U admin -d main_db ``` --- ## 작성일: 2025-08-13 ## 작성자: Claude (with heejae)