docs: harmonize rb8001/rb10508 roles, gateway routing, ports; unify proxy_pass slashes; externalize RAG; fix nginx-infra refs; generalize embedding dims; skill sharing notes

This commit is contained in:
happybell80 2025-09-10 15:51:06 +09:00
parent 4876880160
commit 04b78c7ebc
9 changed files with 58 additions and 55 deletions

View File

@ -95,10 +95,10 @@ version: 3.0
│ 51124 서버 (서비스 운영) │ │ 51124 서버 (서비스 운영) │
├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
│ 로빙 서비스: │ │ 로빙 서비스: │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ ┌────────────┐ ┌─────────┐ ┌──────────────┐ │
│ │rb8001 │ │rb10408 │ │rb10508 │ │ │rb8001 │ │rb10408 │ │rb10508_micro │
│ │(테스트) │ │(미디어) │ │(메인) │ │ │(메인/프로덕션)│ (미디어) │ │(테스트) │
│ └─────────┘ └─────────┘ └─────────┘ │ └────────────┘ └─────────┘ └──────────────┘ │
│ │ │ │
│ 스킬 서비스: │ │ 스킬 서비스: │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │ │ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
@ -143,17 +143,19 @@ sequenceDiagram
participant U as User participant U as User
participant S as Slack participant S as Slack
participant N as nginx(51123) participant N as nginx(51123)
participant R as rb10508(51124) participant G as Gateway(8100)
participant R as rb8001(51124)
participant E as Embedding participant E as Embedding
participant DB as PostgreSQL participant DB as PostgreSQL
participant C as ChromaDB participant C as ChromaDB
U->>S: 메시지 입력 U->>S: 메시지 입력
S->>N: Webhook 전달 S->>N: Webhook 전달
N->>R: 요청 라우팅 N->>G: 요청 전달
G->>R: 라우팅
R->>DB: 스탯/레벨 조회 R->>DB: 스탯/레벨 조회
R->>E: 텍스트 임베딩 R->>E: 텍스트 임베딩
E-->>R: 384차원 벡터 E-->>R: 임베딩 벡터(모델 종속 차원)
R->>C: 유사 기억 검색 R->>C: 유사 기억 검색
C-->>R: 관련 컨텍스트 C-->>R: 관련 컨텍스트
R->>R: LLM 처리 R->>R: LLM 처리
@ -359,4 +361,4 @@ sequenceDiagram
> "로빙과 함께라면, 당신은 더 이상 혼자가 아닙니다." > "로빙과 함께라면, 당신은 더 이상 혼자가 아닙니다."
*Last Updated: 2025.01.31* *Last Updated: 2025.01.31*

View File

@ -27,7 +27,7 @@
| 서버 | IP | 역할 | 주요 서비스 | | 서버 | IP | 역할 | 주요 서비스 |
|------|-----|------|------------| |------|-----|------|------------|
| 51123 | 192.168.219.45 | 메인 서버 | Gitea, nginx, auth-server, PostgreSQL | | 51123 | 192.168.219.45 | 메인 서버 | Gitea, nginx, auth-server, PostgreSQL |
| 51124 | 192.168.219.52 | 로빙/스킬 서버 | rb8001, rb10508, skill-email, ChromaDB | | 51124 | 192.168.219.52 | 로빙/스킬 서버 | rb8001, rb10508_micro, skill-email, ChromaDB |
### 기본 구조 ### 기본 구조
``` ```
@ -53,7 +53,7 @@
│ │ rb8001 (8001) │ │ │ │ rb8001 (8001) │ │
│ │ rb10508_micro (10508) │ │ │ │ rb10508_micro (10508) │ │
│ │ skill-email (8501) │ │ │ │ skill-email (8501) │ │
│ │ skill-news (8502) │ │ │ │ skill-news (8505) │ │
│ └─────────────────────────────┘ │ │ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ │ │ ┌─────────────────────────────┐ │
│ │ ChromaDB (8000) │ │ │ │ ChromaDB (8000) │ │
@ -146,7 +146,7 @@ robeing.conversations: id, robeing_id, user_message, robeing_response
| 10508 | rb10508_micro | 테스트 로빙 | | 10508 | rb10508_micro | 테스트 로빙 |
| 10408 | rb10408_test | 개발 로빙 | | 10408 | rb10408_test | 개발 로빙 |
| 8501 | skill-email | Gmail 스킬 | | 8501 | skill-email | Gmail 스킬 |
| 8502 | skill-news | 뉴스 스킬 | | 8505 | skill-news | 뉴스 스킬 |
| 8000 | ChromaDB | 벡터 DB | | 8000 | ChromaDB | 벡터 DB |
### API 엔드포인트 ### API 엔드포인트
@ -336,4 +336,4 @@ Gateway (8100)
**업데이트**: 2025-08-21 **업데이트**: 2025-08-21
**작성자**: 로빙 개발팀 **작성자**: 로빙 개발팀
**버전**: 2.0 **버전**: 2.0
**상태**: 구현 중 **상태**: 구현 중

View File

@ -41,11 +41,13 @@ Embedding: Separated Service (Memory Optimization)
## 시스템 구조 이해하기 ## 시스템 구조 이해하기
``` ```
User → Slack → rb10508 Container → PostgreSQL/ChromaDB User → Slack → nginx → Gateway(8100) → rb8001(프로덕션)
Embedding Service Embedding Service
Skill Services Skill Services (HTTP)
PostgreSQL / ChromaDB
``` ```
## 실습 과제 ## 실습 과제
@ -59,4 +61,4 @@ User → Slack → rb10508 Container → PostgreSQL/ChromaDB
- 동시 처리: 5개 요청 - 동시 처리: 5개 요청
## 다음 단계 ## 다음 단계
Part 4 [성장과 진화](../400_growth/README.md)에서 이 아키텍처 위에서 어떻게 성장하는지 학습하세요. Part 4 [성장과 진화](../400_growth/README.md)에서 이 아키텍처 위에서 어떻게 성장하는지 학습하세요.

View File

@ -51,7 +51,7 @@ sudo chown -R 999:999 ./chromadb_data
- 3초 룰 구현 (빠른 응답 후 처리) - 3초 룰 구현 (빠른 응답 후 처리)
- 메시지 큐 시스템 - 메시지 큐 시스템
**rb10508 (메인 브레인)**: **rb10508 (메인 브레인) [당시 기준 — 현행: rb8001가 메인]**:
- 기억 시스템 구현 - 기억 시스템 구현
- 감정 모델 통합 - 감정 모델 통합
- PostgreSQL 연동 - PostgreSQL 연동
@ -103,7 +103,7 @@ WebSocket connection to 'ws://localhost:10508' failed
// 해결: nginx 프록시 설정 // 해결: nginx 프록시 설정
location /ws { location /ws {
proxy_pass http://172.17.0.1:10508; proxy_pass http://172.17.0.1:10508/;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
@ -254,4 +254,4 @@ async def execute_skill(skill_name: str, params: dict):
로빙은 이제 단순한 챗봇이 아니다. 기억하고, 느끼고, 성장하는 AI 에이전트다. 앞으로도 계속 진화할 것이다. 로빙은 이제 단순한 챗봇이 아니다. 기억하고, 느끼고, 성장하는 AI 에이전트다. 앞으로도 계속 진화할 것이다.
**"도구에서 동료로, 동료에서 친구로"** - 이것이 로빙이 가는 길이다. **"도구에서 동료로, 동료에서 친구로"** - 이것이 로빙이 가는 길이다.

View File

@ -368,8 +368,8 @@ class HTTPEmbeddingFunction:
|----------|------|------|-----------|-------------| |----------|------|------|-----------|-------------|
| **skill_email** | 8501 | 운영 중 (6일) | 이메일 조회/발송 | rb10408, rb10508 | | **skill_email** | 8501 | 운영 중 (6일) | 이메일 조회/발송 | rb10408, rb10508 |
| **skill-news** | 8505 | 정상 (2시간) | 뉴스 검색/요약 | rb10408, rb10508 | | **skill-news** | 8505 | 정상 (2시간) | 뉴스 검색/요약 | rb10408, rb10508 |
| **skill-slack** | 8503 | 정상 (2시간) | Slack 메시지 처리 | rb10408만 | | **skill-slack** | 8503 | 정상 (2시간) | Slack 메시지 처리 | 공용(원칙) — 현재 rb10408만 연결, 확대 예정 |
| **skill-embedding** | 8515 | 정상 (6일) | 텍스트 임베딩 생성 | rb10508만 | | **skill-embedding** | 8515 | 정상 (6일) | 텍스트 임베딩 생성 | 공용(원칙) — 현재 rb10508만 연결, 공용 전환 계획 |
### 스킬 통합 개선 방안 ### 스킬 통합 개선 방안
@ -485,4 +485,4 @@ class HTTPEmbeddingFunction:
--- ---
*이 문서는 2025년 8월 11일 51124 서버에서 실측한 데이터를 기반으로 작성되었습니다.* *이 문서는 2025년 8월 11일 51124 서버에서 실측한 데이터를 기반으로 작성되었습니다.*

View File

@ -15,7 +15,7 @@
- 흐름: 업로드 → (PDF/이미지 분기) → skill-ocr HTTP 호출 → 텍스트/블록/메타 → RAG(ChromaDB) 저장 → 응답 - 흐름: 업로드 → (PDF/이미지 분기) → skill-ocr HTTP 호출 → 텍스트/블록/메타 → RAG(ChromaDB) 저장 → 응답
- 컴포넌트 - 컴포넌트
- rb*: 클라이언트 요청 처리, 파일 유형 판별, skill-ocr 호출만 담당 - rb*: 클라이언트 요청 처리, 파일 유형 판별, skill-ocr 호출만 담당
- skill-ocr(8501): OCR 파이프라인 수행(PDF: OCRmyPDF, 이미지: PaddleOCR 등) - skill-ocr(8506): OCR 파이프라인 수행(PDF: OCRmyPDF, 이미지: PaddleOCR 등)
- Storage: `/mnt/hdd/uploads/{user_id}/`, 로그 `/mnt/hdd/logs/skill-ocr/` - Storage: `/mnt/hdd/uploads/{user_id}/`, 로그 `/mnt/hdd/logs/skill-ocr/`
- Vector DB: ChromaDB(텍스트 조각) + PostgreSQL(메타) - Vector DB: ChromaDB(텍스트 조각) + PostgreSQL(메타)
@ -69,7 +69,7 @@
- 로그는 `/mnt/hdd/logs/skill-ocr/` 30일 롤링, 샘플: `Fallback to OCR`, `OCR quality low: confidence=0.72` - 로그는 `/mnt/hdd/logs/skill-ocr/` 30일 롤링, 샘플: `Fallback to OCR`, `OCR quality low: confidence=0.72`
## 6) 배포 가이드(요약) ## 6) 배포 가이드(요약)
- 컨테이너: `skill-ocr`(8501) - 컨테이너: `skill-ocr`(8506)
- 볼륨: `-v /mnt/hdd/uploads:/mnt/hdd/uploads:ro`, `-v /mnt/hdd/logs/skill-ocr:/logs` - 볼륨: `-v /mnt/hdd/uploads:/mnt/hdd/uploads:ro`, `-v /mnt/hdd/logs/skill-ocr:/logs`
- 환경: `LANGS=kor,eng`, `THREADS=N`, `USE_GPU=false|true` - 환경: `LANGS=kor,eng`, `THREADS=N`, `USE_GPU=false|true`
- 헬스체크: `GET /healthz` (main.py/Dockerfile/compose/workflows 동기화) - 헬스체크: `GET /healthz` (main.py/Dockerfile/compose/workflows 동기화)
@ -100,4 +100,3 @@
- TrOCR: Hugging Face 문서, AAAI 논문 - TrOCR: Hugging Face 문서, AAAI 논문
- Donut: GitHub, arXiv, 산업 적용 리뷰 - Donut: GitHub, arXiv, 산업 적용 리뷰
- Kraken/Calamari: GitHub, 공식 문서 - Kraken/Calamari: GitHub, 공식 문서

View File

@ -2,7 +2,7 @@
**작성일**: 2025-09-09 **작성일**: 2025-09-09
**작성자**: happybell80 & Claude **작성자**: happybell80 & Claude
**관련 서비스**: rb8001 (RAG 스킬 내부 구현) **관련 서비스**: skill-rag (HTTP 외부 스킬)
**핵심 기술**: Multi-provider Search API, Query Routing, Caching, RAG **핵심 기술**: Multi-provider Search API, Query Routing, Caching, RAG
## 1. 검색 프로바이더 계층 구조 ## 1. 검색 프로바이더 계층 구조
@ -25,7 +25,7 @@
검색 의도 추가: LLM 프롬프트에 "검색 요청은 /search로" 또는 직접 패턴 매칭. 검색 의도 추가: LLM 프롬프트에 "검색 요청은 /search로" 또는 직접 패턴 매칭.
```python ```python
# rb8001/app/skills/rag.py # 예시 라우팅 (의도별 외부 호출)
def route_by_pattern(query): def route_by_pattern(query):
if "뉴스" in query: return 'news_api' if "뉴스" in query: return 'news_api'
if "언제" in query: return 'duckduckgo' # 즉답 if "언제" in query: return 'duckduckgo' # 즉답
@ -35,17 +35,17 @@ def route_by_pattern(query):
## 3. 구현 아키텍처 ## 3. 구현 아키텍처
``` ```
사용자 → rb8001 내부 RAG 스킬 사용자 → rb8001 → (HTTP) skill-rag
[Query Router] [Query Router]
[Provider Manager] [Provider Manager]
/ | | \ / | | \
Tavily Brave Serper DuckDuckGo Tavily Brave Serper DuckDuckGo
[Result Merger] [Result Merger]
[Redis Cache] [Redis Cache]
``` ```
## 4. 캐싱 전략 ## 4. 캐싱 전략
@ -66,17 +66,17 @@ Tavily Brave Serper DuckDuckGo
### 예상 월 비용: $0.05 ### 예상 월 비용: $0.05
## 6. 구현 위치: rb8001/app/skills/rag.py ## 6. 구현 위치: skill-rag (외부 서비스)
별도 마이크로서비스 대신 rb8001 내부 RAG 스킬로 구현 rb8001 내부 구현 대신 외부 RAG 스킬(HTTP)로 분리
- 웹 검색 + 파일 RAG 통합 처리 - 웹 검색 + 파일 RAG 통합 처리 (HTTP 인터페이스)
- Phase 1: Tavily + DuckDuckGo 웹 검색 - Phase 1: Tavily + DuckDuckGo 웹 검색
- Phase 2: ChromaDB 파일 검색 통합 - Phase 2: ChromaDB 파일 검색 통합
- Phase 3: 복잡도 증가 시 skill-rag 분리 - Phase 3: 트래픽 증가 시 스케일아웃 (수평 확장)
## 7. 핵심 차별점 ## 7. 핵심 차별점
- 다층 프로바이더로 안정성 확보 - 다층 프로바이더로 안정성 확보
- 쿼리 타입별 최적 API 자동 선택 - 쿼리 타입별 최적 API 자동 선택
- 무료 한도 최대 활용으로 비용 최소화 - 무료 한도 최대 활용으로 비용 최소화
- 캐싱으로 중복 검색 방지 - 캐싱으로 중복 검색 방지

View File

@ -43,11 +43,11 @@
``` ```
├── 로빙 컨테이너 ├── 로빙 컨테이너
│ ├── rb8001:8001 (프로덕션) │ ├── rb8001:8001 (프로덕션)
│ ├── rb10508_test:10508 (테스트) │ ├── rb10508_micro:10508 (테스트)
│ └── rb10408_test:10408 (테스트) │ └── rb10408:10408 (테스트)
├── 스킬 서비스 ├── 스킬 서비스
│ ├── skill-email:8501 (Gmail 연동) │ ├── skill-email:8501 (Gmail 연동)
│ ├── skill-news:8502 │ ├── skill-news:8505
│ ├── skill-embedding:8515 (포트 변경됨) │ ├── skill-embedding:8515 (포트 변경됨)
│ └── skill-slack (멀티봇 지원) │ └── skill-slack (멀티봇 지원)
└── ChromaDB (벡터 DB) └── ChromaDB (벡터 DB)
@ -244,4 +244,4 @@ GET /api/health # 헬스체크
- 이 계획은 초안이며, 구현 과정에서 수정될 수 있음 - 이 계획은 초안이며, 구현 과정에서 수정될 수 있음
- 기존 frontend-base의 코드를 최대한 재활용 - 기존 frontend-base의 코드를 최대한 재활용
- 서버팀과 사전 협의 필요 (포트, 도메인 등) - 서버팀과 사전 협의 필요 (포트, 도메인 등)

View File

@ -1,7 +1,7 @@
# 중앙 인증 서버(auth.ro-being.com) 구축 # 중앙 인증 서버(auth.ro-being.com) 구축
**날짜**: 2025-07-16 **날짜**: 2025-07-16
**관련 서비스**: auth-server, nginx-deploy **관련 서비스**: auth-server, nginx-infra
**작성자**: Claude AI Assistant **작성자**: Claude AI Assistant
## 작업 개요 ## 작업 개요
@ -43,7 +43,7 @@ auth-server/
### 3. Nginx 리버스 프록시 설정 ### 3. Nginx 리버스 프록시 설정
**nginx-deploy/default.conf 수정**: **nginx-infra/default.conf 수정**:
```nginx ```nginx
# Auth server configuration # Auth server configuration
server { server {
@ -123,7 +123,7 @@ services:
## 관련 파일 ## 관련 파일
- `/home/happybell/projects/ivada/auth-server/` - 인증 서버 - `/home/happybell/projects/ivada/auth-server/` - 인증 서버
- `/home/happybell/projects/ivada/nginx-deploy/default.conf` - Nginx 설정 - `/home/happybell/projects/ivada/nginx-infra/default.conf` - Nginx 설정
- `/home/happybell/projects/ivada/skill_email/` - Gmail 스킬 (통합 예정) - `/home/happybell/projects/ivada/skill_email/` - Gmail 스킬 (통합 예정)
## SSL/HTTPS 설정 추가 ## SSL/HTTPS 설정 추가
@ -135,10 +135,10 @@ services:
### 해결 과정 ### 해결 과정
1. **nginx-deploy 저장소 구조 파악**: 1. **nginx-infra 저장소 구조 파악**:
- `default.conf`: Docker nginx 설정 (legacy) - `default.conf`: Docker nginx 설정 (legacy)
- `server-nginx-default`: 실제 서버 nginx 설정 파일 - `server-nginx-default`: 실제 서버 nginx 설정 파일
- GitHub Actions가 `server-nginx-default`를 서버의 `/etc/nginx/sites-available/default`로 복사 - Gitea Actions가 `server-nginx-default`를 서버의 `/etc/nginx/sites-available/default`로 복사
2. **HTTPS 서버 블록 추가**: 2. **HTTPS 서버 블록 추가**:
```nginx ```nginx
@ -185,4 +185,4 @@ server {
2. **중앙 인증의 장점**: 토큰 관리 일원화, 보안 강화, 확장성 2. **중앙 인증의 장점**: 토큰 관리 일원화, 보안 강화, 확장성
3. **마이크로서비스 구조**: 각 서비스(인증, API, 로빙)를 독립적으로 관리 3. **마이크로서비스 구조**: 각 서비스(인증, API, 로빙)를 독립적으로 관리
4. **SSL 설정 패턴**: HTTP는 HTTPS로 리다이렉션, HTTPS 블록에 실제 프록시 설정 4. **SSL 설정 패턴**: HTTP는 HTTPS로 리다이렉션, HTTPS 블록에 실제 프록시 설정
5. **nginx-deploy 워크플로우**: 로컬 수정 → Git push → GitHub Actions → 서버 배포 5. **nginx-infra 워크플로우**: 로컬 수정 → Git push → Gitea Actions → 서버 배포