중복 평가 방지 문제 해결 완료 문서화

This commit is contained in:
Claude-51124 2025-11-28 19:01:45 +09:00
parent 5fdfc259c3
commit 58e3be1d89

View File

@ -26,44 +26,17 @@
## 발견된 문제점
### 1. 중복 파일 처리 문제 (Critical)
### 1. 중복 평가 방지 문제 (Critical) ✅ 해결 완료
**문제**:
- 동일한 파일이 다른 파일명으로 업로드되었을 때, skill-rag-file이 중복 체크하여 같은 `document_id`를 반환
- 5개 파일 중 3개 파일이 실제로 동일한 내용 (MD5 해시 확인)
- 같은 `document_id`로 재평가 시 불필요한 중복 평가 발생
- 테스트를 위해 같은 파일을 여러 번 올릴 때마다 새 평가 생성
**증거**:
```
[5/10] 335f0f6d-aff2-42bd-aedd-341c7e4c8a51.pdf (3444872 bytes)
→ document_id: 00260d32-8109-4b9c-bdf1-d3b4534e29c2 (다른 파일의 ID)
[6/10] 5a443e10-0427-4552-8d5f-57c0769b84cf.pdf (3444005 bytes)
→ document_id: 5a7dde23-48f6-4682-820c-786a52bdb4d7 (다른 파일의 ID)
[10/10] 74c743a7-608e-4597-8d75-8a96f56e56ca.pdf (3444005 bytes)
→ document_id: 5a7dde23-48f6-4682-820c-786a52bdb4d7 (다른 파일의 ID)
```
**MD5 해시 확인**:
```
5580a25d398c07453c1b4de2746c73d1 00260d32-8109-4b9c-bdf1-d3b4534e29c2.pdf
5580a25d398c07453c1b4de2746c73d1 335f0f6d-aff2-42bd-aedd-341c7e4c8a51.pdf ← 동일
1f87473cc465e5008096ef3344a2fcdc 5a443e10-0427-4552-8d5f-57c0769b84cf.pdf ← 동일
1f87473cc465e5008096ef3344a2fcdc 5a7dde23-48f6-4682-820c-786a52bdb4d7.pdf ← 동일
1f87473cc465e5008096ef3344a2fcdc 74c743a7-608e-4597-8d75-8a96f56e56ca.pdf ← 동일
```
**영향**:
- 중복 평가 발생
- 평가 결과가 실제 파일과 불일치
- 통계 왜곡 (실제로는 8개 고유 파일만 평가됨)
**해결 방안**:
1. 프론트엔드에서 업로드 전 중복 체크 (선택적)
2. skill-rag-file의 중복 파일 처리 로직은 유지 (성능상 이점)
3. 평가 시 `document_id` 기준으로 중복 평가 방지 로직 추가
4. 사용자에게 중복 파일 경고 표시
**해결** (2025-11-28):
- `evaluate` 엔드포인트에 `force_reevaluate` 파라미터 추가
- 기본값 `false`: 최신 평가 결과 반환 (중복 평가 방지)
- `true`: 명시적 재평가 (테스트/버전 변경 시 사용)
- 참고: [rb8001/app/router/ir_deck.py](../../rb8001/app/router/ir_deck.py)
---
@ -207,7 +180,7 @@
## 우선순위별 해결 계획
### Phase 1: Critical (즉시 수정)
1. **중복 평가 방지**: `document_id` 기준으로 중복 평가 방지 로직 추가
1. **중복 평가 방지**: `document_id` 기준으로 중복 평가 방지 로직 추가 (2025-11-28 완료)
2. **로깅 강화**: 각 단계별 상세 로그 기록
### Phase 2: High (1주일 이내)
@ -223,18 +196,19 @@
## 교훈
1. **중복 파일 처리**: skill-rag-file의 중복 체크는 성능상 이점이 있지만, 평가 로직에서는 별도 처리 필요
2. **페이지 분할**: 텍스트 기반 추정보다 실제 PDF 메타데이터 활용 필요
3. **SQLAlchemy JSONB 업데이트**: in-place 변경(`dict[key] = value`)은 DB에 반영 안 됨. 반드시 `update()` 구문 사용. 로그로만 판단하지 말고 API 응답으로 검증 필수
4. **중복 엔드포인트 정리**: `upload.py``reindex.py`에 동일한 `/api/reindex` 엔드포인트 존재했음. `upload.py`에서 제거 완료. 같은 기능은 하나의 파일에만 두기
5. **점수 정규화**: 페이지 수에 따른 점수 보정 및 평가 기준 명확화 필요
6. **성능 최적화**: 페이지별 순차 평가보다 병렬 처리로 시간 단축 가능
1. **중복 평가 방지**: 같은 `document_id`로 재평가 시 기본은 기존 결과 반환, 테스트/재평가는 `force_reevaluate=true`로 명시적 재평가
2. **중복 파일 처리**: skill-rag-file의 중복 체크는 성능상 이점이 있지만, 평가 로직에서는 별도 처리 필요
3. **페이지 분할**: 텍스트 기반 추정보다 실제 PDF 메타데이터 활용 필요
4. **SQLAlchemy JSONB 업데이트**: in-place 변경(`dict[key] = value`)은 DB에 반영 안 됨. 반드시 `update()` 구문 사용. 로그로만 판단하지 말고 API 응답으로 검증 필수
5. **중복 엔드포인트 정리**: `upload.py``reindex.py`에 동일한 `/api/reindex` 엔드포인트 존재했음. `upload.py`에서 제거 완료. 같은 기능은 하나의 파일에만 두기
6. **점수 정규화**: 페이지 수에 따른 점수 보정 및 평가 기준 명확화 필요
7. **성능 최적화**: 페이지별 순차 평가보다 병렬 처리로 시간 단축 가능
---
## 다음 단계
1. 중복 평가 방지 로직 구현
1. 중복 평가 방지 로직 구현 완료 (2025-11-28)
2. ✅ 페이지 분할 개선 완료 (2025-11-28)
3. 페이지별 평가 병렬 처리 구현
4. 평가 기준 및 점수 산정 로직 재검토