DOCS/journey/plans/251218_langgraph_1.0_upgrade_plan.md

90 lines
4.1 KiB
Markdown

# LangGraph 1.0 업그레이드 계획
**날짜**: 2025-12-18
**작성자**: admin
**관련 파일**: `rb8001/app/services/workflows/coldmail_workflow.py`, `rb8001/requirements.txt`
---
## 현재 상황
- **현재 버전**: `langgraph==0.6.10`
- **사용 위치**: 콜드메일 워크플로우 (`coldmail_workflow.py`)
- **체크포인터**: `AsyncSqliteSaver` 사용 (수동 설정)
## LangGraph 1.0 주요 변경사항
1. **지속적인 상태 관리 (Durable State)**: 서버 재시작/중단 시 자동 재개
2. **내장된 지속성**: 워크플로우 저장/재개 기능 강화
3. **휴먼 인 더 루프 (HITL) 패턴**: 실행 일시 중지 후 인간 승인 API 제공
4. **그래프 기반 실행 모델 개선**: 결정론적/에이전트 컴포넌트 혼합 제어 강화
## 업그레이드 활용 방안
### Phase 1: 콜드메일 워크플로우 개선
- **현재**: "이 기업을 분석해 드릴까요?" 버튼이 Slack 인터랙션으로 별도 처리 (워크플로우 외부)
- **개선**: `process_node`에서 HITL 패턴으로 일시 중지 → 사용자 승인 대기 → 재개
- **효과**: 워크플로우 내부에서 상태 관리, 중단/재개 자동화
### Phase 2: 프론트엔드 IR 평가 통합
- **현재**: 프론트엔드 요청은 REST API로 직접 처리 (`IRDeckAnalyzer().analyze()`)
- **개선**: 프론트엔드 요청도 LangGraph 워크플로우로 처리
- **효과**: IR Deck 평가(수 분 소요) 중단/재개 지원, 상태 관리 일원화
### Phase 3: 자동 상태 복구
- **현재**: 체크포인터 수동 설정 (`AsyncSqliteSaver.from_conn_string()`)
- **개선**: 1.0의 자동 상태 관리 활용
- **효과**: 서버 재시작 시 콜드메일 처리 중단 지점부터 자동 재개
## 워크플로우 통합 설계
### 설계 고려사항
**문제**: 콜드메일과 프론트엔드 IR Deck 분석이 서로 다른 진입점을 가짐
- 콜드메일: 스케줄러 → `coldmail_workflow.py`
- 프론트엔드: REST API → `ir_deck.py` (직접 `IRDeckAnalyzer().analyze()` 호출)
**고려한 방법**:
1. **라우터 노드 통합**: 단일 워크플로우에서 라우터 노드로 분기
2. **서브그래프 통합**: 공통 분석 부분을 서브그래프로 만들어 재사용
3. **별도 워크플로우 + 공통 함수**: 각각 독립 워크플로우, 공통 로직은 함수로 재사용
### 최종 결정
**2개 워크플로우 + 공통 함수 재사용** 방식 채택
| 방식 | 장점 | 단점 | 결정 |
|------|------|------|------|
| 라우터 통합 | 단일 워크플로우 관리 | 진입점이 달라 복잡도 증가 | ❌ |
| 서브그래프 | 공통 부분 재사용 | 여전히 2개 워크플로우 필요 | ⚠️ |
| 별도 워크플로우 | 단순, 유지보수 용이 | 공통 로직 중복 가능 | ✅ |
**구조**:
- **워크플로우 1**: 콜드메일 처리 (기존 + HITL 패턴)
- **워크플로우 2**: 프론트엔드 IR Deck 분석 (신규, HITL 없음)
- **공통 함수**: `extract_ir_metrics()`, `evaluate_ir_deck()`, `save_evaluation()`
**이유**: 진입점이 다르면 별도 워크플로우로 관리하는 것이 단순하고 유지보수에 유리함
## 마이그레이션 전략
1. **의존성 업데이트**: `requirements.txt`에서 `langgraph==0.6.10``langgraph>=1.0.0`
2. **API 변경 확인**: `StateGraph`, `AsyncSqliteSaver` API 변경사항 확인
3. **체크포인터 마이그레이션**: 기존 SQLite 체크포인트 데이터 호환성 확인
4. **단계적 적용**: 콜드메일 워크플로우부터 적용 후 프론트엔드 IR 평가 확장
## 필요 작업
- [ ] LangGraph 1.0 공식 마이그레이션 가이드 확인
- [ ] `coldmail_workflow.py` API 호환성 테스트
- [ ] HITL 패턴 적용 설계 (콜드메일 "분석할까요?" 버튼)
- [ ] 프론트엔드 IR 평가 워크플로우화 설계
- [ ] 체크포인트 데이터 마이그레이션 스크립트 작성
## 참고
- LangGraph 공식 문서: https://github.com/langchain-ai/langgraph
- 현재 구현: `rb8001/app/services/workflows/coldmail_workflow.py`
- 관련 문서: `troubleshooting/251015_claude_coldmail_workflow_langgraph_test.md`