docs: LangGraph 1.0 업그레이드 계획 문서 - Phase 1, Phase 2 완료 상태 반영

- 현재 버전: langgraph 1.0.1 설치 완료
- Phase 1 완료: interrupt() 동적 인터럽트 마이그레이션
- Phase 2 완료: IR Deck 워크플로우 구현
- 테스트 통과: 총 12개 테스트 모두 통과
This commit is contained in:
Claude-51124 2026-01-18 10:58:04 +09:00
parent c0e5d615c4
commit 15df3c0ad4

View File

@ -1,8 +1,9 @@
# LangGraph 1.0 업그레이드 계획
**날짜**: 2025-12-18
**수정일**: 2026-01-17
**수정일**: 2026-01-18
**작성자**: admin
**진행 상태**: Phase 1, Phase 2 완료 ✅
**관련 파일**:
- `rb8001/app/services/workflows/coldmail_workflow.py`
- `rb8001/app/router/ir_deck.py`
@ -13,11 +14,11 @@
## 현재 상황
- **현재 버전**: `langgraph==0.6.10` (1.0은 2025-10-22 출시 완료, 업그레이드 가능)
- **현재 버전**: `langgraph>=1.0.0` (1.0.1 설치 완료, 2026-01-18)
- **사용 위치**:
- 콜드메일 워크플로우 (`coldmail_workflow.py`) - `interrupt_after=["process"]` 사용 중
- IR Deck 평가 (`ir_deck.py`) - `asyncio.create_task`로 비동기 실행 (LangGraph 미사용)
- **체크포인터**: `AsyncSqliteSaver` 사용 (`coldmail_briefing.py:103`, `coldmail_service.py:121`)
- 콜드메일 워크플로우 (`coldmail_workflow.py`) - `interrupt()` 동적 인터럽트 사용 ✅
- IR Deck 평가 (`ir_deck_workflow.py`) - LangGraph 워크플로우 사용 ✅
- **체크포인터**: `AsyncSqliteSaver` 사용 (`coldmail_briefing.py:103`, `coldmail_service.py:121`, `ir_deck.py`)
**참고**: LangGraph 1.0은 2025-10-22 출시 완료. 현재 0.6.10에서 1.0으로 업그레이드 진행 가능. `interrupt_after`는 1.0에서도 지원되지만, `interrupt()` 동적 인터럽트 사용 권장.
@ -29,12 +30,18 @@
---
## Phase 1: 콜드메일 워크플로우 HITL 패턴 마이그레이션
## Phase 1: 콜드메일 워크플로우 HITL 패턴 마이그레이션**완료** (2026-01-18)
**목표**: `interrupt_after=["process"]` 정적 인터럽트 → 동적 `interrupt()` 사용
**파일**: `rb8001/app/services/workflows/coldmail_workflow.py`
**완료 내용**:
- `process_node`에서 `waiting_confirmation` 있을 때 `interrupt()` 동적 호출 추가
- `create_workflow`에서 `interrupt_after` 제거
- `coldmail_service.py`에서 `Command(resume=True)` 재개 로직 추가, `aupdate_state``confirmed_email_id` 설정
- 테스트 통과: `test_coldmail_workflow_interrupt.py` 4개, `test_coldmail_workflow_resume.py` 3개
### 1.1 마이그레이션 방법
**현재 코드** (0.6.10):
@ -86,13 +93,19 @@ result = await workflow.ainvoke(Command(resume=True), config=config)
---
## Phase 2: 프론트엔드 IR 평가 워크플로우화
## Phase 2: 프론트엔드 IR 평가 워크플로우화**완료** (2026-01-18)
**목표**: `asyncio.create_task` 비동기 실행 → LangGraph StateGraph 워크플로우
**파일**:
- 신규: `rb8001/app/services/workflows/ir_deck_workflow.py`
- 수정: `rb8001/app/router/ir_deck.py`
- 신규: `rb8001/app/services/workflows/ir_deck_workflow.py`
- 수정: `rb8001/app/router/ir_deck.py`
**완료 내용**:
- `ir_deck_workflow.py` 신규 생성 (5개 노드: extract, evaluate, analyze_pages, save, answer)
- `ir_deck.py`에서 `asyncio.create_task` → LangGraph 워크플로우 전환
- 체크포인터 기반 상태 관리로 서버 재시작 시 자동 재개 지원
- 테스트 통과: `test_ir_deck_workflow.py` 5개
### 2.1 워크플로우 설계
@ -174,15 +187,18 @@ class IRDeckState(TypedDict):
---
## 필요 작업 요약
## 완료 작업 요약
1. **버전 업그레이드**: `requirements.txt` - `langgraph==0.6.10``langgraph>=1.0.0`
2. **Phase 1**: `coldmail_workflow.py` - `interrupt_after``interrupt()` 동적 인터럽트 마이그레이션
3. **Phase 1**: `coldmail_service.py` - `Command(resume=True)` 재개 로직 추가
4. **Phase 2**: `ir_deck_workflow.py` 신규 생성 - IR 평가 워크플로우 구현
5. **Phase 2**: `ir_deck.py` - `asyncio.create_task` → LangGraph 워크플로우 전환
6. **Phase 3**: `workflow_recovery_service.py` 신규 생성 - 서버 재시작 시 미완료 워크플로우 자동 재개 (IR 평가만)
7. **테스트**: 각 Phase별 단위 테스트 및 통합 테스트
1. ✅ **버전 업그레이드**: `requirements.txt` - `langgraph==0.6.10``langgraph>=1.0.0` (langgraph 1.0.1 설치 확인)
2. ✅ **Phase 1**: `coldmail_workflow.py` - `interrupt_after``interrupt()` 동적 인터럽트 마이그레이션
3. ✅ **Phase 1**: `coldmail_service.py` - `Command(resume=True)` 재개 로직 추가, `aupdate_state`로 상태 업데이트
4. ✅ **Phase 2**: `ir_deck_workflow.py` 신규 생성 - IR 평가 워크플로우 구현 (5개 노드)
5. ✅ **Phase 2**: `ir_deck.py` - `asyncio.create_task` → LangGraph 워크플로우 전환
6. ✅ **테스트**: Phase 1, Phase 2 단위 테스트 및 통합 테스트 모두 통과 (총 12개 테스트 통과)
## 남은 작업
- ⏳ **Phase 3**: `workflow_recovery_service.py` 신규 생성 - 서버 재시작 시 미완료 워크플로우 자동 재개 (IR 평가만, 선택적)
---
@ -194,4 +210,5 @@ class IRDeckState(TypedDict):
- 관련 troubleshooting:
- `troubleshooting/251015_claude_coldmail_workflow_langgraph_test.md`
- `troubleshooting/251223_coldmail_langgraph_interrupt_and_checkpoint_fix.md`
- `troubleshooting/260118_langgraph_1.0_upgrade_ir_deck_workflow.md`