Skip to content

[기획 변경] 미션 지식 결정적 랜덤 선택 전환 #124

Description

@hoooonshub

연결

배경

현재 PR은 항목별 활성 지식이 6건 이상이면 Gemini 임베딩과 pgvector 유사도 Top 5를 사용하도록 설계했다. 하지만 현재 지식은 항목 코드로 이미 정확히 좁혀지고 항목별 후보도 최대 9건 수준이다. 지식 문구에는 연령대·지역·빈도·금액을 직접 비교할 속성이 충분하지 않아 의미 유사도 개인화 효과가 제한적인 반면, 임베딩 API 호출·벡터 저장·모델 버전 관리·실패 fallback이 생성 지연과 운영 복잡성을 증가시킨다.

변경 결정

  • pgvector와 미션 지식 전용 Gemini 임베딩을 제거한다.
  • 일반 PostgreSQL에서 항목, 활성 상태, 검증 상태, 유효기간으로 모든 후보를 조회한다.
  • 모순 검증은 선택 전에 전체 후보를 대상으로 수행한다.
  • 공식 출처로 검증된 사용 가능 지식이 0건이면 일반 절약 미션을 생성한다.
  • 사용 가능 지식이 1~5건이면 모두 사용한다.
  • 사용 가능 지식이 6건 이상이면 생성 jobId를 seed로 하는 결정적 랜덤 순서에서 5건을 선택한다.
  • 동일 job 재시도는 같은 지식 조합을 사용하고, 새 job은 다른 조합을 선택할 수 있다.
  • 선택된 지식 ID와 선택 정책은 retrieval trace에 기록한다.
  • 개인화 입력은 항목, 연령대/지역, 빈도/금액만 Gemini 미션 생성 프롬프트에 전달한다.

변경 후 플로우

  1. 사용자가 카테고리·항목·주간 빈도·주간 금액으로 미션 생성을 요청한다.
  2. 서버가 항목의 활성·유효·미거절 지식을 일반 SQL로 모두 조회한다.
  3. 동일 subject_key에 상충하는 문구가 있으면 등록된 공식 HTTPS 출처를 요청 시점에 검증한다.
  4. 검증 후 지식이 0건이면 빈 지식 컨텍스트를 사용한다.
  5. 1~5건이면 모두, 6건 이상이면 jobId 기반 결정적 랜덤 5건을 선택한다.
  6. 항목·연령대/지역·빈도/금액과 선택 지식을 Gemini에 전달한다.
  7. Gemini가 대안 문구를 생성하고 서버가 목표 횟수와 예상 절약액을 계산한다.
  8. 생성 초안과 지식 선택 trace를 저장한다.

제거 범위

  • vector extension 및 미션 지식 embedding 컬럼
  • 지식·검색문 Gemini 임베딩 생성
  • pgvector 코사인 유사도 SQL
  • 임베딩 원문·모델·생성 시점 관리
  • 유사도 점수와 임베딩 모델 trace

유지 범위

  • 운영자 관리 지식 본문, 활성 상태, 유효기간, 공식 출처
  • 초기 지식 27건
  • 사용자 요청 시점 공식 출처 모순 검증
  • 지식 0건/조회 실패/검증 후 0건 일반 미션 fallback
  • 제거 항목 6개의 비활성화와 기존 미션 soft delete
  • 네이버 검색 제거

수용 기준

  • V24가 vector extension이나 embedding 컬럼을 생성하지 않는다.
  • 지식 조회 경로에서 EmbeddingModel과 pgvector 연산자를 사용하지 않는다.
  • 모순 검증이 랜덤 선택보다 먼저 수행된다.
  • 지식 1~5건은 모두 선택된다.
  • 지식 6건 이상은 동일 job에서 항상 같은 5건이 선택된다.
  • 선택된 지식은 중복되지 않는다.
  • 개인화 입력 세 그룹만 Gemini 프롬프트에 전달된다.
  • 선택 정책과 지식 ID가 trace에 기록된다.
  • 지식이 없거나 조회·검증에 실패해도 일반 미션 생성이 계속된다.
  • 전체 테스트와 실행 jar 빌드가 통과한다.

범위 밖

  • 운영자 관리자 UI
  • 지식별 가중치·노출 우선순위
  • 과거 확정 미션 및 legacy blog tip 물리 삭제

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions