Skip to content

feat: 대화 컨텍스트 상황 요약 컴포넌트 구현#60

Merged
jumdo12 merged 3 commits into
developfrom
feat/conversation-context-summarizer
May 19, 2026
Merged

feat: 대화 컨텍스트 상황 요약 컴포넌트 구현#60
jumdo12 merged 3 commits into
developfrom
feat/conversation-context-summarizer

Conversation

@jumdo12

@jumdo12 jumdo12 commented May 19, 2026

Copy link
Copy Markdown
Contributor

작업 내용

  • ConversationContextSummarizer: 이전 대화를 "현재 ~한 상황이다." 형태로 요약
    • 현재 기호와 관련 있으면 요약 반환, 무관하면 컨텍스트 배제
  • WordSentenceGenerator: 원문 히스토리 메시지 대신 요약 상황을 시스템 프롬프트에 주입
  • GenerationResult / AiGenerationLog: contextSummary 필드 추가 — 트레이싱 가능
  • 평가 데이터셋 id=26: 무관 컨텍스트 배제 검증 케이스 추가

변경 이유

이전 대화 원문 전달 시 욕구 중복 반영 문제 해결, 토큰 절감

배포 전 DB 마이그레이션

ALTER TABLE ai_generation_logs ADD COLUMN context_summary TEXT;

Closes #59

jumdo12 and others added 3 commits May 19, 2026 13:13
- ConversationContextSummarizer: 이전 대화를 상황 설명문으로 요약
  - 현재 기호와 관련 있으면 "현재 ~한 상황이다." 형태로 압축
  - 무관하면 컨텍스트 배제 (Optional.empty)
- WordSentenceGenerator: 원문 히스토리 메시지 대신 요약 상황을 시스템 프롬프트에 주입

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- GenerationResult에 contextSummary 필드 추가
- AiGenerationLog에 context_summary 컬럼 추가
- 요약된 상황 설명이 DB에 저장되어 추적 가능

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 물/라면/사과 3턴 히스토리 후 공책 요청 케이스
- 이전 음식 컨텍스트가 문장에 스며들지 않는지 assertContextNotLeaked 검증

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jumdo12 jumdo12 merged commit 9489a88 into develop May 19, 2026
@jumdo12 jumdo12 deleted the feat/conversation-context-summarizer branch May 19, 2026 04:37
jumdo12 added a commit that referenced this pull request May 19, 2026
* refactor: 대화 컨텍스트 로딩 방식 개선 (#53)

* feat: reset conversation history after session expiry (#52)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: 대화 컨텍스트 로딩 방식 개선 (개수/시간 임계값 기반 필터링)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: AI 응답 트레이싱 추가 (#55)

* feat: AI 응답 트레이싱 추가 (#54)

- GenerationResult 도입: model, latencyMs, token usage, 성공/실패 정보 포함
- AiGenerationLog 엔티티 및 비동기 이벤트 기반 DB 저장 구현
- promptTokens, completionTokens, totalTokens 컬럼 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: NoResourceFoundException ERROR 로그 제거

favicon.ico 등 정적 리소스 미존재 요청을 조용히 404로 처리

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* test: AAC 문장 품질 평가 테스트 추가 (#56)

* test: RelevancyEvaluator 기반 문장 품질 평가 테스트 추가 (#16)

- sentence-eval-dataset.json: 기호 수 1~6개 구간 20개 평가 케이스
- SentenceQualityEvalTest: 각 케이스별 생성 문장을 RelevancyEvaluator로 관련성 검증
- spring-ai-test 의존성 추가
- ./gradlew aiTest 로 실행 (API 키 필요)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test: 평가 리포트 자동 생성 추가

- @afterall에서 build/reports/eval/ 에 JSON 리포트 파일 생성
- 전체 통과율, 평균 점수, 기호 수별 통계, 케이스별 상세 포함
- 실패 케이스 콘솔 요약 출력

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test: RelevancyEvaluator → AAC 커스텀 평가 프롬프트로 교체

- 의미적 변환 허용 (물+먹고싶어 → 마시고싶어 등) 기준 반영
- 평가 결과에 reason 필드 추가, 리포트에도 포함
- spring-ai-test 의존성 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test: 대화 히스토리 포함 평가 케이스 5개 추가

- 데이터셋에 history 필드 추가 (id 21~25)
- 이전 대화 맥락 반영 여부 검증
- 리플렉션으로 ConversationMessage 생성 (User 의존성 우회)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: 이전 대화 욕구 중복 반영 방지 프롬프트 개선 (서브모듈 포인터 업데이트)

* test: 평가 프롬프트 조사/어미 허용 기준 명확화

- '랑', '에서', '도' 등 한국어 문법 요소는 추가로 허용
- 기호에 없는 명사/동사/개념 추가만 불허로 구체화

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: AI 응답 리랭크 전략 적용 (#57) (#58)

- SentenceReranker 컴포넌트: LLM 기반 최적 후보 선택
- WordSentenceGenerator: OpenAI n 파라미터로 N개 후보 생성 후 리랭크 적용
- generation.candidates 설정값으로 후보 수 조절 (기본값 3)

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: 대화 컨텍스트 상황 요약 컴포넌트 구현 (#60)

* feat: 대화 컨텍스트 상황 요약 컴포넌트 구현 (#59)

- ConversationContextSummarizer: 이전 대화를 상황 설명문으로 요약
  - 현재 기호와 관련 있으면 "현재 ~한 상황이다." 형태로 압축
  - 무관하면 컨텍스트 배제 (Optional.empty)
- WordSentenceGenerator: 원문 히스토리 메시지 대신 요약 상황을 시스템 프롬프트에 주입

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: 컨텍스트 요약 트레이싱 추가 (#59)

- GenerationResult에 contextSummary 필드 추가
- AiGenerationLog에 context_summary 컬럼 추가
- 요약된 상황 설명이 DB에 저장되어 추적 가능

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test: 무관 컨텍스트 배제 검증 케이스 추가 (id=26)

- 물/라면/사과 3턴 히스토리 후 공책 요청 케이스
- 이전 음식 컨텍스트가 문장에 스며들지 않는지 assertContextNotLeaked 검증

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: prod ddl-auto validate → update (서브모듈 포인터 업데이트)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
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