DOCS/journey/troubleshooting/250814_rb8001_통합_트러블슈팅.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

6.7 KiB

rb8001 통합 및 트러블슈팅 가이드

개요

rb10408_test와 rb10508_micro를 rb8001로 통합하는 과정에서 발생한 이슈들과 해결 방법을 정리한 문서입니다.


1. 초기 통합 이슈

1.1 Import 오류

문제: rb8001 컨테이너 시작 시 다음 오류 발생

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 수정

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 파일 수정

# 변경 전
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

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 파일

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

# 제거된 코드
# 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 전달

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에서 자동 감지

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)

해결:

# embedding_client.py
self.url = os.getenv('SKILL_EMBEDDING_URL', 'http://localhost:8515')

6.2 ChromaDB _type KeyError

문제: ChromaDB에서 '_type' 키 오류

해결: ChromaDB 재생성

rm -rf /home/heejae/rb8001/chroma_db
# 컨테이너 재시작로 자동 재생성

6.3 Memory Search 통합

문제: "대화 중에 memory search가 작동하나?"

해결: GeminiHandler에 memory search 기능 추가

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. 실행 명령어 정리

기본 실행

# 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

트러블슈팅

# 로그 확인
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

상태 확인

# 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)