- session-logs, blogwatcher, summarize, whisper, gitea, himalaya, skill-creator SKILL.md - SKILL.md 인덱스 업데이트 (16개 스킬) - 311/314/315 상위 SSOT 중복 제거 + 링크 수정 - Phase 1-3 결과 + 테스트 결과 + evaluation 트러블슈팅 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.2 KiB
2.2 KiB
date, subject, status, closed_date, closed_reason
| date | subject | status | closed_date | closed_reason |
|---|---|---|---|---|
| 2026-03-26 | IR Deck 평가 빈 응답 문제 해결 | closed | 2026-03-26 | 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 토큰으로 정상 완료