LangGraph - Songwooseok123/Study_Space GitHub Wiki

LangGraph ํŠน์ง•๊ณผ ๊ตฌ์กฐ

LLM ๊ธฐ๋ฐ˜ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ํ”„์—์ž„์›Œํฌ

ํŠน์ง•

  • ์‚ฌ์ดํด ์ง€์›
    • ๋…ธ๋“œ ๊ฐ„ ์–‘๋ฐฉํ–ฅ ์†Œํ†ต ๊ฐ€๋Šฅ(์ˆœํ™˜ ๊ตฌ์กฐ)
  • ์„ธ๋ฐ€ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ
  • ๋‚ด์žฅ ์ง€์†์„ฑ
  • ์ƒํƒœ ๋ฐ ํ๋ฆ„ ์ •๋ฐ€ ์ œ์–ด
  • Human in the loop
  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋Šฅ:๋…ธ๋“œ์™€ ๋…ธ๋“œ ๊ฐ„์˜ ์ฃผ๊ณ ๋ฐ›์•˜๋˜ ์ž…์ถœ๋ ฅ์˜ ์ƒํƒœ๋„ ์ €ํฌ๊ฐ€ ์ฒดํฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ์ด ๊ทธ๋ž˜ํ”„๊ฐ€ ์ „์ฒด๊ฐ€ ์‹คํ–‰์ด ๋์„ ๋•Œ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ๋„ ์ง€์†ํ•ด์„œ ์ €ํฌ๊ฐ€ ๊ทธ๋‹ค์Œ ๋Œ€ํ™”์— ์—ฐ์†ํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ 

LangGraph ๊ตฌ์กฐ

  • ๋…ธ๋“œ
  • ์—ฃ์ง€
  • ์—์ด์ „ํŠธ: ๋…ธ๋“œ์™€ ๋…ธ๋“œ ์‚ฌ์ด์— ์–ด๋–ค ์•ก์…˜์„ ์ทจํ•ด์•ผ ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” AI

image ์ถœ์ฒ˜: https://blog.langchain.dev/langgraph-studio-the-first-agent-ide/

  • ์œ„์˜ ๊ทธ๋ฆผ์€ langgprph studio์—์„œ ๋‚ด๊ฐ€ ์ง  ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐํ™”ํ•ด์ฃผ๋Š” ๊ทธ๋ฆผ.
    • ํ˜„์žฌ ์‹œ์ ์„ ํ•˜์ด๋ผ์ดํŒ…ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Œ

LangGraph ์ฝ”๋“œ ๊ตฌ์„ฑ

image ์ถœ์ฒ˜:https://www.youtube.com/watch?v=p_pOIvXFDXQ


1. ๐Ÿ“ฆ State(์ƒํƒœ) ์ •์˜

class State(TypedDict):
    messages: Annotated[list, add_messages]

State๋Š” ๋…ธ๋“œ ๊ฐ„ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (์Šคํ‚ค๋งˆ)

์—ฌ๊ธฐ์„œ๋Š” messages ๋ฆฌ์ŠคํŠธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ˆ„์  ์ €์žฅ (add_messages ํ™œ์šฉ)

StateGraph(State)๋ฅผ ํ†ตํ•ด ์ „์ฒด ๊ทธ๋ž˜ํ”„๊ฐ€ ์ด ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘๋™

2. ๋…ธ๋“œ ์ •์˜

llm = ChatAnthropic(model="claude-3.5-sonnet")

def chatbot(state: State):
    return {"messages": [llm.invoke(state["messages"])]}

graph_builder.add_node("chatbot", chatbot)

๊ฐ ๋…ธ๋“œ๋Š” State๋ฅผ ๋ฐ›์•„ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜

LLM ์‘๋‹ต์„ ๋ฐ›์•„ messages์— ๋‹ค์‹œ ์ €์žฅ

add_node("๋…ธ๋“œ๋ช…", ํ•จ์ˆ˜) ํ˜•์‹์œผ๋กœ ๊ทธ๋ž˜ํ”„์— ๋“ฑ๋ก

3. ๐Ÿ”— Edge(์—ฃ์ง€) ๋ฐ Graph ์ •์˜

graph_builder.add_edge(START, "chatbot")
graph_builder.add_edge("chatbot", END)
graph = graph_builder.compile()

add_edge(์ถœ๋ฐœ, ๋„์ฐฉ)์œผ๋กœ ๋…ธ๋“œ ๊ฐ„ ํ๋ฆ„์„ ์ง€์ •

START, END๋Š” ๊ทธ๋ž˜ํ”„์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์ง€์ 

compile()๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„ ๊ฐ์ฒด ์ƒ์„ฑ

ํ•ต์‹ฌ ๊ฐœ๋… ์ •๋ฆฌ

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
State ๋…ธ๋“œ ๊ฐ„ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ. TypedDict ๊ธฐ๋ฐ˜
Node State๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ž‘์—… ํ›„, ๊ฒฐ๊ณผ๋ฅผ State ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
Edge ๋…ธ๋“œ ๊ฐ„ ์—ฐ๊ฒฐ. ํ๋ฆ„(Flow)์„ ๊ตฌ์„ฑ
Graph ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ ์ •์˜์ฒด. compile()๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜
messages LLM ์‘๋‹ต์ด ์ €์žฅ๋˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ํ•„๋“œ

LangChain vs LangGraph

image ์ถœ์ฒ˜: https://www.youtube.com/watch?v=yD3SnuU6Pd8

ํ•ญ๋ชฉ LangChain LangGraph
์‹คํ–‰ ๊ตฌ์กฐ ์ฒด์ธ ์ค‘์‹ฌ, ์„ ํ˜•์ (์ง๋ ฌ) ํ๋ฆ„ ์ƒํƒœ ๊ธฐ๋ฐ˜, ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ
๋ฉ”์‹œ์ง€ ํ๋ฆ„ ๋‹จ๋ฐฉํ–ฅ, ๊ณ ์ •๋œ ์ˆœ์„œ ๋™์ , ์–‘๋ฐฉํ–ฅ
์ƒํƒœ ๊ณต์œ  ๋ฐฉ์‹ Chain๋งˆ๋‹ค ๊ฐœ๋ณ„ ์ž…๋ ฅ/์ถœ๋ ฅ State๋ฅผ ํ†ตํ•ด ์ „์ฒด ๊ณต์œ 
๋ฉ€ํ‹ฐํ„ด ์ฒ˜๋ฆฌ ์–ด๋ ต๊ฑฐ๋‚˜ ์ˆ˜๋™ ์ฒ˜๋ฆฌ ํ•„์š” State ๋ˆ„์ ์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฉ€ํ‹ฐํ„ด ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
์ œ์–ด ํ๋ฆ„ ์ œํ•œ์ , Chain/Tool์„ ๋ถ™์—ฌ์„œ ๋ถ„๊ธฐ ๊ตฌํ˜„(์–ด๋ ค์›€) ์กฐ๊ฑด๋ถ€ ๋…ธ๋“œ ์ „์ด (if/else ๋ผ์šฐํŒ…์œผ๋กœ ๋ถ„๊ธฐ ๋“ฑ) ์ง๊ด€์  ๊ตฌํ˜„
๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋กœ ์‹œ๊ฐ์ ยท๋…ผ๋ฆฌ์ ์œผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

์ฃผ์š” ํ™œ์šฉ Scene

LangChain

  • RAG ์ธ๋ฑ์‹ฑ

Document Loader โ†’ Text Splitter โ†’ Embeddings โ†’ VectorStore

  • RAG ์ƒ์„ฑ

Retriever โ†’ Prompt โ†’ Model

  • ์—์ด์ „ํŠธ ๊ตฌ์„ฑ

Prompt โ†’ Model โ†’ Output Parser โ†’ Tools

  • ์ •๋ณด ์ถ”์ถœ

Document Loader โ†’ Prompt โ†’ Model โ†’ Output Parser

Langgraph

Langgraph๋Š” ๋…ธ๋“œ ๊ฐ„ ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ ๋ฐ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋” ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›:

  • ๋‹จ์ผ ์—์ด์ „ํŠธ ๊ธฐ๋ฐ˜

๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์‹œ์ž‘ โ†’ ์—์ด์ „ํŠธ โ†’ ์•ก์…˜ โ†’ ์ข…๋ฃŒ ํ๋ฆ„ ๊ตฌ์„ฑ

๋ฉ”์‹œ์ง€ ํ๋ฆ„์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ „ํ™˜ ๊ฐ€๋Šฅ

  • ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ๊ธฐ๋ฐ˜

์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๋“ค์ด ํ˜‘๋ ฅํ•˜๋ฉฐ ์ƒํƒœ ์ „ํ™˜

image ์ถœ์ฒ˜:https://www.youtube.com/watch?v=yD3SnuU6Pd8

LangGraph์˜ Tool Calling ๋กœ์ง

image ์ถœ์ฒ˜: https://www.youtube.com/watch?v=Ubz0XIZpuVY&list=TLPQMjgwNTIwMjXmnOLbEqVMYQ&index=2

  • ๊ทผ๋ฐ ํ•ญ์ƒ tool ๋ถ€๋ฅด๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, chatbot์ด tool์„ ๋ถ€๋ฅผ์ง€, ๋ณธ์ธ์ด ๋Œ€๋‹ตํ• ์ง€ ํŒ๋‹จ -> Conditional edge

์‹ค์Šต

https://github.com/Songwooseok123/LangGraph-Practice