# 260320 로빙 다형식문서 RAG 적용 1차 계획

## 목적

- 앞선 1~3차 산출물을 로빙 실제 질의 응답 경로에 연결하는 첫 적용 단계를 정의한다.
- 목표는 "질문 -> 관련 문서 회수 -> 근거 기반 응답"의 최소 폐회로를 만드는 것이다.

## 참조 문서

- [다형식문서 자동지식화 RAG 파이프라인 아이디어](../ideas/260320_다형식문서_자동지식화_RAG_파이프라인_아이디어.md)
- [다형식문서 RAG 1차 MD·메타 정규화 계획](./260320_다형식문서_RAG_1차_MD_메타_정규화_계획.md)
- [다형식문서 RAG 2차 PGVector·JSONB 적재 계획](./260320_다형식문서_RAG_2차_PGVector_JSONB_적재_계획.md)
- [다형식문서 RAG 3차 OCR·관계확장·동기화 계획](./260320_다형식문서_RAG_3차_OCR_관계확장_동기화_계획.md)
- [PostgreSQL 그래프확장 설계 리서치 (Apache AGE)](../research/rag/260320_PostgreSQL_그래프확장_설계_리서치.md)
- [260315 계획 (닫힘, 본 계획으로 흡수)](./260315_companyx_rag_답변합성_시나리오동시종결_계획.md)
- [계획 통합 워크로그](../worklog/260320_companyx_rag_계획통합_260315닫기_260320흡수.md)

## 현재 상태 (260320 확인)

| 항목 | 상태 |
|------|------|
| 대상 파일 리스트 | `/tmp/latest_200_companyx.txt` (200개) |
| 인덱싱 스크립트 | `skill-rag-file/scripts/reindex_companyx_latest_200.py` |
| team_id | `79441171-3951-4870-beb8-916d07fe8be5` |
| DB 테이블 | `team_document` (1,121 completed / 51 processing), `team_document_chunk` (3,095건) |
| 임베딩 | Gemini Embedding 2, 768차원, HNSW cosine 인덱스 |
| MD 파생본 | `6.Company X_md/` 48,906개 생성 (front matter만, 본문 미추출) |
| NAS 문서 저장 | `documents/companyx/` (로빙 수집 원본), `documents/companyx_md/` (로빙 생성 MD) |

- 1차(MD 생성): front matter 완료, 본문 미추출
- 2차(DB 적재): 200개 대상 텍스트 추출 + 청크 + 임베딩 완료
- 3차(OCR/관계/동기화): 미착수
- **4차(로빙 연결): 미착수 ← 현재 목표**

## 적용 범위

- `rb8001` (`companyx_grounding_service.py`)
- `skill-rag-file` (`search.py`, `postgres_vector_store.py`)
- `skill-embedding` (Gemini Embedding 2 게이트웨이)

## 이미 구현된 질의 흐름 (코드 기준)

1. 사용자 질문 수신 → `should_handle_companyx_grounding()` 인텐트 판정
2. 질문 유형 분류 → `_classify_question_type()` (설명/사실확인/수치/재정리)
3. 멀티쿼리 생성 → `_build_query_candidates()` (7~9개 변형)
4. 벡터 검색 → `_search_companyx_documents()` (PGVector cosine)
5. LLM 근거 검증 → `_call_llm_companyx_grounding()` + Pydantic 검증
6. 응답 생성 → `CompanyXRAGOutput` (direct_answer, evidence_docs, failure_reason)

## 추가 필요한 검색 경로

| 검색 방식 | 현재 | 목표 |
|-----------|------|------|
| PGVector 벡터 검색 | ✅ 구현됨 | 유지 |
| TSVECTOR 키워드 검색 | ❌ 미구현 | 추가 |
| 하이브리드 점수 합산 (RRF) | ❌ 미구현 | 추가 |
| Apache AGE 그래프 관계 확장 | ❌ 미설치 | 추가 |

## 샘플 검증 질문 (200개 파일 기준)

### 투자조합 관련 (파일 비중 최대)
1. 아크로셀 개인투자조합 제2호 정기주총 서류 있어?
2. 에프앤엘코퍼레이션 서면의결서 양식 찾아줘
3. 컴퍼니엑스 IP 투자조합 9호 고유번호증 보여줘
4. 코드크레용 정기주총 소집통지서 내용이 뭐야?
5. 앤션트투투데이 2025년 재무상태표 수치 알려줘
6. 컴퍼니엑스 IP 투자조합별 관리보수 자금계획 비교해줘
7. 다리마티 보통주 계약서 핵심 조건이 뭐야?

### TIPS/LIPS 프로그램 관련
8. 팁스 운영사 본점 소재지 변경 공문 내용 요약해줘
9. 립스 프로그램 운영사 소재지 변경 안내 있어?
10. 엠에스코스 팁스 추천서에 어떤 내용이 있어?
11. 팁스 투자적절성검증위원회 보완 서류 뭐가 필요해?

### 오늘전통/신규운영사 관련
12. 오늘전통 6기 2차년도 창업기업 사업계획서 어디 있어?
13. 오늘전통 AC 본점 이전 관련 공문 내용이 뭐야?
14. e나라도움 정보공시 등록 방법 문서 있어?

### 근거 부족 예상 (실패 응답 검증)
15. 컴퍼니엑스 내부 휴가 규정이 뭐야? → 200개에 없음
16. 컴퍼니엑스 전체 투자사 몇 개야? → 200개로는 일부만 커버

## 금지 원칙

- 질문별 하드코딩 특례/폴백/예외 분기를 추가하지 않는다.
- 리콜은 공통 검색 품질(tsvector + 벡터 + 그래프)로 올린다.
- 260315에서 확정, 260320에서 계승.

## 260315에서 흡수한 항목

- 인덱싱 파이프라인 배포 (Phase 5A: 코드 완료, 배포 미완)
- 재오픈 질문 20개 Slack 실응답 검증 (Phase 5B)
- Pydantic 출력 검증 구조 (`CompanyXRAGOutput`: direct_answer, evidence_docs, failure_reason)
- SKILL.md와 코드 계약 정합화
- 질문 유형 계약 / 근거 채택 계약 / 실패 계약 (구현 완료, 검증 미완)

## 닫는 조건

- **200개 파일(`latest_200_companyx.txt`) 대상 완벽 RAG 구성**
- 벡터 검색(PGVector) + 키워드 검색(TSVECTOR) + 그래프 탐색(Apache AGE) 3중 검색 동작
- 로빙이 200개 파일 범위 내 질문에 근거 문서(문서명, 경로, 핵심 문단)를 포함해 답변한다.
- LLM 응답이 Pydantic 모델(`CompanyXRAGOutput`)로 검증된다.
- 근거 없는 경우와 검색 실패를 구분해 응답한다.
- 응답 로그에 사용 문서와 청크가 남는다.
- 대표 질문셋(계약/MOU, 프로그램 운영, 보고서 수치) + 260315 재오픈 질문 20개 검증 통과.
- SKILL.md와 실제 응답 형식 일치.

## 보류

- 완전 자동 자가개선
- 모든 파일 유형에 대한 완전 멀티모달 해석
- 대규모 그래프 탐색 기반 답변
