---
tags: [plans, rag, robeing, ocr, graph, sync, multimodal]
type: plans
status: open
depends_on: 260320_다형식문서_RAG_2차_PGVector_JSONB_적재_계획.md
closing_criteria: OCR 선별 적용과 문서 관계 확장, 생성·수정·삭제 동기화 루프를 운영 기준으로 고정
---

# 260320 다형식문서 RAG 3차 OCR·관계확장·동기화 계획

## 목적

- 2차 저장 구조 위에 OCR 선별 적용, 문서 관계 확장, 생성·수정·삭제 동기화까지 붙인다.
- 이 단계부터 대량 운영에 필요한 자동화와 품질 개선 루프를 만든다.

## 참조 문서

- [OCR 선별 적용 정책 리서치](../research/rag/260320_OCR_선별적용_정책_리서치.md)
- [PostgreSQL 그래프확장 설계 리서치](../research/rag/260320_PostgreSQL_그래프확장_설계_리서치.md) — **Apache AGE 도입으로 방향 변경**

## 범위

- OCR 후보 선별
- OCR 결과를 기존 MD와 DB에 누적
- ~~`document_relations` 생성~~ → Apache AGE 그래프로 대체
- 파일 변경 감지 및 재처리
- soft delete 반영

## 실제 코드 현황

- OCR: 미구현. 현재 인덱싱은 텍스트 추출 + PDF 바이너리 직접 임베딩만.
- 관계: Apache AGE 기반 그래프는 이미 운용 중이다. `companyx_docs`, `document_graph` 그래프가 있고 검색 시 `graph_score`도 합산된다.
- 동기화: 외부→내부 NAS cron 있음. NAS→DB 자동 인덱싱은 없음 (수동 스크립트만).

## 현재 상태 보정 (2026-03-22)

- 이 단계는 `관계 확장 일부 구현 + OCR/증분 동기화 미완` 상태다.
- 즉 `AGE 그래프 자체`는 더 이상 예정 항목이 아니고, 남은 핵심은 `대량 증분 수집`, `재색인 트리거`, `실패 격리`, `삭제/이동 반영`이다.
- Neo4j는 현재 기준 운영 SSOT가 아니다.

## 관계 생성 우선순위

1. front matter `related`
2. 같은 폴더/프로젝트
3. 공통 태그/키워드
4. 벡터 유사도 기반 보조 연결

## 동기화 원칙

- 새 파일: MD 생성 + DB insert
- 수정 파일: hash 비교 후 재생성/재임베딩
- 삭제 파일: `deleted` 상태 반영

## 증분 운영 계약 (초안)

- 재색인 트리거: `새 파일`, `source_hash 변경`, `본문 미추출 보완`, `OCR 결과 추가`, `그래프 규칙 변경`일 때만 재색인한다.
- 실패 처리: 원본 누락·경로 접근 실패는 `중단`이 아니라 `격리`하고, 문서 단위 실패 목록에 남긴 뒤 재시도한다.
- SSOT 우선순위: `원본 파일 > MD 파생본 > team_document/team_document_chunk > AGE 그래프` 순서로 본다.
- 품질 게이트: 샘플 질문 회귀 없음, 실패 문서 로그 남음, 삭제/수정 반영 확인을 통과해야 다음 배치 규모로 확장한다.

## Unresolved

- 24 서버 런타임에서 NAS 원본 전체 경로 접근이 불안정해 대량 재처리 경로가 아직 고정되지 않았다.
- OCR 선별 기준은 있으나 실제 배치 실행기와 실패 재시도 정책은 없다.
- 파일 삭제/이동 시 MD, DB, 그래프를 어떤 순서와 트랜잭션 경계로 갱신할지 더 명확한 운영 기준이 필요하다.

## 산출물

- OCR 배치 정책
- 관계 생성 규칙
- 증분 동기화 배치 또는 감시 구조

## 완료 조건

- OCR이 필요한 파일만 선별 처리된다.
- 삭제된 파일이 DB와 MD 상태에 반영된다.
- 관련 문서 연결 탐색이 가능하다.
