---
type: research
tags: [research, rag, companyx, search-quality, pdf, context]
status: closed
closed_date: 2026-03-22
closed_reason: 원인 3건 확정 + 조치 완료. A1 chunk_text 교정, A3 추가 인덱싱, 파일명 보조 검색. 17/17 전수 통과. B 유형(대화 맥락)은 후속 과제.
research_target: A1/A3 검색 미적중 원인과 B 유형 대화 맥락 미연결 원인 확정
---

# 260322 검색 미적중·PDF 바이너리 청크 품질·대화 맥락 리서치

## 목적

- 테스트셋 A1(고유번호증), A3(오늘전통 사업계획서) 검색 실패의 직접 원인을 확정한다.
- B 유형(대화 맥락 미연결)의 구조적 원인을 확인한다.

## 사실 (Facts)

### 1. A1: 고유번호증 검색 미적중

- 파일 `고유번호증_컴퍼니엑스 IP 투자조합 9호.pdf`는 인덱싱 완료 (doc_id `4aa6f0e8`)
- 검색 "컴퍼니엑스 IP 투자조합 9호 고유번호증"으로 top-5에 미등장
- chunk_text 내용: OCR 깨진 문자열 (`단 제 & 대표자 성명 er 피 발 급 사 유...`)
- **원인**: PDF 바이너리 임베딩 경로에서 `_build_preview_text()`가 텍스트 추출 결과를 chunk_text에 넣는데, 이미지 PDF의 경우 OCR이 없어서 깨진 문자열이 들어감. 키워드 "고유번호증"이 tsv 토큰에 정상으로 안 들어가고, 임베딩도 깨진 텍스트 기반이라 쿼리와 거리가 멂.

### 2. A3: 오늘전통 사업계획서 검색 실패

- `companyx_todaytradition.pdf`가 검색 1위로 잡히지만, 이 파일이 "오늘전통 6기 2차년도 사업계획서"인지 불명
- `1_원차_사업계획서(예산수정)_260317.pdf`가 5위에 잡히지만 파일명에 "오늘전통 6기"가 없음
- **원인**: 200개 파일에 "오늘전통 6기 사업계획서" 제목의 문서가 없거나, 있어도 파일명·내용이 다르게 인덱싱됨

### 3. B 유형: 대화 맥락 미연결

- `try_companyx_grounding(user_id, message)`는 매번 `message`만 받음
- 이전 대화의 검색 결과, 문서명, 답변 내용을 후속 호출에 전달하는 경로 없음
- `message_service.py`에서 `save_message_conversation()`으로 대화를 저장하지만, 다음 grounding 호출에서 이전 대화를 읽지 않음

## 원인 요약

| 유형 | 직접 원인 | 해결 방향 |
|------|----------|----------|
| A1 (검색 미적중) | 이미지 PDF의 chunk_text가 OCR 깨진 문자열 | OCR 보강 또는 파일명 기반 키워드 보조 검색 |
| A3 (내용 불일치) | 200개에 해당 문서 미포함 또는 파일명 불일치 | 인덱싱 범위 문제 (200개 한계) |
| B (맥락 미연결) | grounding이 매번 독립 검색, 이전 대화 미참조 | 이전 grounding 결과를 후속 호출에 컨텍스트로 전달 |
