---
status: closed
closed_date: 2026-03-21
closed_reason: 3중 검색(벡터+키워드+그래프) 동작 + 샘플 16개 전수 PASS + grounding 11/18 + SKILL.md 정합화 완료
---

# 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)

## 현재 상태 (260323 갱신)

| 항목 | 260320 | 260322 1단계 완료 후 |
|------|--------|---------------------|
| 대상 파일 리스트 | 200개 (`latest_200_companyx.txt`) | 2,000개 (mtime 2026-01-28 이후) |
| 인덱싱 스크립트 | `reindex_companyx_latest_200.py` | + `reindex_companyx_batch.py` |
| team_id | `79441171-3951-4870-beb8-916d07fe8be5` | 동일 |
| team_document | 1,121 completed / 51 processing | **2,369 completed / 136 failed / 0 processing** |
| team_document_chunk | 3,095건 | **19,991건** |
| 임베딩 | Gemini Embedding 2, 768d, HNSW cosine | 동일 |
| MD 파생본 | 48,906개 (front matter만) | 동일 (본문 미추출) |

- 1차(MD 생성): front matter 완료, 본문 미추출
- 2차(DB 적재): **1단계 2,000개 완료** (260322)
- 3차(OCR/관계/동기화): 미착수
- **4차(로빙 연결): 완료** (260321, hybrid 17/17 PASS)
- **미해결**: keyword 단독 검색 전 질의 0건 ([트러블슈팅](../troubleshooting/260323_companyx_rag_keyword_단독검색_전질의_0건.md))

## 적용 범위

- `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)

## 추가 필요한 검색 경로

| 검색 방식 | 상태 (260323) | 비고 |
|-----------|-------------|------|
| PGVector 벡터 검색 | ✅ 구현·운용 | 17/17 PASS |
| TSVECTOR 키워드 검색 | ⚠️ 구현됨, 한국어 한계 | simple 토크나이저 → MeCab-ko 필요 |
| 하이브리드 점수 합산 (RRF) | ✅ 구현·운용 | prefix + threshold 분리 + RRF 정규화 완료 |
| Apache AGE 그래프 관계 확장 | ✅ 구현·운용 | companyx_docs 그래프 운용 중 |

## 샘플 검증 질문 (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개로는 일부만 커버

## 검증 결과 기록

| # | 질문 요약 | 검증일 | 결과 | 비고 |
|---|----------|--------|------|------|
| 1 | 아크로셀 정기주총 서류 | 260321 | PASS | hybrid top-1 조합인감등록부 |
| 2 | 에프앤엘 서면의결서 | 260321 | PASS | hybrid top-1 서면의결서 양식 |
| 3 | IP 투자조합 9호 고유번호증 | 260321 | PASS | hybrid top-1 결산부속명세서 |
| 4 | 코드크레용 소집통지서 | 260321 | PASS | hybrid top-1 소집통지서 |
| 5 | 앤션트투투데이 재무상태표 | 260321 | PASS | hybrid top-1 재무상태표 |
| 6 | 투자조합별 관리보수 비교 | 260321 | PASS | hybrid top-1 자금안 |
| 7 | 다리마티 보통주 계약 조건 | 260321 | PASS | hybrid top-1 보통주 계약서 |
| 8 | 팁스 운영사 소재지 변경 | 260321 | PASS | hybrid top-1 팁스 소재지 공문 |
| 9 | 립스 소재지 변경 안내 | 260321 | PASS | hybrid top-1 립스 소재지 공문 |
| 10 | 엠에스코스 팁스 추천서 | 260321 | PASS | hybrid top-1 추천서 |
| 11 | 팁스 보완 서류 | 260321 | PASS | hybrid top-1 보완 서류 공문 |
| 12 | 오늘전통 6기 사업계획서 | 260321 | PASS | hybrid top-1 사업계획서 |
| 13 | 오늘전통 AC 본점 이전 공문 | 260321 | PASS | hybrid top-1 본점 소재지 공문 |
| 14 | e나라도움 정보공시 | 260321 | PASS | hybrid top-1 정보공시 등록 방법 |
| 15 | 휴가 규정 (실패 예상) | 260321 | PASS | 정상 실패 (grounding failure) |
| 16 | 전체 투자사 수 (실패 예상) | 260321 | PASS | 문서 범위 내 5개 답변 |

## 금지 원칙

- 질문별 하드코딩 특례/폴백/예외 분기를 추가하지 않는다.
- 리콜은 공통 검색 품질(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와 실제 응답 형식 일치.

## 보류

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