DOCS/journey/troubleshooting/260121_coldmail_multi_confirm_loop_fix.md
Claude-51124 9c2df748b3 docs: 콜드메일 다중 확인 루프 트러블슈팅 및 테스트 원칙 보완
- 트러블슈팅 문서 추가: 260121_coldmail_multi_confirm_loop_fix.md
- 계획 문서 archive 이동: 260121_coldmail_multi_confirm_and_summary_fix.md
- 테스트 원칙 보완: 컨테이너 테스트 파일 반영 방법 (docker cp)
- 백엔드 원칙 보완: 테스트 원칙에 컨테이너 반영 추가
2026-01-21 10:13:06 +09:00

2.6 KiB

콜드메일 다중 확인 루프 및 요약 메시지 개선

날짜: 2026-01-21 작성자: happybell80 관련 파일: rb8001/app/services/workflows/coldmail_workflow.py


문제 상황

  1. 다중 이메일 확인 시 1개만 처리: 오다가다, 에듀온 2개 모두 "맞음" 클릭 → 에듀온만 처리됨
  2. 요약 메시지 부적절: None억원 (신뢰도 0%) 표시 → IR 분석 안 된 건 의미 없는 정보

원인 분석

문제 1: 워크플로우 종료

  • confirm → send 고정 엣지로 인해 첫 확인 후 바로 요약 전송 → 종료
  • 나머지 waiting_confirmation 유실

문제 2: median None 처리 누락

  • send_node에서 median이 None인 경우 처리 로직 없음
  • f"- {company}: {median}억원"None억원 표시

해결 방법

Phase 1: 다중 확인 루프

# route_after_confirm() 함수 추가
def route_after_confirm(state: ColdmailState) -> str:
    if state.get("waiting_confirmation"):
        return "wait_confirmation"
    else:
        return "send"

# confirm → send 고정 엣지를 조건부 엣지로 변경
workflow.add_conditional_edges(
    "confirm",
    route_after_confirm,
    {
        "wait_confirmation": "wait_confirmation",
        "send": "send"
    }
)

Phase 2: 요약 메시지 개선

# median이 None이면 IR 분석 대기 표시
if median is None:
    summary_lines.append(f"- {company}: 등록 완료 (IR 분석 대기)")
elif is_hold:
    ...
else:
    summary_lines.append(f"- {company}: {median}억원 (신뢰도 {conf_pct}%)")

변경 내용

파일 변경
coldmail_workflow.py L311-325 route_after_confirm() 함수 추가
coldmail_workflow.py L365-372 confirm → send 조건부 엣지로 변경
coldmail_workflow.py L267-269 send_node median None 처리 추가
tests/test_coldmail_workflow_multi_confirm.py 5개 테스트 케이스 추가

검증

단위 테스트

docker exec rb8001 pytest tests/test_coldmail_workflow_multi_confirm.py -v
# 5 passed

배포

  • git push origin main → Gitea Actions 자동 배포
  • docker ps | grep rb8001 → 재시작 확인 완료

교훈

  1. LangGraph 루프 패턴: 조건부 엣지로 동일 노드 재진입 가능 (고정 엣지 대신 route_after_* 함수 사용)
  2. None 값 처리 필수: 외부 데이터(IR 분석 결과 등)는 None 가능성 항상 고려
  3. 테스트 컨테이너 반영: tests 디렉토리는 볼륨 마운트 아님 → docker cp 또는 재빌드 필요