RAG2026-5일17차시 · LangGraph 입문16 / 20← 이전목차다음 →MetaContents

17차시. LangGraph 입문

실습 1 — LangGraph 입문 실습 따라 하기

관련 수업 자료: 17차시 「실제 코드로 만들어보기」(7~9쪽), 17차시 「Graph를 그림으로 보기」(11~12쪽) · 실습 코드 17/설치확인.py, 17/simple_graph.py, 17/conditional_graph.py, 17/visual_graph.py

이 실습은 교안 해설(17_LangGraph입문.md)의 실습 순서를 옮긴 것입니다. OpenAI 임베딩이나 채팅 모델을 부르는 파일은 .env 에 API 키가 있어야 돌아갑니다. 키가 없으면 실행 결과 샘플로 출력 모양을 확인합니다.

수업 자료와 이어지는 곳

실습 코드원본 PDF이어지는 내용
17/설치확인.py-원본 PDF 에 짝이 되는 쪽이 없어 이 페이지 아래에 실었습니다
17/simple_graph.py8쪽17차시 「실제 코드로 만들어보기」 › Step 3: Graph 만들기 아래에 실었습니다
17/conditional_graph.py8쪽17차시 「실제 코드로 만들어보기」 › Step 3: Graph 만들기 아래에 실었습니다
17/visual_graph.py11~12쪽17차시 「Graph를 그림으로 보기」 아래에 실었습니다

실행 흐름

출력
START → 검색 노드
검색 노드 → 결과 있나
결과 있나 → 답변 노드  (있다)
결과 있나 → 다시 또는 안내  (없다)
답변 노드 → END
다시 또는 안내 → END

실습 순서

실습/src/17에서 python 설치확인.py, python simple_graph.py, python conditional_graph.py를 실행합니다. 조건 분기의 실제 출력은 파일 하단 샘플과 같습니다.

스스로 확인

  • 노드와 엣지를 함수와 호출 순서로 말할 수 있는가?
  • State를 공유 딕셔너리로 설명할 수 있는가?
  • 조건부 분기가 if를 그래프 밖으로 꺼낸 것이라는 점을 아는가?

이어지는 실습 코드

실습 코드 · 17/설치확인.py

실습 코드: 실습/src/17/설치확인.py · 원본 PDF 에 같은 이름의 쪽이 없어 여기에 실었습니다.

Python
# ============================================================
# 17차시 | LangGraph 입문
# 교안: 17차시_LangGraph입문.pptx
# 역할: LangGraph 패키지를 불러와 설치가 되었는지 확인한다.
# 입력: 없음
# 출력: 설치 완료 한 줄
#
# 이 파일에는 그래프가 없다.
# 다음 파일부터 쓰는 말:
#   State  = 노드들이 함께 고치는 공용 딕셔너리. 공유 노트.
#   Node   = 그 노트를 읽고, 고친 칸만 돌려주는 함수.
#   Edge   = 한 함수가 끝난 뒤 다음에 호출할 함수. 다음 단계.
#   START  = 시작 표시. END = 끝 표시.
#   compile = 연결을 확정해서 실행 가능한 앱으로 만든다.
#   invoke  = 처음 노트를 넣고 END까지 한 번에 실행한다.
#
# 흐름
#   (그래프 없음) import → print
# ============================================================

from langgraph import graph

print("LangGraph 설치 완료!")

실행 결과 샘플 (교안 기록. API 키가 필요한 코드는 키 없이 맞춘 예시이고, 모델의 답은 실행할 때마다 달라집니다)

출력
===== 실행 결과 샘플 =====
실행: cd 실습/src/17
      python 설치확인.py
(실제 실행 출력)
LangGraph 설치 완료!

코드 해설

LangGraph 패키지를 불러와 설치가 되었는지 확인한다. 입력은 없음이고, 출력은 설치 완료 한 줄입니다.

주석에 적힌 흐름입니다.

출력
흐름
(그래프 없음) import → print

코드 앞에서 고정해 두는 말입니다.

  • 17차시 | LangGraph 입문
  • 교안: 17차시_LangGraph입문.pptx
  • 이 파일에는 그래프가 없다.
  • 다음 파일부터 쓰는 말:
  • State = 노드들이 함께 고치는 공용 딕셔너리. 공유 노트.
  • Node = 그 노트를 읽고, 고친 칸만 돌려주는 함수.
  • Edge = 한 함수가 끝난 뒤 다음에 호출할 함수. 다음 단계.
  • START = 시작 표시. END = 끝 표시.

파일 맨 아래 실행 결과 샘플 주석은 실행되지 않습니다. 화면 출력은 다음 절에 다시 적어 두었습니다.

코드 설명

  • return {"results": results} 처럼 노드는 바꾼 칸만 돌려줍니다. 원본 PDF Step 2 의 state["results"] = results; return state 도 돌아가지만, 실습 코드는 바꾼 칸만 돌려주는 쪽으로 씁니다. 18차시에서 그 까닭을 다룹니다.
  • graph.add_node("search", search_node) 의 첫 인자가 노드 이름입니다. add_edge 와 조건부 엣지의 표는 함수가 아니라 이 이름을 가리킵니다. 이름 철자가 다르면 컴파일에서 오류가 납니다.
  • add_edge(START, "search") 와 add_edge("answer", END) 는 원본 PDF 의 set_entry_point, set_finish_point 와 같은 일을 합니다. 실습 코드는 START, END 쪽을 씁니다.
  • check_search_quality 는 노드가 아닙니다. State를 고치지 않고 "good" 이나 "bad" 라는 이름만 돌려주며, add_conditional_edges 의 표가 그 이름을 실제 노드로 바꿉니다.
  • conditional_graph.py 는 질문에 '가격'이 없어 결과가 늘 비므로 search 로 계속 돌아갑니다. {"recursion_limit" : 10} 에 걸려 GraphRecursionError 가 나고, except 에서 안내 문장으로 끝납니다. 되돌아가는 길을 만들면 상한도 함께 두셔야 합니다.
  • visual_graph.py 의 get_graph().draw_mermaid_png() 는 compile 한 앱에서 부릅니다. 원본 PDF 는 graph.get_graph() 로 적었지만 실습 코드는 app.get_graph() 입니다. 창을 띄우는 파일이라 교안에서는 실행 결과 샘플만 실었습니다.
← 이전 절17차시 · 체크리스트와 과제다음 절 →17차시 · 퀴즈 1 — 바꾼 칸만 돌려주는 인사 노드