Skip to content

feat(ai): Ask Chat RAG 답변 생성 파이프라인 추가#199

Open
1Seob wants to merge 10 commits into
developfrom
feat/rag-answer
Open

feat(ai): Ask Chat RAG 답변 생성 파이프라인 추가#199
1Seob wants to merge 10 commits into
developfrom
feat/rag-answer

Conversation

@1Seob

@1Seob 1Seob commented Jul 19, 2026

Copy link
Copy Markdown
Collaborator

📝 요약(Summary)

  • Ask Chat 질문 전송 시 최근 대화 맥락과 사용자 RAG 기록을 바탕으로 AI 답변을 생성하고, USER/ASSISTANT 메시지와 사용 근거 문서를 저장하도록 구현했습니다.
  • 답변 품질 개선을 위해 프롬프트 계약을 고도화하고, report 도메인과 유사하게 PromptLoader 기반으로 프롬프트 원문 관리 책임을 분리했습니다.
  • “새로운 대화로 시작하기” API와 답변 생성 소요 시간 기록, dev/prod 배포 환경 변수 주입까지 포함해 Ask Chat 답변 생성 기능을 운영 가능한 형태로 정리했습니다.

주요 변경사항

  • RAG 답변 생성

    • 최근 세션 메시지와 RAG 검색 결과를 조합하는 AskChatAnswerContextService 추가
    • Spring AI ChatClient 기반 AskChatAnswerLlmClient 추가
    • AI 응답 JSON 파싱 및 answer, followUpQuestions 반환 처리
    • provider/model/token usage를 ASSISTANT 메시지에 저장
  • 질문 전송 플로우

    • POST /ask-chat/messages에서 USER 메시지 저장 후 AI 답변 생성 및 ASSISTANT 메시지 저장 연결
    • 답변 생성 실패 시 FAILED ASSISTANT 메시지 저장
    • 성공한 답변에 대해서만 answeredTurnCount 증가
    • RAG 검색 SQL의 nullable interestCode 타입 추론 오류 보정
  • 근거 문서와 운영 지표

    • ask_chat_message_references 테이블 및 엔티티/레포지토리 추가
    • 답변 생성에 사용된 RAG document id를 assistant message와 displayOrder로 매핑
    • ask_chat_messages.generation_duration_ms 컬럼 추가
    • RAG 컨텍스트 구성부터 LLM 답변 생성까지의 소요 시간을 ASSISTANT 메시지에 기록
  • 프롬프트 품질 및 관리 구조

    • 답변 말투, 직전 질문 참조, 후속 질문 화자, 현재 질문 중복 방지 규칙 보강
    • AskChatAnswerPromptLoader 인터페이스 추가
    • local/dev/prod용 PromptLoader 구현체 추가
    • AskChatAnswerPromptComposer는 템플릿 치환과 컨텍스트 직렬화만 담당하도록 책임 분리
  • 세션 API

    • POST /ask-chat/sessions/new 추가
    • 기존 ACTIVE 세션을 ENDED로 종료하고 새 ACTIVE 세션 생성
    • 기존 메시지는 삭제하지 않고 히스토리 조회 가능 상태로 보존
  • 배포/설정

    • Ask Chat 답변 생성 설정을 application.yml, application-test.yml에 추가
    • dev/prod GitHub Actions 배포 워크플로우에 ASK_CHAT_ANSWER_SYSTEM_PROMPT_B64, ASK_CHAT_ANSWER_USER_PROMPT_B64 디코딩 및 export 추가
  • 테스트

    • 답변 컨텍스트 구성 테스트 추가
    • LLM 응답 파싱/검증 테스트 추가
    • 질문 전송 성공/실패/턴 제한/생성 소요 시간 기록 테스트 보강
    • 근거 문서 매핑 repository 테스트 추가
    • 프롬프트 템플릿 치환 테스트 추가
    • 새 대화 시작 세션 테스트 추가

검증

  • ./gradlew.bat compileJava
  • ./gradlew.bat test --tests "com.devkor.ifive.nadab.domain.askchat.application.helper.AskChatAnswerPromptComposerTest" --tests "com.devkor.ifive.nadab.domain.askchat.infra.AskChatAnswerLlmClientTest"
  • ./gradlew.bat test --tests "com.devkor.ifive.nadab.domain.askchat.application.AskChatSessionServiceTest" --tests "com.devkor.ifive.nadab.domain.askchat.application.helper.AskChatAnswerPromptComposerTest" --tests "com.devkor.ifive.nadab.domain.askchat.infra.AskChatAnswerLlmClientTest"
  • ./gradlew.bat test --tests "com.devkor.ifive.nadab.domain.askchat.application.AskChatMessageCommandServiceTest" --tests "com.devkor.ifive.nadab.domain.askchat.application.AskChatAnswerContextServiceTest"
  • ./gradlew.bat test --tests "com.devkor.ifive.nadab.domain.askchat.core.repository.AskChatMessageReferenceRepositoryTest" --tests "com.devkor.ifive.nadab.domain.askchat.core.repository.AskChatSessionRepositoryTest"
  • git diff --check

참고 / 리스크

  • dev/prod 배포 전 GitHub environment secrets에 ASK_CHAT_ANSWER_SYSTEM_PROMPT_B64, ASK_CHAT_ANSWER_USER_PROMPT_B64 등록이 필요하여 등록할 예정입니다.
  • local 프롬프트 파일은 기존 report 프롬프트와 동일하게 src/main/resources/secret/ 아래에서 관리되며 git 추적 대상이 아닙니다.
  • 이 PR부터 Ask Chat 질문 전송 경로에서 외부 LLM API 호출이 발생합니다.

🔗 Related Issue

  • Closes:

💬 공유사항

✅ PR Checklist

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

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

1Seob added 10 commits July 14, 2026 22:16
Ask Chat 답변 생성 성공 시 assistant message와 RAG document의 근거 관계를 ask_chat_message_references에 저장하도록 추가하고,
prompt augmentation 경계를 AskChatAnswerPromptAugmenter로 분리해 추후 Spring AI Advisor 전환 지점을 명확화함
Ask Chat 답변 프롬프트의 말투와 직전 질문 참조 규칙을 보강하고, 현재 질문 저장 전에 답변 컨텍스트를 생성하도록 순서를 조정함. RAG 검색에서 interestCode가
null일 때 PostgreSQL 파라미터 타입 추론에 실패하던 문제를 CAST(:interestCode AS VARCHAR)로 수정함
AskChatAnswerPromptLoader와 local/dev-prod 구현체를 추가하고, AskChatAnswerPromptComposer가 프롬프트 원문 대신 로더 템플릿
치환만 담당하도록 책임 분리
POST /ask-chat/sessions/new에서 기존 ACTIVE 세션을 ENDED로 종료한 뒤 새 ACTIVE 세션을 생성하도록 추가
dev/prod 배포 워크플로우에서 ASK_CHAT_ANSWER_SYSTEM_PROMPT_B64와 ASK_CHAT_ANSWER_USER_PROMPT_B64를 디코딩해 런타임 환경
변수로 주입하도록 추가
ask_chat_messages에 generation_duration_ms 컬럼을 추가하고, ASSISTANT 메시지 저장 시 RAG 컨텍스트 구성부터 LLM 답변 생성까지의 소요
시간을 ms 단위로 저장하도록 추가
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.

1 participant