- 강의 질문
- AI TECH
LangGraph 기본 사용법의 조건과 방법 챕터의 엣지와 노드 도식화 이미지 관련하여 질문 드립니다.
LangGraph 기본 사용법의 조건과 방법 챕터에서 아래와 같이 코드를 변경한 뒤 이미지를 추출하면 첨부된 파일 형태로 출력됩니다.
엣지와 노드 구조가 a, b 조건 실습과는 다르게 표시되는데, 이러한 형식으로 출력되는 것이 맞을까요?
class State(TypedDict):
human_messages: Annotated[list[HumanMessage], add_messages]
ai_messages: Annotated[list[AIMessage], add_messages]
retry_num : int
def chatbot(state:State):
retry_num = state["retry_num"]
user_input = input(f"(현재 {retry_num}번째 답변) 사용자 입력: ")
ai_message = AIMessage(f"{retry_num}번째 답변중!")
return {"human_messages": [HumanMessage(content=user_input)], "ai_messages": [ai_message]}
def retry(state: State):
return {"retry_num" : state["retry_num"] + 1}
def route(state: State):
if "반복" in state["human_messages"][-1].content:
return "retry"
else:
return END
def build_chatbot_graph():
graph_builder = StateGraph(State)
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_node("retry", retry)
graph_builder.add_edge(START, "chatbot")
graph_builder.add_conditional_edges("chatbot", route)
graph_builder.add_edge("retry", "chatbot")
return graph_builder.compile()
def save_graph_image(graph_builder, output_path: str = "4_step/graph.png"):
graph_image = graph_builder.get_graph().draw_mermaid_png()
with open(output_path, "wb") as f:
f.write(graph_image)
print(f"그래프 이미지가 {output_path}에 저장되었습니다.")
def print_chatbot_messages(result: dict):
print(result)
def run_chatbot_messages():
graph_builder = build_chatbot_graph()
# 스트리밍 모드로 변경
for chunk in graph_builder.stream({"human_messages" : "반복", "retry_num": 0}, stream_mode="updates"):
print(chunk)
for node, value in chunk.items():
if node:
print(node)
if "messages" in value:
# AI 메시지 출력
for msg in value.get("ai_messages", []):
print(f"AI: {msg.content}")
# Human 메시지 출력
for msg in value.get("human_messages", []):
print(f"Human: {msg.content}")
save_graph_image(graph_builder)
return None
def main():
# run_chatbot()
run_chatbot_messages()
if __name__ == "__main__":
main()