# RAG 검색 응답 키 불일치 수정 (chunk_text vs content) **날짜**: 2025-11-22 **작성자**: Claude **관련 파일**: - `rb8001/app/services/ir_analyzer.py` - `skill-rag-file/app/models/requests.py` - `skill-rag-file/app/api/search.py` **관련 문서**: - `251122_happybell80_chromadb_dimension_mismatch.md` - `251122_coldmail_extraction_improvement_tdd.md` --- ## 문제 상황 차원 불일치(384→768) 해결 및 재인덱싱 완료 후에도 IR 분석 결과 모든 필드 N/A. **실제 파일 테스트**: `650c305b-e45a-4ff4-8bcb-87096f804605` (team `79441171-3951-4870-beb8-916d07fe8be5`) - ChromaDB 컬렉션: 731개 청크 존재 - RAG 검색 시 결과 0건 - LLM에 빈 입력 전달 → N/A --- ## 원인 분석 ### 1. skill-rag-file API 응답 형식 - **requests.py:25**: `SearchResult.chunk_text` 필드 정의 - **search.py:55**: `chunk_text=doc` 로 텍스트 반환 - 응답: `{"results": [{"chunk_text": "내용", ...}], ...}` ### 2. ir_analyzer 파싱 로직 - **ir_analyzer.py:47**: `r.get("content", "")` 로 읽기 시도 - `chunk_text` ≠ `content` → 빈 문자열 반환 - `raw_results = {}` → LLM에 `{}` 전달 → N/A --- ## 해결 방안 **ir_analyzer.py:47**: `content` → `chunk_text` 키 수정 ```python # 변경 전 return "\n".join([r.get("content", "") for r in results]) # 변경 후 return "\n".join([r.get("chunk_text", "") for r in results]) ``` --- ## 구현 완료 **커밋**: `8feea8b` - fix: read chunk_text from rag search results **수정 파일**: `rb8001/app/services/ir_analyzer.py:47` **검증 필요**: 재인덱싱 완료 후 실제 파일 테스트 ```bash docker exec -i rb8001 python3 /code/scripts/test_ir_extraction_real_file.py \ 650c305b-e45a-4ff4-8bcb-87096f804605 79441171-3951-4870-beb8-916d07fe8be5 ``` --- ## 교훈 ### API 스펙 확인 부족 - skill-rag-file 통합 시 응답 형식 추측으로 구현 (`content` 키 사용) - 실제 스펙: `SearchResult` 모델의 `chunk_text` 필드 - 교훈: 스킬 통합 전 Pydantic 모델 또는 API 문서 직접 확인 필수 ### 연쇄 문제 해결 시 중간 검증 - 차원 불일치 해결 → 재인덱싱 → 여전히 N/A - 각 단계마다 실제 API 응답 확인 필요 (ChromaDB 로그, API 응답 출력) - 교훈: 문제 해결 후 실제 데이터 흐름 검증으로 숨은 문제 조기 발견