Conversation
- 꼬리질문 생성 시 원본 질문의 주제를 반드시 유지하도록 프롬프트 제약 조건 강화 - 질문 주제와 무관한 꼬리질문 생성을 방지하기 위한 규칙 및 예시 추가
Entr0py127
added a commit
that referenced
this pull request
Jan 23, 2026
* feat: FastAPI 기반 프로젝트 초기화 (#2) * chore: Python 프로젝트 환경 설정 - uv 패키지 매니저 기반 의존성 관리 - Python 3.12 버전 지정 - FastAPI, Ruff 등 필수 패키지 설정 * chore: VS Code 개발 환경 설정 - Ruff 포매터/린터 확장 추천 - 저장 시 자동 포맷 설정 * feat: FastAPI 앱 기본 구조 구현 - DDD 스타일 디렉토리 구조 설정 - Health Check 엔드포인트 추가 - API 라우터 및 설정 모듈 구성 * docs: 프로젝트 README 작성 - 프로젝트 구조 및 아키텍처 설명 - Quick Start 가이드 추가 - Spring 개발자를 위한 코드 비교 정리 * feat: AWS Bedrock 기반 Fixed Question 생성 API 구현 (#5) * feat: AWS Bedrock API 연동 추가 - BedrockService 클래스 구현 (ChatBedrockConverse 기반) - AWS 인증 및 설정 추가 (config.py) - 의존성 추가: boto3 1.42.14, langchain-aws 1.1.0, langgraph 1.0.5 - Bedrock 연결 상태 확인 테스트 추가 - 예외 처리 및 로깅 구현 * feat: Fixed Question 생성 API 구현 - FixedQuestionGenerationRequest/Response 스키마 추가 - BedrockService에 generate_fixed_questions 메서드 구현 - 구조화된 에러 응답 시스템 추가 (ErrorResponse, AIException) - /api/v1/fixed-questions/generation 엔드포인트 구현 - AWS Bedrock 프롬프트 템플릿 정의 (prompts.py) * fix: TOML 주석 문법 오류 수정 및 의존성 버전 동기화 * feat: 환경 변수 설정 개선 및 .env.example 추가 - GitHub Actions 등 CI/CD 환경에서 환경 변수 주입 지원 - Pydantic v2 설정 스타일로 리팩토링 - 필수 환경 변수 템플릿 문서화 * docs: Ruff 익스텐션 설치 가이드 추가 * style: 미사용 코드 제거 및 포맷팅 적용 * refactor: API URL 프리픽스(/api/v1) 제거 - API_PREFIX 환경 변수 기본값을 빈 문자열로 변경하여 URL 구조 간소화 - 기존 /api/v1/fixed-questions/* -> /fixed-questions/* 로 변경 * refactor: BedrockService에 DI 패턴 도입 및 엔드포인트 구조 개선 - import 시점 크래시 방지를 위한 Lazy Initialization 적용 - FastAPI 의존성 주입(Depends) 패턴 적용 - 스레드 풀 활용을 위해 엔드포인트 동기 함수로 전환 * test: 고정 질문 생성 API 단위 테스트 및 pytest 설정 추가 - pytest 및 httpx 개발 의존성 추가 - BedrockService 모킹을 통한 단위 테스트 작성 * chore: 로깅 도입 및 미사용 파일 정리 - main.py의 print문 logging으로 교체 - Health Check 동적 버전 적용 - 미사용 스키마 파일 삭제 --------- Co-authored-by: Hyun <itsmine096@gmail.com> * feat: 설문 진행 ai 구현 (#6) * feat: AWS Bedrock API 연동 추가 - BedrockService 클래스 구현 (ChatBedrockConverse 기반) - AWS 인증 및 설정 추가 (config.py) - 의존성 추가: boto3 1.42.14, langchain-aws 1.1.0, langgraph 1.0.5 - Bedrock 연결 상태 확인 테스트 추가 - 예외 처리 및 로깅 구현 * feat: Fixed Question 생성 API 구현 - FixedQuestionGenerationRequest/Response 스키마 추가 - BedrockService에 generate_fixed_questions 메서드 구현 - 구조화된 에러 응답 시스템 추가 (ErrorResponse, AIException) - /api/v1/fixed-questions/generation 엔드포인트 구현 - AWS Bedrock 프롬프트 템플릿 정의 (prompts.py) * fix: TOML 주석 문법 오류 수정 및 의존성 버전 동기화 * feat: 환경 변수 설정 개선 및 .env.example 추가 - GitHub Actions 등 CI/CD 환경에서 환경 변수 주입 지원 - Pydantic v2 설정 스타일로 리팩토링 - 필수 환경 변수 템플릿 문서화 * docs: Ruff 익스텐션 설치 가이드 추가 * style: 미사용 코드 제거 및 포맷팅 적용 * feat: Survey Interaction 기능 구현 및 통합 - InteractionService 및 LangGraph 워크플로우 구현 - SurveyInteraction API 및 스키마 추가 - 테스트용 시뮬레이션 스크립트 추가 * chore: 테스트 의존성(pytest) 추가 - 개발 환경용 pytest 패키지 추가 * refactor: DI 패턴 통일 및 싱글톤 제거 - API 엔드포인트에 Depends() 패턴 적용 - 모듈 수준 싱글톤 인스턴스 제거 - LangGraph 워크플로우에 서비스 주입 구조 적용 - InteractionService 에러 전파로 변경 * chore: 미사용 API_PREFIX 설정 제거 * fix: 개발 모드에서 version() 호출 오류 수정 - get_version() 헬퍼 추가 - PackageNotFoundError 시 dev 반환 * chore: uv.lock 업데이트 * feat: SSE 토큰 스트리밍 적용 - 설문 상호작용 API를 SSE(Server-Sent Events)로 변경하고 꼬리 질문 생성 시 토큰 단위 스트리밍을 적용 - bedrock_service: async 메서드 및 stream_tail_question() 추가 - conversation_workflow: 노드 함수 async 변환 - interaction_service: 토큰 스트리밍 로직 구현 - survey_interaction: StreamingResponse 적용 * docs: API 명세서 문서 추가 --------- Co-authored-by: Hyun <itsmine096@gmail.com> * chore: FastAPI CI/CD 파이프라인 구축 (#8) * hotfix: EC2 ECR 인증 실패 수정 - GitHub Runner에서 ECR 로그인 토큰 생성 - EC2로 토큰 전달하여 docker login 실행 (AWS CLI 의존성 제거) - set -e 추가로 pull 실패 시 스크립트 중단 (다운타임 방지) * fix: ECR 토큰 로그 노출 방지 - ::add-mask:: 추가하여 토큰이 GitHub Actions 로그에 마스킹되도록 수정 * feat: 답변 분석 시 question_type 반환 추가 (#11) - AgentState에 question_type 필드 추가 - analyze_answer_node에서 tail_question_count 기반으로 타입 판단 - tail_question_count가 0이면 FIXED, 0보다 크면 TAIL * refactor: 서비스 리팩토링(Lifespan 적용) 및 협업 가이드 문서화 (#12) * chore: 테스트 설정 업데이트 및 의존성 추가 - pytest-asyncio 의존성 추가 - pytest 설정을 업데이트하여 비동기 테스트 모드 자동 감지 설정 * refactor: 의존성 주입 패턴 개선 - lru_cache 기반 전역 싱글톤 제거 - FastAPI Lifespan 및 app.state를 활용한 DI 패턴 적용 - 순환 참조 문제 해결 및 구조 개선 * test: 수동 테스트 스크립트 수정 - 변경된 DI 구조에 맞춰 서비스 인스턴스 직접 생성 로직 추가 - 전역 싱글톤 의존성 제거에 따른 코드 수정 * test: 공유 픽스처 추가 및 설정 정리 - tests/conftest.py: AsyncClient 및 서비스 Mock 픽스처 추가 - pyproject.toml: 불필요한 주석 제거 * docs: 협업 가이드 문서 추가 - 에이전트 및 개발자를 위한 GEMINI.md 지침서 추가 - 기술 스택, 패키지 구조, 네이밍 규칙, API 설계 가이드 문서화 - Git 커밋 컨벤션 및 브랜치 전략 정의 * feat: 임베딩 기능 및 ChromaDB 연동 구현 (#13) * feat: 임베딩 기능 및 ChromaDB 연동 구현 (#13) - Amazon Titan Embeddings V2 모델을 사용하는 EmbeddingService 구현 - 로컬 벡터 저장소로 ChromaDB (Embedded 모드) 설정 - 설문 인터랙션 데이터를 벡터화하여 저장하는 API 엔드포인트 추가 - 데이터 검증 및 테스트를 위한 시드 데이터 생성 스크립트 및 뷰어 추가 - 임베딩 관련 환경 변수 및 의존성 라이브러리 추가 * refactor: Async-First 아키텍처 및 Pydantic v2 규칙 적용 - bedrock_service.py: 동기 메서드 제거 및 완전한 비동기 전환 (ainvoke 사용) - fixed_question.py: 엔드포인트 비동기(async def)로 전환 - schemas: 모든 모델에 ConfigDict(str_strip_whitespace=True) 적용 * fix: FixedQuestionFeedback에 피드백 필드 추가 및 테스트 검증 로직 수정 (#16) - FixedQuestionFeedbackCreate에서 feedback 입력 필드 제거 - FixedQuestionFeedback 응답에 original_question 분석 피드백 필드 추가 - 관련 프롬프트 및 API 명세서 업데이트 - test_bedrock_connection이 연결 실패 시 FAILED 반환하도록 수정 * hotfix: EC2 배포 시 BEDROCK_EMBEDDING_MODEL_ID 환경변수 누락 수정 * feat: BERTopic 기반 설문 분석 파이프라인 구축 및 키워드 추출 고도화 (#24) * feat: 설문 분석 파이프라인 구현 - 벡터 기반 클러스터링(BERTopic)을 사용하는 AnalyticsService 추가 - GEQ 7차원 기반 LLM 감정 분석 기능 추가 - 실시간 처리를 위한 SSE 스트리밍 엔드포인트(/analytics) 추가 - 분석 스키마 추가(GEQScores, SentimentStats, ClusterInfo) - LLM 클러스터링 및 감정 추출을 위한 프롬프트 추가 - 단위 테스트 및 통합 테스트 추가 (테스트용 샘플 데이터 포함) - 의존성 업데이트(umap-learn, hdbscan, scikit-learn) * feat: Analytics 서비스 Kiwi 형태소 분석 및 LLM 재시도 로직 추가 - Kiwi 형태소 분석기를 사용한 한국어 키워드 추출 개선 - LLM 호출 실패 시 exponential backoff 재시도 로직 추가 (최대 3회) - kiwipiepy 의존성 추가 (명사/동사/형용사 추출) - DTO 타입 리팩토링: survey_id, fixed_question_id를 int(Long)로 변경 - 통합 테스트 수정 (정수형 ID 사용) * hotfix: hdbscan 빌드를 위한 build-essential 추가 (#26) - hdbscan 패키지 빌드 시 gcc 컴파일러가 필요하여 Dockerfile 빌더 스테이지에 build-essential 설치 단계 추가 * chore: CI/CD 파이프라인 및 Docker 빌드 최적화 - Dockerfile: uv 버전 고정, BuildKit 캐시, ChromaDB 권한 수정, Python HEALTHCHECK - deploy.yml: ECR 캐시, 타임아웃 30분, SSM 폴링 방식, 앱 시작 대기 60초 - .dockerignore: 빌드 컨텍스트 최적화 * feat: Analysis API 경로 변경 및 Clustering Entity 수정 (#28) * feat: Analysis API 경로 변경 및 Clustering Entity 수정 - API 엔드포인트 경로 수정: /questions/{question_id}/analyze -> /questions/{question_id} - ClusterInfo Entity에 representative_answer_ids 필드 추가 - AnalyticsService에서 클러스터링 결과 생성 시 대표 답변 ID 리스트 포함하도록 로직 개선 * fix: analytics_service f-string 수정 및 코드 정리 - analytics_service.py 내 불필요한 f-string 수정 - 불필요한 테스트 파일 삭제 및 pyproject.toml 설정 업데이트 - 코드 포맷팅 및 정규화 적용 * hotfix: AI 서비스 CI 빌드 실패 문제 해결 (#32) - GitHub Actions Runner 디스크 공간 부족으로 인한 빌드 에러 수정 - free-disk-space 액션 추가하여 불필요한 패키지 삭제 * hotfix: AI 서비스 CI 빌드 실패 문제 해결 (#33) * hotfix: AI 서비스 CI 빌드 실패 문제 해결 - GitHub Actions Runner 디스크 공간 부족으로 인한 빌드 에러 수정 - free-disk-space 액션 추가하여 불필요한 패키지 삭제 * hotfix: AI CI 빌드 실패 문제 해결 (large-packages false) - GitHub Actions Runner 디스크 공간 부족으로 인한 빌드 에러 수정 - large-packages:false로 타임아웃 방지 * feat: AI 서버 Survey ID -> UUID 마이그레이션 적용 (#36) * feat: AI 서버 Survey ID -> UUID 마이그레이션 적용 - Pydantic 스키마(InteractionEmbeddingRequest, QuestionAnalysisRequest)의 survey_id를 survey_uuid로 변경 - AnalyticsService 및 EmbeddingService의 ChromaDB 메타데이터 및 조회 로직을 UUID 기반으로 수정 - 관련 단위 테스트(test_analytics.py, test_embedding_connection.py) 업데이트 * fix: 테스트 파일의 타입 불일치 수정 - test_analytics의 fixed_question_id를 string에서 int로 수정 - test_embedding_connection.py의 fixed_question_id를 int 타입으로 수정 - seed_chromadb.py의 survey_id를 survey_uuid로 변경 * feat: 설문 종료 전 마지막 오픈에드 질문 API 추가 (#34) * OpeningRequest, ClosingRequest, EndReason 스키마 추가 * feat: Phase 기반 인터뷰 세션 시작/종료 API 추가 - SessionStartRequest, SessionEndRequest 스키마 추가 - InterviewPhase Enum (OPENING, MAIN, CLOSING) 정의 - TesterProfile 스키마로 테스터 정보 구조화 - session_service.py 신규 생성 - stream_opening(): 인사말 + 오프닝 질문 SSE 스트리밍 - stream_closing(): 종료 이유별 마무리 멘트 생성 - POST /surveys/start-session, /surveys/end-session 엔드포인트 추가 - dependencies.py, main.py에 SessionService DI 설정 * refactor: interaction_service SSE 이벤트 개선 - token 이벤트를 continue로 변경 (클라이언트 입력 비활성화 명시) - done 이벤트에 phase, should_end, end_reason 필드 추가 - 피로도 휴리스틱 체크 로직 추가 (짧은 답변 연속 감지) - survey.py 스키마 중복 제거 및 정리 * feat: 종료 전 마지막 오픈에드 질문 API 추가 - POST /surveys/closing-question 엔드포인트 추가 - ClosingQuestionRequest 스키마 정의 - SSE 스트리밍으로 마지막 질문 생성 기능 구현 - 피로도 판단 기준 변경: 글자수(10자) → 단어수(3단어 이하) * refactor: ClosingQuestionRequest의 end_reason 타입을 EndReason Enum으로 변경 * fix: 대표 답변 전달 자료형 변경 (#38) - 변수명 수정 및 outlier text를 전달 * refactor: test_purpose 필드를 theme_priorities로 대체 (#39) * refactor: test_purpose 필드를 theme_priorities로 대체 - FixedQuestionDraftCreate, FixedQuestionFeedbackCreate 스키마 수정 - theme_priorities: 필수, 1~3순위 최대 3개로 제한 - theme_details: Optional로 변경 (기본값 None) - 중복 제거 및 빈 문자열 필터링 validator 추가 - BedrockService에서 test_purpose 참조 5곳 제거 - analyze_answer, generate_tail_question (동기/비동기/스트리밍) - _format_theme_info 메서드 None 처리 추가 - 테스트 코드 및 API 명세서 업데이트 * fix: Remove duplicate game context line in prompts.py Removed duplicate line for game context in prompts. --------- Co-authored-by: Entr0py127 <idjw121611@gmail.com> * chore: 설문 진행 AI prompt 다듬기 (#40) * feat: 마지막 질문 판단 로직 추가 - SurveyInteractionRequest에 current_question_order, total_questions 필드 추가 - interaction_service에서 마지막 질문 + PASS_TO_NEXT인 경우 should_end=true, end_reason=ALL_DONE 반환 - Spring 서버가 종료 시점을 정확히 판단할 수 있도록 개선 * feat: prompt 다듬기 * feat: 리액션 SSE 이벤트 기능 추가 (#44) * feat: 마지막 질문 판단 로직 추가 - SurveyInteractionRequest에 current_question_order, total_questions 필드 추가 - interaction_service에서 마지막 질문 + PASS_TO_NEXT인 경우 should_end=true, end_reason=ALL_DONE 반환 - Spring 서버가 종료 시점을 정확히 판단할 수 있도록 개선 * feat: prompt 다듬기 * feat: 리액션 SSE 이벤트 기능 추가 - 사용자 답변에 대한 짧은 리액션 메시지 생성 (이모지 포함, 30자 이내) - analyze_answer 이벤트 직후 reaction 이벤트 전송 - DB 저장 없이 UI 표시용으로만 사용 - 리액션 생성 실패 시 기본 메시지 반환 (에러 throw 안 함) * fix: stream_opening SSE 핸들러 중복 코드 제거 - start 이벤트 중복 yield 제거 - greeting 변수 중복 초기화 제거 - _stream_prompt 호출 시 중복 인자 수정 - greeting_continue 이벤트 루프 내 중복 로직 제거 - docstring 중복 설명 정리 * feat: Bedrock API 재시도 로직 통합 (#42) * feat: Bedrock API 재시도 로직 통합 - tenacity 기반 재시도 정책 통합 (최대 3회, exponential backoff) - 모든 Bedrock API 호출에 @bedrock_retry decorator 적용 - 초기화 실패 예외를 AIModelNotAvailableException(503)으로 통일 - AnalyticsService의 수동 재시도 로직 제거 * docs: analytics_service 주석 변경 * feat: Interview Sync 문제 해결을 위한 PASS_TO_NEXT 로직 강화 (#45) * feat: 마지막 질문 판단 로직 추가 - SurveyInteractionRequest에 current_question_order, total_questions 필드 추가 - interaction_service에서 마지막 질문 + PASS_TO_NEXT인 경우 should_end=true, end_reason=ALL_DONE 반환 - Spring 서버가 종료 시점을 정확히 판단할 수 있도록 개선 * feat: prompt 다듬기 * feat: 리액션 SSE 이벤트 기능 추가 - 사용자 답변에 대한 짧은 리액션 메시지 생성 (이모지 포함, 30자 이내) - analyze_answer 이벤트 직후 reaction 이벤트 전송 - DB 저장 없이 UI 표시용으로만 사용 - 리액션 생성 실패 시 기본 메시지 반환 (에러 throw 안 함) * fix: stream_opening SSE 핸들러 중복 코드 제거 - start 이벤트 중복 yield 제거 - greeting 변수 중복 초기화 제거 - _stream_prompt 호출 시 중복 인자 수정 - greeting_continue 이벤트 루프 내 중복 로직 제거 - docstring 중복 설명 정리 * feat: Interview Sync 문제 해결을 위한 PASS_TO_NEXT 로직 강화 - SurveyInteractionRequest 스키마에 신규 필드 추가 - fixed_q_id, turn_num, current_tail_count, max_tail_questions - stream_interaction에 규칙 기반 PASS_TO_NEXT 판단 로직 추가 - 꼬리질문 횟수 제한 선행 체크 (AI 호출 전) - 짧은 답변/중단 요청 감지 시 강제 PASS - 꼬리질문 프롬프트에 리액션 제외 규칙 강화 * refactor: AnalyticsService 동시성 제한 제거 및 재시도 횟수 증가 (#48) - retry_policy 최대 횟수 증가 - analyticsService semaphore 제거 * Bedrock_region과 AWS_region 분리 (#51) - Bedrock_region 환경변수 추가 * BEDROCK_REGION 환경변수 추가 및 deploy.yml 수정 (#53) * Bedrock_region과 AWS_region 분리 - Bedrock_region 환경변수 추가 * feat: 환경변수 추가에 따른 deploy.yml 수정 - .env파일에 BEDROCK_REGION 추가하도록 수정 * fix: RETRY Q_TYPE DB 저장 오류 수정 (#56) * feat: 응답 유효성 평가 시스템 및 라우팅 로직 구현 - 2단계 응답 유효성 평가 서비스(ValidityService) 추가 (규칙 기반 → LLM) - 응답 유형별(REFUSAL, OFF_TOPIC 등) 맞춤형 라우팅 로직 구현 - Interaction SSE 이벤트에 유효성 검사 결과(validity_result) 추가 - 피로도 판단 기준 단어 수 완화 (3단어 -> 2단어) * feat: 부적절한 응답에 대한 재질문(Retry) 로직 구현 및 유효성 판단 개선 - 사용자 응답 유효성(Validity)에 따른 동적 라우팅 구현 - UNINTELLIGIBLE, OFF_TOPIC, AMBIGUOUS, REFUSAL 등 부적절 응답 시 1회 재질문 수행 - 무한 루프 방지를 위한 Retry Limit(1회) 적용 및 강제 PASS 로직 추가 - REFUSAL(거부) 처리 로직 개선 - - 즉시 넘어가던 로직을 부드러운 회유 메시지와 함께 1회 재시도하도록 변경 - - History Preservation을 위한 API 명세 업데이트 (재질문 시 대화내역 덮어쓰지 않고 보존) * fix: RETRY Q_TYPE DB 저장 오류 수정 - interaction_service.py에 누락된 retry_request 이벤트 추가 - interaction_service.py에 누락된 generate_tail_complete 이벤트 추가 - continue 이벤트에서 불필요한 q_type 필드 제거 - sse_flow_all.md 문서를 현재 구현과 일치하도록 업데이트 - continue/greeting_continue 이벤트 스키마 단순화 - generate_tail_complete, retry_request 이벤트 스키마 추가 - Sequence Diagram에 세 가지 시나리오 명시 * feat: 인사말 프롬프트 개선 및 품질평가 버그 수정 (#58) * feat: 응답 유효성 평가 시스템 및 라우팅 로직 구현 - 2단계 응답 유효성 평가 서비스(ValidityService) 추가 (규칙 기반 → LLM) - 응답 유형별(REFUSAL, OFF_TOPIC 등) 맞춤형 라우팅 로직 구현 - Interaction SSE 이벤트에 유효성 검사 결과(validity_result) 추가 - 피로도 판단 기준 단어 수 완화 (3단어 -> 2단어) * feat: 부적절한 응답에 대한 재질문(Retry) 로직 구현 및 유효성 판단 개선 - 사용자 응답 유효성(Validity)에 따른 동적 라우팅 구현 - UNINTELLIGIBLE, OFF_TOPIC, AMBIGUOUS, REFUSAL 등 부적절 응답 시 1회 재질문 수행 - 무한 루프 방지를 위한 Retry Limit(1회) 적용 및 강제 PASS 로직 추가 - REFUSAL(거부) 처리 로직 개선 - - 즉시 넘어가던 로직을 부드러운 회유 메시지와 함께 1회 재시도하도록 변경 - - History Preservation을 위한 API 명세 업데이트 (재질문 시 대화내역 덮어쓰지 않고 보존) * fix: RETRY Q_TYPE DB 저장 오류 수정 - interaction_service.py에 누락된 retry_request 이벤트 추가 - interaction_service.py에 누락된 generate_tail_complete 이벤트 추가 - continue 이벤트에서 불필요한 q_type 필드 제거 - sse_flow_all.md 문서를 현재 구현과 일치하도록 업데이트 - continue/greeting_continue 이벤트 스키마 단순화 - generate_tail_complete, retry_request 이벤트 스키마 추가 - Sequence Diagram에 세 가지 시나리오 명시 * feat: 인사말 프롬프트 개선 및 품질평가 수정 - GREETING_PROMPT에 게임 컨텍스트, 테스트 단계, 목표 테마 변수 추가 - 중복된 QUALITY_EVALUATION_PROMPT 정의 제거 - 품질 평가 기준 완화 (Thickness/Richness 1개 충족 시 HIGH) * hotfix: 장르삭제 (#59) * feat: ChromaDB 영속성 추가 (#63) - 데이터 저장 장소를 home/ubuntu/chroma_data로 변경 * fix: genre 변수 삭제 (#64) * chore: 배포 워크플로우 Dev/Prod 환경 분리 (#68) - 기존 단일 deploy.yml을 deploy-dev.yml과 deploy-prod.yml로 분리 - AI 모델 및 파라미터 설정을 환경별로 독립적으로 관리하도록 개선 - develop 브랜치는 Dev 환경, main 브랜치는 Prod 환경으로 배포 트리거 설정 * feat: validity와 quality를 활용한 analytics_service 고도화 (#66) - embedding시 validity와 quality 저장 - analytics_Serivce에서 가중치 활용 * feat: Survey 전체 종합 평가 기능 구현 (#72) - SurveySummary Request 및 Response 추가 - llm에게 요청하기 위한 프롬포트 추가 - 각 질문별 summary를 분석해 생성 * feat: 게임 핵심 요소 추출 API 구현 (#73) * feat: 게임 핵심 요소 추출 API 구현 - POST /game/extract-elements 엔드포인트 추가 - app/schemas/game.py: Request/Response DTO - app/core/game_elements.py: 요소 정의, 장르 매핑, 프롬프트 빌더 - app/services/game_element_service.py: 추출 비즈니스 로직 - app/core/prompts.py: 추출 프롬프트 추가 - app/core/dependencies.py, app/main.py: DI 및 Lifespan 등록 * fix: 게임 요소 추출 시 영어 장르명 미인식 문제 해결 - GENRE_ELEMENT_MAPPING에 영어 대문자 장르명 추가 - SIMULATION, ACTION, ADVENTURE 등 14개 영어 장르 지원 - 클라이언트에서 영어 장르명 전송 시에도 정상 동작 * fix: 게임 요소 추출 시 영어 장르명 미인식 문제 해결 - GENRE_ELEMENT_MAPPING에 영어 대문자 장르명 추가 - SIMULATION, ACTION, ADVENTURE 등 14개 영어 장르 지원 - 클라이언트에서 영어 장르명 전송 시에도 정상 동작 * fix: 꼬리질문 프롬프트 주제 일관성 강화 및 라우팅 로직 수정 (#76) - 꼬리질문 생성 시 원본 질문의 주제를 반드시 유지하도록 프롬프트 제약 조건 강화 - 질문 주제와 무관한 꼬리질문 생성을 방지하기 위한 규칙 및 예시 추가 * fix: 꼬리질문 생성 프롬프트 수정 (#77) * feat: 유저 세그먼트 필터링 기능 추가 및 기타 버그 수정 (#78) * feat: 유저 세그먼트 필터링 기능 구현 - gender, age_group, prefer_genre로 필터링 * feat: retry policy 개선 및 analytics 샘플 부족 케이스 추가 - 일정 시간 로딩 이후 retry를 시도하도록 수정 - 데이터 부족으로 인한 분석 실패 케이스 추가 * chore: 클러스터의 수가 너무 많아지지 않도록 조정 - 하나의 클러스터를 이루기 위한 최소 수를 상향조정 * feat: RAG(검색 증강 생성) 기반의 AI 질문 추천 시스템을 구현 (#79) * feat: RAG기반 질문 추천 및 스코어링 시스템 구현 * refactor: 프롬프트 중앙화 및 SessionService 구조 개선 * chore: 프로젝트 의존성 업데이트 및 설정 파일 수정 * feat: Question 시드 데이터 SQL 추가 (#80) - 파일 추가 - 주요 카테고리(Gameplay, UI/UX, Balance, Story 등) 및 장르별 질문 데이터 포함 * fix: 유효성 평가 시 LLM 검증 로직 재적용 (#82) - ValidityService: 규칙 기반 평가 후 LLM을 활용하여 상세 유효성(OFF_TOPIC 등)을 판별하도록 변경 - SurveyNodes: OFF_TOPIC 리다이렉트 메시지를 더 간결하고 자연스러운 문구로 수정 * refactor: 프롬프트 중복 제거 및 OFF_TOPIC 기준 완화 (#84) * fix: OFF_TOPIC prompt 규칙 완화 적용 (#85) * refactor: LangGraph 상태 관리 및 SSE 스트리밍 로직 전면 리팩토링 (#86) - InteractionService: astream_events 도입으로 수동 상태 관리 제거 및 이벤트 기반 스트리밍 전환 - SurveyNodes: probe_llm 체인 식별자 추가 및 응답 추출 로직 개선 - SurveySchema: RETRY QuestionType 추가 - LangGraph 상태 오염 방지 및 스트리밍 안정성 강화 * fix: RAG 질문 생성 구현 및 SSE 스트리밍 버그 수정 (#87) - QuestionService: RAG 질문 생성 로직 통합 및 카테고리 매핑 추가 - 검색된 질문을 기반으로 LLM이 새로운 맞춤형 질문을 생성하도록 개선 - 한국어 카테고리 요청을 ChromaDB 영어 포맷으로 변환하는 적용 - InteractionService: SSE 스트리밍 필터링 강화 - probe_llm 체인만 클라이언트로 스트리밍하도록 제한 - tool_use JSON 청크 노출 문제 해결 * fix: SSE 스트리밍 누락 해결 (Custom Event 적용) 및 스키마 개선 (#88) - survey_nodes: generate_probe 노드 개선 - dispatch_custom_event를 사용한 수동 스트리밍 구현 (이벤트 누락 원천 차단) - Chunk 데이터 처리 로직 안정화 (포맷 오류 해결) - InteractionService: - probe_stream 커스텀 이벤트 처리 핸들러 추가 - continue 이벤트에 q_type(TAIL/RETRY) 필드 추가 - docs: SSE 연동 가이드 추가 * feat: RAG/스트리밍/병렬처리/데이터동기화 종합 개선 (#90) - Fix SSE Streaming (TAIL/RETRY) - generate_probe: 수동 스트리밍 - latency 최적화 (병렬처리) - survey_nodes: 유효성/품질 평가 병렬 실행 - 병렬 노드 완료 시 Legacy 이벤트(유효,품질검사) 분리 전송 * refactor: QuestionService 캐시 로직 제거 (#93) - 질문 추천 파이프라인에서 메모리 캐시 로직 완전 삭제 - _query_cache 필드 및 관련 메서드 삭제 (_make_cache_key, clear_cache) - admin.py에서 /questions/clear-cache 엔드포인트 삭제 - get_question_stats 응답에서 cache_size 필드 삭제 - 미사용 TYPE_CHECKING import 정리 * 유효성/품질 평가에 Haiku 4.5 모델 분리 적용 (#96) * feat: 유효성/품질 평가에 Haiku 4.5 모델 분리 적용 - config.py: BEDROCK_EVALUATION_MODEL_ID 환경변수 추가 - bedrock_service.py: evaluation_model 인스턴스 추가 및 평가 메서드에서 사용 - .env.example: 새 환경변수 문서화 * chore: CI/CD 워크플로우에 평가 모델 환경변수 추가 - deploy-dev.yml: DEV_BEDROCK_EVALUATION_MODEL_ID 시크릿 연결 - deploy-prod.yml: PROD_BEDROCK_EVALUATION_MODEL_ID 시크릿 연결 * feat: PR 품질 검사를 위한 CI 워크플로우 구현 (#95) * feat: PR 품질 검사를 위한 CI 워크플로우 구현 - Ruff 린트 검사 추가 - Ruff 포맷 검사 추가 - pytest 테스트 실행 추가 - main/develop 브랜치 PR 시 트리거 - 빌드 결과 PR 댓글 자동 표시 * test: AnalyticsService 테스트 업데이트 - query_answers_from_chromadb에 filters 파라미터 추가 - extract_keywords_ctfidf에 metadatas 파라미터 추가 * style: Ruff 린트 에러 수정 및 코드 포맷팅 - survey_nodes.py: 사용하지 않는 변수 처리 - question_service.py: 미사용 루프 변수 제거 - convert_sql.py: 클로저 바인딩 문제 수정 - 16개 파일 포맷팅 적용 * feat: ci.yml에 더미 env 정보 추가 - ci 테스트를 위해 더미 env 데이터를 삽입 * fix: ci.yml의 더미 env bedrock model id 수정 - 모델명에 us 추가 * test: 실제 bedrock 연결을 요구하는 test를 ci.yml에서 제외 - bedrock_connection과 embedding_connection 테스트 제외 --------- Co-authored-by: Hyun <itsmine096@gmail.com> Co-authored-by: Nobb <162043184+HelloNobb@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌 관련 이슈
✨ 작업 내용 (Summary)
🚧 의존성 및 주의사항 (Dependencies) ⭐
✅ 자가 점검 (Self Checklist)