Skip to content

feat(ai): Ask Chat RAG embedding 생성 및 백필 파이프라인 추가#197

Merged
1Seob merged 4 commits into
developfrom
feat/embedding
Jul 14, 2026
Merged

feat(ai): Ask Chat RAG embedding 생성 및 백필 파이프라인 추가#197
1Seob merged 4 commits into
developfrom
feat/embedding

Conversation

@1Seob

@1Seob 1Seob commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator

📝 요약(Summary)

  • Ask Chat RAG 문서 저장 기반 위에 실제 embedding 생성, 실패 재시도, 기존 데이터 backfill 실행 경로를 추가했습니다.
  • 일간 답변/리포트 완료 후 커밋 이후에 RAG 문서가 색인되도록 연결하고, 운영자가 관리자 페이지에서 기존 완료 데이터를 batch 단위로 이관할 수 있게 했습니다.

주요 변경사항

  • RAG 인덱싱 파이프라인

    • DailyReportCompletedEventanswerEntryId, reportId, interestCode를 포함하도록 확장
    • DailyReportTxService 내부에서 완료 이벤트를 발행해 AFTER_COMMIT listener가 실제 커밋 성공 이후 동작하도록 조정
    • AskChatRagIndexingEventListener를 추가해 완료된 daily answer/report를 RAG 문서로 색인
    • 질문, 사용자 답변, 수정구슬 답변을 묶어 ANSWER_ENTRY source 문서로 저장하고 embedding 생성
  • 실패 재시도와 운영 상태 관리

    • retry_count, last_embedding_attempted_at, DEAD_LETTER 상태 추가
    • embedding 실패 시 retry count를 증가시키고, 최대 재시도 횟수 도달 시 DEAD_LETTER로 전환
    • AskChatRagEmbeddingRetryScheduler를 추가해 FAILED 문서를 주기적으로 재시도
    • embedding-retry-enabled, embedding-retry-fixed-delay-ms, embedding-max-retry-count 설정 추가
  • 기존 데이터 backfill

    • 기존 완료 daily answer/report 중 아직 RAG 문서가 없는 대상을 조회하는 backfill query repository 추가
    • AskChatRagBackfillService를 통해 현재 embedding version 기준으로 batch 단위 색인 지원
    • embedding-batch-size와 별도로 backfill-batch-size를 분리해 운영 batch 크기를 독립 조절 가능하게 구성
  • 관리자 페이지

    • Admin Console에 Ask Chat RAG 탭 추가
    • POST /admin/api/ask-chat/rag/backfill/daily-answers API 추가
    • 관리자 화면에서 Run Next Batch로 한 batch씩 수동 실행하고 targetCount, indexedCount, failedCount 확인 가능
  • 테스트

    • indexing service 단위 테스트 확장
    • retry scheduler, backfill service 테스트 추가
    • Testcontainers PostgreSQL 기반 통합 테스트 추가
    • pgvector embedding 저장, 실패 상태 갱신, backfill 대상 중복 제외 및 batch limit 검증
    • test profile에서 embedding retry scheduler 비활성화

검증

  • .\gradlew.bat test --tests "com.devkor.ifive.nadab.domain.askchat.*" 통과
  • .\gradlew.bat test 전체 통과

참고 / 리스크

  • 이 PR부터 embedding API 호출 경로가 포함됩니다.
  • 기존 데이터 backfill은 앱 기동 시 자동 실행하지 않고, 비용과 rate limit을 통제하기 위해 관리자 화면에서 수동 batch 실행하도록 구성했습니다.

🔗 Related Issue

  • Closes:

💬 공유사항

✅ PR Checklist

PR이 다음 요구 사항을 충족하는지 확인하세요.

  • PR 제목을 커밋 메시지 컨벤션에 맞게 작성했습니다.

1Seob added 4 commits July 13, 2026 21:07
DailyReportCompletedEvent에 answerEntryId와 reportId를 포함하고, 완료 트랜잭션 커밋 이후
AskChatRagIndexingEventListener에서 ANSWER_ENTRY 문서 embedding을 생성하도록 추가
FAILED embedding 문서를 스케줄러로 재시도하고, retry_count가 embedding-max-retry-count에 도달하면 DEAD_LETTER로 전환하도록 보강
기존 완료 daily answer/report를 현재 embedding version 기준으로 batch 색인하는 backfill service를 추가하고, 관리자 페이지에서 한
batch씩 수동 실행할 수 있는 Ask Chat RAG 탭과 API를 추가함. backfill 결과는 targetCount, indexedCount, failedCount로 확인
가능하며 일부 실패 시 다음 대상 처리를 계속하도록 구성함
backfill-batch-size 설정을 분리해 기존 데이터 이관 batch 크기를 별도로 조절하도록 하고, Testcontainers PostgreSQL 환경에서
backfill 대상 조회와 pgvector embedding 상태 갱신을 검증하는 통합 테스트를 추가함. 테스트 프로필에서는 embedding retry scheduler를
비활성화해 의도치 않은 외부 호출 가능성을 줄임
@coldsunn

Copy link
Copy Markdown
Collaborator

LGTM!

@1Seob 1Seob merged commit f0cc674 into develop Jul 14, 2026
1 check passed
@1Seob 1Seob deleted the feat/embedding branch July 14, 2026 08:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants