From 78715420141b6768ae14c9c704f346627c514ee8 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 14 Oct 2025 22:36:54 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20ColdmailState=EC=97=90=20user=5Fid,=20s?= =?UTF-8?q?tart=5Ftime,=20now=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ColdmailState에 user_id: str, start_time: str, now: str 추가 - coldmail_briefing.py:86-101 유지 (user_id, start_time, now 계산) - initial_state에 user_id, start_time.isoformat(), now.isoformat() 포함 - 각 노드에서 state["user_id"], state["start_time"], state["now"] 접근 - send_summary_node에서 datetime.fromisoformat() 변환 - 96줄 유지 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../251014_coldmail_ir_analysis_scenario.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/troubleshooting/251014_coldmail_ir_analysis_scenario.md b/troubleshooting/251014_coldmail_ir_analysis_scenario.md index 2c6cc24..75a5326 100644 --- a/troubleshooting/251014_coldmail_ir_analysis_scenario.md +++ b/troubleshooting/251014_coldmail_ir_analysis_scenario.md @@ -72,20 +72,20 @@ - requirements.txt: langgraph 추가 - app/workflows/__init__.py: 빈 파일 생성 - app/workflows/coldmail_workflow.py 생성: - - from typing import TypedDict; from langgraph.graph import StateGraph, END; import aiohttp - - class ColdmailState(TypedDict): emails: list, coldmail_candidates: list, processed_results: list - - async def fetch_emails_node(state): async with aiohttp.ClientSession() as session 내부에서 coldmail_briefing.py:103-121 로직 실행, return {"emails": emails} + - from typing import TypedDict; from langgraph.graph import StateGraph, END; import aiohttp; from datetime import datetime + - class ColdmailState(TypedDict): emails: list, coldmail_candidates: list, processed_results: list, user_id: str, start_time: str, now: str + - async def fetch_emails_node(state): user_id = state["user_id"], start_time/now = state["start_time/now"], async with aiohttp.ClientSession() as session, params에 user_id/startSearchDate(start_time)/endSearchDate(now) 사용, coldmail_briefing.py:103-121 로직, return {"emails": emails} - async def filter_coldmail_node(state): for email in state["emails"] 반복, coldmail_briefing.py:125-139 필터 로직, return {"coldmail_candidates": candidates} - - async def process_email_node(state): async with aiohttp.ClientSession() as session 내부에서 for email in state["coldmail_candidates"] 반복, coldmail_briefing.py:145-287 처리, try-except로 IR 실패 시 continue, return {"processed_results": results} - - async def send_summary_node(state): async with aiohttp.ClientSession() as session, coldmail_briefing.py:289-300 요약 전송 + - async def process_email_node(state): user_id = state["user_id"], async with aiohttp.ClientSession() as session, for email in state["coldmail_candidates"] 반복, detail_params/process_naverworks_attachments/get_team_uuid_from_user에 user_id 사용, coldmail_briefing.py:145-202 처리, try-except로 IR 실패 시 continue, return {"processed_results": results} + - async def send_summary_node(state): start_time = datetime.fromisoformat(state["start_time"]), now = datetime.fromisoformat(state["now"]), async with aiohttp.ClientSession() as session, summary_text 포맷에 start_time.strftime/now.strftime 사용, coldmail_briefing.py:205-215 요약 전송 - def route_after_filter(state): return "process" if state["coldmail_candidates"] else END - - graph = StateGraph(ColdmailState) - - graph.add_node("fetch", fetch_emails_node), add_node("filter", filter_coldmail_node), add_node("process", process_email_node), add_node("send", send_summary_node) + - graph = StateGraph(ColdmailState); graph.add_node("fetch", fetch_emails_node), add_node("filter", filter_coldmail_node), add_node("process", process_email_node), add_node("send", send_summary_node) - graph.add_edge("fetch", "filter"), add_conditional_edges("filter", route_after_filter, {"process": "process", END: END}), add_edge("process", "send"), add_edge("send", END) - workflow = graph.compile() - coldmail_briefing.py:78-302: _run_coldmail_briefing() 교체 + - coldmail_briefing.py:86-101 유지 (now, start_time, user_id 계산) - from app.workflows.coldmail_workflow import workflow - - initial_state = {"emails": [], "coldmail_candidates": [], "processed_results": []} + - initial_state = {"emails": [], "coldmail_candidates": [], "processed_results": [], "user_id": user_id, "start_time": start_time.isoformat(), "now": now.isoformat()} - result = await workflow.ainvoke(initial_state) ---