- 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/*)
291 lines
6.7 KiB
Markdown
291 lines
6.7 KiB
Markdown
# 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) |