---
status: closed
closed_date: 2026-03-21
closed_reason: 260320 다형식문서 RAG 계획으로 흡수 또는 구현 완료
tags: [research, embedding, ssot, robeing, 1차]
---
status: closed
closed_date: 2026-03-21
closed_reason: 260320 다형식문서 RAG 계획으로 흡수 또는 구현 완료

# 임베딩 1차: 로빙 현황 및 SSOT 리서치

## 상태

- completed

**작성일**: 2026-03-16  
**목적**: 로빙 임베딩 전환(1차)에 필요한 현황·영향 범위·SSOT 방안 정리. 완전 닫힘 가능하도록 범위 한정.

---

## 1. 상위 문서

- [0_VALUE 임베딩 정책](https://github.com/happybell80/0_VALUE/blob/main/02_Governance/embedding-policy.md)
- [임베딩 1차 로빙 Gemini 2 전환 문제 오픈](../../troubleshooting/260316_임베딩_1차_로빙_Gemini2_전환_문제오픈.md)
- [Gemini Embedding 2 리서치: 비용·청킹·도입 검토](./260315_Gemini_Embedding_2_리서치_비용_청킹_도입검토.md)

---

## 2. 로빙 임베딩 현황 (1차 범위)

| 구성요소 | 모델/경로 | 차원 | 비고 |
|----------|-----------|------|------|
| skill-embedding | ko-sroberta(multitask) | 768 | ONNX 로컬, 포트 8515 |
| skill-rag-file | skill-embedding HTTP 호출 | 768 (fallback) | EMBEDDING_SERVICE_URL |
| rb8001 | SKILL_EMBEDDING_URL | 768 | 메모리 ChromaDB |
| Company X RAG | skill-rag-file 경유 | 384 | intent_prototypes pgvector 768d |
| intent_prototypes | pgvector | 768 | PostgreSQL |

**차원 드리프트**: rb8001 메모리 768/384 혼재. [260312_rb8001_memory_chromadb_768_384_dimension_drift](../../troubleshooting/260312_rb8001_memory_chromadb_768_384_dimension_drift.md) 참조.

---

## 3. 영향 범위 (1차 전수)

| 레포/서비스 | 파일/경로 | 영향 내용 |
|-------------|-----------|-----------|
| skill-embedding | 전체 | ONNX→Gemini 2 전환, /embed, docker-compose, 포트 8515 |
| skill-rag-file | `app/services/embedding.py` | EmbeddingService 호출 경로 |
| skill-rag-file | `app/api/upload.py` | chromadb_client, embedding_service |
| skill-rag-file | `app/core/config.py` | EMBEDDING_SERVICE_URL |
| skill-rag-file | `docker-compose.yml` | EMBEDDING_SERVICE_URL |
| rb8001 | `app/core/config.py` | EMBEDDING_DIM, SKILL_EMBEDDING_URL |
| rb8001 | `app/state/database.py` | ChromaDB, memory_manager |
| rb8001 | `app/services/brain/intent_store.py` | intent_prototypes pgvector |
| rb8001 | `docker-compose.yml` | SKILL_EMBEDDING_URL=${EMBEDDING_SERVICE_URL:-...} (SSOT 참조) |
| rb8001 | `scripts/migrate_chromadb_collections.py` | ChromaDB 차원 마이그레이션 |
| DOCS | `skills/companyx-rag/SKILL.md` | Default embedding path 문서 |
| DOCS | `book/300_architecture/330_*.md` | ChromaDB 768차원 설계 |
| ivada-infra | skill-embedding 배포 | .env.deploy, 23/24 서버 |

---

## 4. env SSOT (반영됨)

- **원칙**: 로빙 전역(rb8001, skill-embedding, skill-rag-file, skill-news, skill-slack 등 모든 스킬)은 `workspace-config`를 따르고, 임베딩 관련 값을 서비스별로 오버라이드하지 않는다.
- `workspace-config/runtime.env`: `EMBEDDING_SERVICE_URL`, `EMBEDDING_DIM`, `EMBEDDING_MODEL`(gemini-embedding-2-preview) — [0_VALUE embedding-policy env SSOT](https://github.com/happybell80/0_VALUE/blob/main/02_Governance/embedding-policy.md)
- rb8001 docker-compose: `SKILL_EMBEDDING_URL=${EMBEDDING_SERVICE_URL:-...}`로 SSOT 참조
- skill-rag-file: `EMBEDDING_SERVICE_URL` env_file에서 로드
- skill-embedding: 전환 후 `EMBEDDING_MODEL`, `EMBEDDING_DIM` env_file에서 로드

## 5. 사실(Facts)

- robeing skill-embedding은 ko-sroberta 768d, 포트 8515
- skill-rag-file은 EMBEDDING_SERVICE_URL로 skill-embedding 호출
- 기존 데이터 적음 → 전수 교체 기술 부채 낮음
- 0_VALUE 임베딩 정책: Gemini 2, 768d, 멀티모달
- `rb8001` 메모리 차원 드리프트가 별도 문서로 열려 있으나, 1차 닫힘 문맥에서는 제외하지 않기로 결정됨
- 1차 닫힘 근거는 단일 worklog가 아니라 테스트·배포·운영 로그까지 분리 증거로 남겨야 함

---

## 6. 해석(Interpretation)

- skill-embedding을 Gemini 2로 전환하면 skill-rag-file·rb8001은 URL만 유지하고 모델은 자동 반영
- skill-rag-file 내부 직접 Gemini API 호출도 가능. 다만 1차는 단일 게이트웨이 유지가 SSOT에 더 맞음
- 1차를 정말 닫으려면 `RAG만 Gemini 2`가 아니라 `rb8001` 메모리, 기존 데이터, 새 자료 유입 규칙까지 함께 닫아야 함
- fallback은 배포 안전장치로만 허용할 수 있고, 최종 닫힘 상태의 일부로 남기면 안 됨

---

## 7. 경로 설계 결정 (추천)

- **추천: skill-embedding 교체**. ONNX ko-sroberta → Gemini 2로 skill-embedding 서비스 내부만 전환.
- **이유**: (1) 기존 HTTP /embed 구조 유지, rb8001·skill-rag-file 수정 없음 (2) workspace-config `EMBEDDING_MODEL`만 반영하면 모델 전환 완료 (3) 변경 범위 최소, ivada-infra skill-embedding 배포만 갱신 (4) skill-rag-file 직접 호출은 skill-embedding 제거·skill-rag-file 대규모 수정 필요
- **대안**: skill-rag-file 내부 Gemini API 직접 호출 — skill-embedding 제거 가능하나 skill-rag-file 변경 범위 큼. 1차에서는 비추천.

---

## 8. 청킹 단계 결정 (추천)

- **1차**: 기존 Micro-chunking(300~500 단어) 유지. 768d·멀티모달 적용·검증 우선.
- **2단계**: RAG 경로 검증 후 Macro-chunking(2,000~4,000 토큰) 검토. [260315 Gemini Embedding 2 리서치 §5 청킹 전략](./260315_Gemini_Embedding_2_리서치_비용_청킹_도입검토.md) 참조.

---

## 9. 이번 리서치에서 고정된 결정

- 1차 범위는 `skill-embedding`, `skill-rag-file`, `rb8001`, `DOCS`입니다.
- 공식 임베딩 경로는 `skill-embedding` 단일 게이트웨이입니다.
- 모델/차원은 `Gemini Embedding 2`, `768d`입니다.
- 텍스트, PDF, 이미지가 모두 1차 닫힘 범위입니다.
- `rb8001` 메모리 드리프트는 별도 제외가 아니라 1차 종료 범위에 포함됩니다.
- 1차 대상 범위에서는 `384/768` 혼재를 허용하지 않습니다.
- 새 자료 유입은 모두 `Gemini 2 768d`를 필수로 따르며, 다른 경로는 실패 처리와 로그 기록 대상입니다.
- 실제 운영 배포, 자동 테스트, 질문셋 검증, 운영 로그가 모두 닫힘 근거로 필요합니다.
- fallback은 배포 도중 임시 허용 가능하지만, 최종 닫힘 상태에는 포함되지 않습니다.

---

## 10. 남은 미확정

- skill-embedding 내부에서 PDF·이미지 입력을 `/embed` 단일 계약으로 어떻게 직렬화할지는 구현 상세가 아직 미확정입니다.
- Company X 문서 컬렉션과 `rb8001` 메모리 컬렉션을 어떤 배치 단위와 순서로 재임베딩할지는 아직 미확정입니다.
- 대표 질문셋을 어떤 문서군으로 고정할지, 검색 품질 유지/개선 기준을 어떤 판정표로 남길지는 아직 미확정입니다.
- 구조화 로그 저장 위치와 필드명을 어떤 서비스에서 동일 포맷으로 맞출지는 아직 미확정입니다.

---

## 11. ivada-infra 연계

- skill-embedding은 ivada-infra에서 23/24 서버 배포. `.env.deploy`, docker-compose 경로 존재.
- 1차 전환 시: skill-embedding 레포 Gemini 2 전환 → ivada-infra skill-embedding 배포 설정 갱신 → 23/24 서버 재배포. 서버 관리자 실행.

---

## 12. 관련 문서

- [임베딩 1차 로빙 Gemini 2 전환 문제 오픈](../../troubleshooting/260316_임베딩_1차_로빙_Gemini2_전환_문제오픈.md)
- [임베딩 1차 로빙 Gemini 2 전환 계획](../../plans/260316_임베딩_1차_로빙_Gemini2_전환_계획.md)
- [임베딩 1차 로빙 Gemini 2 전환 배포 및 검증 완료](../../worklog/260316_임베딩_1차_로빙_Gemini2_전환_배포및검증완료.md)
- [임베딩 2차 StarsAndI·GooseCouncil 현황 리서치](./260316_임베딩_2차_StarsAndI_GooseCouncil_현황_리서치.md)
- [rb8001 메모리 ChromaDB 768/384 차원 드리프트](../../troubleshooting/260312_rb8001_memory_chromadb_768_384_dimension_drift.md)
