DOCS/troubleshooting/251013_coldmail_ir_analyzer_fix.md
happybell80 933870d52c docs: 콜드메일 IR 분석 에러 4 정확한 코드 위치 반영
- coldmail_briefing.py 실제 코드 확인 후 수정
- 140-244줄 for loop, 166줄 extract_ir_metrics, 170줄 valuate_startup
- 165-171줄 try-except 추가 명시
- 103줄 → 98줄로 축약 (100줄 이하 준수)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-13 23:54:22 +09:00

2.9 KiB

콜드메일 IR 분석 시스템 오류 수정

날짜: 2025-10-13 작성자: happybell80 관련 파일: rb8001/app/services/ir_analyzer.py


문제 상황

테스트 실행

  • 경로: rb8001/tests/test_coldmail_briefing.py --test scheduler
  • 결과: 3가지 에러 발생, Slack 전송 도달 실패

성공한 부분

  1. 콜드메일 필터링: 30개 중 1건 탐지 (굿베이션 투자제안서, 확률 0.7755)
  2. 첨부파일 다운로드: skill-email에서 PDF 다운로드 성공
  3. skill-rag-file 업로드: document_id c9c9a7a8-18d3-475a-b14e-746e14c9e55c, 14 chunks 생성

에러 분석

에러 1: RAG 쿼리 404 (6회 발생)

원인:

  • ir_analyzer.py:28 - /api/query 호출하지만 skill-rag-file은 /api/search 제공

수정:

  • ir_analyzer.py:28: /api/query/api/search
  • ir_analyzer.py:29-32: payload에 team_id 추가, document_id 제거

에러 2: LLM 연결 실패

원인:

  • ir_analyzer.py:15: localhost:8080 LLM 서비스 없음
  • rb8001은 app/llm/llm_service.py 사용

수정:

  • ir_analyzer.py:48-74: LLMService, LLMRequest로 전체 변경

에러 3: DB 제약조건 없음

원인:

  • startup_valuation.py:249: ON CONFLICT 절 사용하나 UNIQUE 제약조건 미설정

수정:

  • 51123 서버 DB: startup_valuation 테이블 UNIQUE 제약조건 추가

에러 4: Slack 전송 도달 불가

원인:

  • coldmail_briefing.py:140-244: for loop에 try-except 없음
  • coldmail_briefing.py:166: extract_ir_metrics() 예외 발생
  • coldmail_briefing.py:170: valuate_startup() 예외 발생
  • 172-244줄(Slack Lists, 피드백) 실행 안됨
  • 246-259줄(요약 메시지) processed_count=0으로 전송 안됨

수정:

  • coldmail_briefing.py:165-171: try-except로 감싸기
  • 예외 시 logger.error() 후 continue로 다음 이메일 처리

해결 방안

우선순위 1: coldmail_briefing.py 에러 핸들링 추가

  • 165-171줄: try-except로 감싸기

우선순위 2: ir_analyzer.py 수정

query_rag() 함수 (18-45줄):

  • 18줄: 파라미터 document_id → team_id로 변경
  • 28줄: /api/query → /api/search
  • 29-35줄: payload를 query, team_id, limit, threshold로 변경

call_llm() 함수 (48-74줄):

  • rb8001 LLM 서비스(app/llm/llm_service.py) 사용으로 전체 변경
  • LLMService, LLMRequest import 추가

우선순위 3: DB 제약조건 추가

  • 51123 서버: startup_valuation 테이블 UNIQUE 제약조건 추가

교훈

API 엔드포인트 검증 부족

  • 구현 시 skill-rag-file API 스펙 미확인
  • 추측으로 /api/query 사용, 실제는 /api/search
  • 교훈: 스킬 통합 전 API 문서 또는 코드 직접 확인 필수

LLM 서비스 중복 구현

  • ir_analyzer가 독립 LLM 서비스 가정
  • rb8001은 이미 LLM 서비스 내장
  • 교훈: 기존 서비스 재사용 우선, 새 의존성 추가 지양