from langgraph.graph import MessagesState# MessagesState는 다음과 동일:# class MessagesState(TypedDict):# messages: Annotated[list[BaseMessage], add_messages]graph = StateGraph(MessagesState)
from langchain.chat_models import init_chat_modelfrom langchain_core.messages import HumanMessage, SystemMessage, RemoveMessagellm = init_chat_model("gpt-4o-mini", temperature=0)def summarize_messages(state: MessagesState) -> MessagesState: """메시지가 많아지면 요약으로 대체""" messages = state["messages"] if len(messages) <= 10: return state # 메시지 적으면 그대로 # 오래된 메시지 요약 old_messages = messages[:-4] # 최근 4개 제외 summary = llm.invoke([ SystemMessage(content="다음 대화 내용을 핵심만 2-3문장으로 요약하세요."), *old_messages, ]) # 오래된 메시지 삭제 + 요약으로 대체 delete_messages = [RemoveMessage(id=m.id) for m in old_messages] summary_message = SystemMessage(content=f"이전 대화 요약: {summary.content}") return {"messages": delete_messages + [summary_message]}
def filter_messages(state: MessagesState) -> MessagesState: """최근 N개의 메시지만 유지""" messages = state["messages"] if len(messages) > 20: # 시스템 메시지 + 최근 10개만 유지 system_msgs = [m for m in messages if isinstance(m, SystemMessage)] recent_msgs = messages[-10:] return {"messages": system_msgs + recent_msgs} return state
from langgraph.store.memory import InMemoryStore# Store 생성store = InMemoryStore()# 그래프에 Store 연결app = graph.compile( checkpointer=checkpointer, store=store,)