Tutorial Lengkap LangGraph: Membangun AI Agents yang Kompleks
LangGraph adalah library dari LangChain untuk membangun stateful, multi-actor applications dengan Large Language Models (LLMs). Dengan LangGraph, Anda dapat membuat AI agents yang kompleks dengan kontrol flow yang fleksibel, state management, dan kemampuan untuk menjalankan multiple agents secara bersamaan.
Apa itu LangGraph?
LangGraph memperluas LangChain dengan menyediakan:
- Stateful graphs: Menyimpan dan mengelola state antar langkah
- Cyclic flows: Mendukung loops dan kondisional
- Human-in-the-loop: Interaksi manual di tengah workflow
- Persistence: Menyimpan state untuk resume later
- Streaming: Real-time streaming responses
- Membangun AI agents dengan multi-step reasoning
- Workflows yang membutuhkan kondisional dan loops
- Applications yang butuh human approval
- Multi-agent systems
- Complex RAG pipelines
Instalasi
pip install langgraph langchain langchain-openai
Konsep Dasar
1. Graph Components
LangGraph terdiri dari:
- State: Data yang dikelola sepanjang execution
- Nodes: Functions yang memproses dan memodifikasi state
- Edges: Koneksi antar nodes (conditional atau fixed)
2. Basic Graph Structure
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, START, END
Define state
class State(TypedDict):
messages: list
currentstep: str
Define nodes
def nodea(state: State) -> State:
state["messages"].append("Processed by Node A")
state["currentstep"] = "a"
return state
def nodeb(state: State) -> State:
state["messages"].append("Processed by Node B")
state["currentstep"] = "b"
return state
Build graph
graph = StateGraph(State)
graph.addnode("nodea", nodea)
graph.addnode("nodeb", nodeb)
Add edges
graph.addedge(START, "nodea")
graph.addedge("nodea", "nodeb")
graph.addedge("nodeb", END)
Compile
app = graph.compile()
Run
result = app.invoke({"messages": [], "currentstep": ""})
print(result)
Membangun Simple Chatbot
1. Basic Chatbot dengan Memory
from typing import Annotated
from typingextensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import addmessages
from langchainopenai import ChatOpenAI
from langchaincore.messages import HumanMessage, AIMessage
State dengan message history
class ChatState(TypedDict):
messages: Annotated[list, addmessages]
Initialize LLM
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)
Chatbot node
def chatbot(state: ChatState) -> ChatState:
response = llm.invoke(state["messages"])
return {"messages": [response]}
Build graph
graph = StateGraph(ChatState)
graph.addnode("chatbot", chatbot)
graph.addedge(START, "chatbot")
graph.addedge("chatbot", END)
app = graph.compile()
Interactive chat
def chat(userinput: str, history: list = None):
if history is None:
history = []
history.append(HumanMessage(content=userinput))
result = app.invoke({"messages": history})
return result["messages"]
Usage
messages = chat("Halo, siapa kamu?")
print(messages[-1].content)
messages = chat("Apa yang bisa kamu lakukan?", messages)
print(messages[-1].content)
2. Chatbot dengan Tools
from typing import Annotated
from typingextensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import addmessages
from langgraph.prebuilt import ToolNode, toolscondition
from langchainopenai import ChatOpenAI
from langchaincore.tools import tool
Define tools
@tool
def searchweb(query: str) -> str:
"""Search the web for information."""