# 결정 보류 2건 — 사용자 액션 가이드

> 작성일: 2026-05-14
> 대상: `plans/빅피클-잔여작업-코딩계획.md` 7번(현장 재고), 8번(BGE-M3)
> 상태: 코드 작업 불필요. **사용자 의사 결정과 운영 액션이 필요**.

---

## 1. 현장 재고 데이터 출처 결정

### 현황
Phase 0 설계서(G3)에서 "현장 재고 데이터 자체가 시스템에 없음"으로 식별됨.
운전원이 "P-6201 펌프 예비품 재고", "교체용 PT100 센서 수량" 같은 질문을 했을 때
참조할 데이터 소스가 없어 답변 불가.

### 결정해야 할 것

| 옵션 | 설명 | 사용자 액션 |
|------|------|------------|
| **A. KB 업로드 (권장)** | 엑셀/CSV/PDF 재고 대장을 `plant_operation` 또는 `report` 컬렉션에 업로드 → 즉시 RAG 검색 가능 | 1) 재고 대장 파일 확보 (관리부/구매팀 협조)<br>2) 컬럼 구조 정리 (품목·규격·수량·위치·재발주점)<br>3) 14번 탭 "RAG 관리" → 업로드 |
| **B. ERP/MES API 연동** | 외부 시스템에서 실시간 재고 조회 | 1) ERP 운영팀과 API 협의<br>2) 인증/네트워크 방화벽 정책<br>3) 별도 개발 필요 (Phase 8) |
| **C. 수동 입력 테이블** | PostgreSQL에 `inventory_table` 신설, 관리자 UI에서 직접 입력 | 1) 누가 어떻게 최신화할지 거버넌스 결정<br>2) 별도 개발 필요 |
| **D. 보류 유지** | 운전원 질문 시 "재고 정보는 별도 시스템 참조" 안내 | 운전원 교육 |

### 권장: 옵션 A

**근거**:
- 현재 KB 시스템(Qdrant 5종 컬렉션)이 이미 운영 중
- xlsx/pdf 자동 파싱 + 임베딩 + 한국어 검색 모두 동작
- 코드 추가 0줄, 즉시 시도 가능
- 부족하다면 그때 B 또는 C로 확장

### 사용자가 해야 할 일 (옵션 A 채택 시)

1. **재고 대장 파일 확보**
   - [ ] 관리부/구매팀에서 최신 재고 엑셀 입수
   - [ ] 민감정보(가격·공급사 단가 등) 제외 또는 가공 결정
2. **업로드**
   - [ ] 앱 접속 → 14번 "RAG 관리" 탭
   - [ ] 관리자 비밀번호 로그인
   - [ ] 컬렉션 = `plant_operation` (또는 신규 `inventory` 컬렉션을 원하면 DB 시드 확장 요청)
   - [ ] 태그 = `inventory`, `예비품` 등 일관된 태그 부착
3. **검증**
   - [ ] 채팅(#13)에서 "PT100 센서 재고 알려줘" 같은 질문으로 검색 결과 확인
   - [ ] 결과가 부정확하면 청크 미리보기(🔍 버튼)로 인덱싱 품질 확인
4. **운영 룰**
   - [ ] 월 1회 or 분기 1회 최신 파일 재업로드 (이전 버전은 "🚫 비활성화" 후 "🗑 정리")
   - [ ] 갱신 주체 1명 지정

### 사용자가 해야 할 일 (옵션 B/C로 갈 경우)
**이 문서 범위 밖**. 별도 요건 정의서가 필요. 본 항목은 옵션 결정만 요청.

---

## 2. 임베딩 모델 BGE-M3 마이그레이션 검토

### 현황
- 현재 사용 중: **`nomic-embed-text`** (768-dim, Ollama 호스트)
- 후보: **`bge-m3`** (1024-dim, 다국어 SOTA, 특히 한국어 성능 우수)
- 5개 Qdrant 컬렉션이 768-dim으로 생성된 상태

### 결정해야 할 것

전환 시 **이득**과 **비용**을 비교 후 GO/NO-GO/POSTPONE 결정.

| 이득 | 비용/위험 |
|------|----------|
| 한국어 검색 품질 향상 (대시기관 평가 기준 +5~15%) | Qdrant 컬렉션 5개 전부 재생성 → 기존 인덱스 일시 소실 |
| 멀티링구얼(영문 매뉴얼+한국어 SOP 혼합)에 강함 | 1024-dim → Qdrant 디스크 사용량 +33% |
| Dense + Sparse + ColBERT 통합 모델 | 임베딩 속도 ~30% 느려짐 (GPU 점유율 ↑) |
| 청크 크기 8K 토큰까지 지원 (nomic은 2K) | Ollama가 bge-m3 미지원 시 다른 호스트 필요 (HF transformers 등) |

### 마이그레이션 절차 (실행 시)

1. **사전 평가** ⚠️ (사용자 액션)
   - [ ] BGE-M3가 Ollama Library에 있는지 확인 (`ollama pull bge-m3`)
   - [ ] 없으면 대안 결정: HF transformers, sentence-transformers 또는 별도 임베딩 서버
   - [ ] 현재 KB 검색 품질에 실질 문제가 있는지 — 운전원 피드백 수집 (1~2주)
2. **샘플 비교 (선택)** (사용자 액션)
   - [ ] 동일 한국어 쿼리 10건을 두 모델로 비교
   - [ ] 한국어 정밀도에서 명백한 개선이 보일 때만 GO
3. **백업** (사용자 액션)
   - [ ] `storage/kb/` 전체 백업
   - [ ] `pg_dump` 로 `kb_*` 테이블 백업
4. **코드 작업** (개발자 액션 — 본 문서 범위 아님)
   - `appsettings.json` 에 `Kb:EmbeddingModel`, `Kb:VectorSize` 설정 추가
   - `KbEmbeddingClient.cs` 에서 모델명/차원 환경변수 참조
   - `KbStartupService.cs` 에서 컬렉션 차원 mismatch 감지 시 재생성
5. **컷오버** (사용자 액션)
   - [ ] 운영 외 시간대 선택 (KB 검색 일시 중단)
   - [ ] Qdrant 컬렉션 5개 삭제 → 새 차원으로 재생성
   - [ ] 모든 KB 문서 일괄 `재인덱싱(↻)` 트리거
   - [ ] 완료까지 모니터링 (문서 수 × 청크 수 × 임베딩 시간)

### 권장: POSTPONE (당분간 보류)

**근거**:
- 현재 nomic-embed-text 검색 품질이 운영에 임계 미달이라는 정량 증거가 없음
- BGE-M3 전환은 비가역적 비용(재인덱싱 시간, 디스크 +33%)이 큰 결정
- Phase 7 신규 기능(채팅 통합·청크 미리보기·요약 등)이 운영에서 안정화된 후
  사용자 피드백으로 검색 품질 이슈가 누적되면 그때 검토

### 사용자가 해야 할 일

- [ ] 1~2개월간 운영하면서 **KB 검색 결과가 부정확했던 사례를 메모**
  - 질문 / 기대 답변 / 실제 검색된 문서 / 점수
  - 메모 위치: 별도 텍스트 파일 또는 본 문서에 추가
- [ ] 사례가 **5건 이상 누적**되고 한국어 매칭 실패가 패턴화되면 마이그레이션 재검토 회의
- [ ] 회의 시점에 다시 본 문서를 갱신 (GO/NO-GO 결정 기록)

### 즉시 가능한 대안 (개발자 액션 불필요)

검색 품질이 부족할 때 BGE-M3 전환 없이 시도해 볼 수 있는 것:

| 시도 | 방법 |
|------|------|
| 더 좋은 청킹 | 업로드 시 `chunking_policy` 옵션 조정 (현재는 자동) |
| 태그 보강 | KB 업로드 시 태그를 풍부하게 부착 → `search_kb`의 tags 필터로 정확도 ↑ |
| 컬렉션 분리 | doc_type별 5개 컬렉션을 더 세분화 |
| `top_k` 조정 | 채팅에서 검색 결과 수를 늘려 LLM이 더 많은 단서로 답하게 |

---

## 체크리스트 요약 (사용자가 해야 할 일)

### 단기 (이번 주 ~ 2주 내)
- [ ] **재고 데이터**: 옵션 A(KB 업로드) 채택 여부 결정 → 채택 시 관리부에 파일 요청
- [ ] **BGE-M3**: 마이그레이션은 보류, 검색 품질 모니터링 시작

### 중기 (1~3개월)
- [ ] 재고 KB 파일 1차 업로드 + 검증
- [ ] KB 검색 부정확 사례 누적 (5건 임계)

### 장기 (3개월+)
- [ ] BGE-M3 마이그레이션 재검토 회의 (사례 누적 시)
- [ ] 재고 데이터를 ERP 연동으로 격상할지 검토 (옵션 A로 한계 도달 시)

---

## 본 문서 갱신 규칙

이 문서는 결정이 진행됨에 따라 사용자가 직접 갱신합니다.
- 결정 완료 시: 해당 섹션에 "결정 결과", "결정자", "결정일" 추가
- 보류 유지: "재검토 예정일" 추가
- 옵션 변경: 새 옵션 행 추가 + 이전 결정 사유 보존
