From aa2b682303d9703e37e84779899d1d8c34a862f0 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 29 Sep 2025 11:28:44 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20LangGraph=20=ED=96=A5=ED=9B=84=20?= =?UTF-8?q?=EA=B3=84=ED=9A=8D=20=EC=A0=9C=EA=B1=B0=20-=20=EC=8B=A4?= =?UTF-8?q?=EC=A0=9C=20=EB=AF=B8=EC=A0=81=EC=9A=A9=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ell80_naverworks_briefing_weekend_email.md | 25 +------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md b/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md index d5db52b..82dc564 100644 --- a/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md +++ b/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md @@ -1,7 +1,7 @@ --- date: 2025-09-29 author: happybell80 -tags: [naverworks, briefing, timezone, langgraph] +tags: [naverworks, briefing, timezone] --- # NaverWorks 브리핑 주말 이메일 누락 문제 @@ -46,29 +46,6 @@ tags: [naverworks, briefing, timezone, langgraph] - DB 연결: PostgreSQL (DATABASE_URL 환경변수) - API 인증: skill-email은 X-API-Key 불필요, skill-slack은 X-API-Key 필수 -## LangGraph 적용 방안 -**현재 상태**: LangGraph 미도입 (requirements.txt, 코드에 없음) - -### 구현 계획 (향후 적용 시) -1. **StateGraph 구조** - - 노드: get_uuid → fetch_emails → filter_important → generate_summary → format_message → send_slack - - 상태 키: user_uuid, emails, important_emails, summary, slack_message - - 체크포인터: SqliteSaver('/mnt/hdd/logs/langgraph.db') - -2. **필요 패키지 및 호환성** - - rb8001/requirements.txt에 추가: `langgraph`, `langgraph-checkpoint-sqlite` - - 주의: SQLAlchemy 2.0.35 사용 중, SQLAlchemyJobStore 호환성 검증 필요 - - Python 3.11 내장 zoneinfo 사용 가능 - -3. **주요 개선점** - - skill-email API 타임아웃 시 fetch_emails 노드만 재실행 - - Slack 전송 실패 시 send_slack 노드만 재시도 - - thread_id='naverworks_daily_YYYYMMDD'로 일별 추적 - -4. **파일 구조 변경** - - 기존 process_briefing 메서드를 StateGraph.compile()로 교체 - - 각 단계를 개별 노드 함수로 분리 - - graph.invoke({"email": "info@company-x.partners"}, config={"configurable": {"thread_id": thread_id}}) ## 교훈 - 타임존 명시: naive datetime 대신 KST 명시적 사용