DOCS/workflow/03_rag/rag_upload_indexing_pipeline.md
happybell80 f078b28ced docs: 03_rag + 04_scheduler + 05_admin 워크플로우 현행화
03_rag:
- companyx_grounding_pipeline.md: 코드 SSOT 섹션 추가, 진입 조건 3단계(IC→마커 폴백) 정확히 기술, 환경변수 참조로 IP 하드코딩 제거
- companyx_incremental_indexing_workflow.md: frontmatter 표준 적용 (type, last_updated)
- rag_upload_indexing_pipeline.md: 코드 SSOT·재인덱싱·업로드 경로별 진입점 테이블 추가, 환경변수 참조

04_scheduler:
- scheduled_daily_briefing.md: n8n cron 전제 제거, APScheduler DB 기반 + LangGraph 워크플로우 기준 재작성
- scheduled_healthcheck_alert.md: n8n cron 전제 제거, /health 엔드포인트 + SKILL.md registry 기반 재작성
- scheduled_rag_reindex_retry.md: 현행 코드에 해당 잡 없음 → _archive 이동

05_admin:
- diary_reflection_pipeline.md: n8n 전제 제거, APScheduler + diary_generator.py 기준 재작성, /api/diary/generate(존재하지 않는 엔드포인트) 제거

Refs: DOCS#8

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 07:52:29 +09:00

3.8 KiB

tags, type, last_updated
tags type last_updated
workflow
rag
companyx
upload
indexing
workflow 2026-04-06

RAG 업로드·인덱싱 파이프라인

목적

  • 외부 또는 내부 문서를 skill-rag-file에 업로드해 검색 가능한 상태로 만든다.
  • Company X 문서를 검색 경로에 넣기 위한 전처리·저장 절차를 고정한다.

상위 원칙

코드 SSOT

  • skill-rag-file 서비스 (업로드·인덱싱·검색 담당)
  • rb8001/app/pipelines/langgraph_document.py (문서 파이프라인에서 업로드·재인덱싱 호출)
  • rb8001/app/router/slack_handler.py (Slack 파일 업로드 경로)
  • rb8001/app/services/naverworks_file_processor.py (네이버웍스 첨부 업로드 경로)

입력

  • team_id
  • file_url 또는 업로드 파일 본문
  • file_name
  • metadata

출력

  • 업로드 결과 (document_id)
  • 인덱싱 결과 (청크 수, 임베딩 상태)
  • 저장된 문서의 메타데이터
  • 실패 시 실패 원인과 재시도 가능 여부

처리 순서

  1. 요청 페이로드를 정규화한다.
  2. 원본 문서를 $SKILL_RAG_FILE_URL/api/upload로 전달한다.
  3. 텍스트 추출을 수행한다. OCR 대상(이미지 PDF 등)은 OCR 폴백 경로로 처리한다.
  4. 청킹한다 (기준: 1,000자 chunk, 200자 overlap).
  5. 임베딩한다 (Gemini Embedding 2, 768d).
  6. DB 저장 시 tsvector 컬럼이 트리거로 자동 생성된다 (simple 설정).
  7. 저장 결과를 그대로 반환한다.

재인덱싱

  • $SKILL_RAG_FILE_URL/api/reindex 엔드포인트를 통해 기존 문서 재인덱싱 가능.
  • langgraph_document.py 파이프라인에서 업로드 후 필요 시 재인덱싱을 호출한다.
  • 재인덱싱 후 $SKILL_RAG_FILE_URL/api/text/{document_id}로 텍스트 추출 결과를 검증한다.

업로드 경로별 진입점

경로 코드 설명
Slack 파일 첨부 slack_handler.py$SKILL_RAG_FILE_URL/api/upload Slack에서 파일 다운로드 후 skill-rag-file로 전송
네이버웍스 메일 첨부 naverworks_file_processor.py$SKILL_RAG_FILE_URL/api/upload 메일 첨부 다운로드 후 업로드
IR Deck 업로드 ir_deck.pyslack_handler.upload_files_to_rag() IR Deck 평가를 위한 업로드
배치 인덱싱 skill-rag-file/scripts/ 대량 문서 일괄 인덱싱

환경변수

  • SKILL_RAG_FILE_URL — skill-rag-file 서비스 베이스 URL (필수).

실패 분기

  • 파일 누락이면 업로드 전에 실패한다.
  • 텍스트 추출이 실패하면 인덱싱하지 않는다.
  • 임베딩 또는 저장이 실패하면 성공처럼 반환하지 않는다.
  • 같은 파일 재업로드 시 멱등성 규칙을 유지해야 한다.

현재 기준

  • RAG 인덱싱은 skill-rag-file이 담당한다.
  • Company X 문서는 team_id(79441171-3951-4870-beb8-916d07fe8be5) 경계로 분리한다.
  • 검색 가능한 상태가 되기 전까지는 Grounding 파이프라인에 연결하지 않는다.
  • 청킹 기준: 1,000자 chunk, 200자 overlap.
  • 임베딩: Gemini Embedding 2, 768차원, HNSW cosine 인덱스.
  • tsvector 컬럼은 INSERT/UPDATE 트리거로 자동 생성된다 (simple 설정, GIN 인덱스).

검증 기준

  • 업로드 직후 검색 API로 최소 1건 이상 적중하는지 확인한다.
  • 저장된 문서명이 원본 파일명과 정합한지 확인한다.
  • 대용량 문서도 실패 없이 처리되는지 확인한다.

관련 문서