# 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 그래프 관계 확장 | ❌ 미설치 | 추가 | ## 샘플 검증 질문 - 계약/MOU 근거 질문 - 특정 프로그램 운영 근거 질문 - 보고서 내 수치/표 근거 질문 - 260315 재오픈 질문 20개 (예: `오늘전통 프로그램을 Company X가 옐로펀치랑 같이 운영한다는 근거 있어?`) ## 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와 실제 응답 형식 일치. ## 보류 - 완전 자동 자가개선 - 모든 파일 유형에 대한 완전 멀티모달 해석 - 대규모 그래프 탐색 기반 답변