--- date: 2026-03-26 subject: IR Deck 평가 빈 응답 문제 해결 status: closed closed_date: 2026-03-26 closed_reason: max_tokens + response_format + pending/failed 상태 저장 적용으로 해결 --- # IR Deck 평가 빈 응답 문제 해결 ## 현상 - LLM evaluation이 빈 응답 반환 → 평가 실패 - 프런트 3분간 무한 폴링 (404) - "평가 처리 중 오류가 발생했습니다" 표시 불가 ## 근본 원인 - **max_tokens=1000**: IR 평가 JSON은 수천 토큰 필요한데 기본값 1000으로 응답 잘림 - **response_format 미사용**: LLM이 서두/마크다운 혼입 가능 - **DB에 상태 없음**: 실패 시 행 자체가 없어 404 무한 폴링 - **LLM 원문 미로깅**: 뭐가 잘려서 실패했는지 알 수 없음 ## 수정 내용 ### 백엔드 (rb8001) - `ir_analyzer.py` — `call_llm`에 `max_tokens`, `response_format` 파라미터 추가 - `ir_deck_analyzer.py` — `_evaluate_comprehensive`에서: - `max_tokens=4000` (env: `IR_EVAL_MAX_TOKENS`) - `response_format={"type": "json_object"}` (JSON 강제) - `json.loads` 직접 파싱 (`extract_json_from_text` 제거) - JSON 파싱 실패 시 원문 첫 500자 로그 - `ir_valuation_repository.py` — `status` + `error_message` 컬럼 추가, `create_evaluation_pending`, `update_evaluation_status` 함수 - `ir_deck.py` — POST /evaluate에서 즉시 pending INSERT, 실패 시 failed UPDATE, GET에서 pending/failed/completed 분기 ### 프런트 (frontend-ir-valuation) - `useEvaluation.ts` — status 필드 분기 (pending→폴링, failed→중단+"평가 실패", completed→표시) - 404 3회 연속 시 폴링 중단 ### DB - `ALTER TABLE ir_deck_evaluations ADD COLUMN status VARCHAR(20) DEFAULT 'completed'` - `ALTER TABLE ir_deck_evaluations ADD COLUMN error_message TEXT` ### 설정 - `/home/admin/robeing/.env` — `DEFAULT_LLM_MAX_TOKENS=1000`, `IR_EVAL_MAX_TOKENS=4000` ## 원칙 반영 - `coding-principles.md` — "비동기 작업의 상태 추적" 원칙 추가 - `infrastructure-ssot-principle.md` — "프로젝트 루트 env 원칙" 추가 ## 검증 - evaluation_id=1efaf078 테스트: pending→completed 12초, 67점 C등급 - 이전: 빈 응답 2회 재시도 후 failed - 이후: JSON 강제 + 4000 토큰으로 정상 완료