← Writing
AI & Generative AI

LangGraph Introduction

Data Mastery Series — Episode 50: Next-Level Chat with Document

13 Apr 20259 min readLangChainLangGraphRAGAI AgentDashboard
LangGraph Series · Part 1 of 3

LangGraph Introduction

Data Mastery Series — Episode 50: Next-Level Chat with Document

📌 Connect with me and follow our journey: Linkedin, Facebook

LangChain คืออะไร?

LangChain คือ Framework ที่ช่วยให้ Developer เชื่อมต่อ Large Language Model (LLM) เข้ากับแหล่งข้อมูลต่าง ๆ เช่น เอกสาร, API หรือฐานข้อมูล เพื่อสร้างแอปพลิเคชันที่สามารถ สื่อสารกับผู้ใช้งานด้วยภาษาธรรมชาติ ได้อย่างมีประสิทธิภาพ

Figure: Retrieval Augmented Generation (RAG)

LangGraph คืออะไร?

LangGraph คือ Framework ใหม่ที่พัฒนาขึ้นจาก LangChain โดยออกแบบมาเพื่อช่วยให้สร้าง Agent Workflow แบบมีสถานะ (stateful agents) ได้สะดวกยิ่งขึ้น ด้วยแนวคิด Graph-based Programming

เปรียบเทียบให้เห็นภาพ:

  • LangChain คือชุดเลโก้
  • LangGraph คือคู่มือประกอบเลโก้ให้กลายเป็นระบบที่ซับซ้อนและเป็นขั้นเป็นตอน

หรืออีกนัยหนึ่ง:

  • LangGraph = LangChain + ระบบจัดการ Flow และ State สำหรับ Agent

ด้วย LangGraph คุณสามารถสร้าง Agent ที่:

  • ✅ ตัดสินใจตามเงื่อนไข
  • 🔁 สลับขั้นตอนการทำงาน
  • 🧠 จดจำบริบทข้ามรอบการสนทนา
  • 🧩 ผสานการใช้งานหลาย Tools ได้อย่างยืดหยุ่น

1. เริ่มต้นใช้งาน LangGraph

มาดูตัวอย่างการใช้งานเบื้องต้นของ LangGraph ร่วมกับ LangChain เพื่อสร้าง Agent ที่สามารถรับข้อความและตอบกลับอย่างง่าย

1️⃣ Define State

เราจะเริ่มจากการกำหนดรูปแบบของ State ซึ่งเป็นข้อมูลที่ถูกส่งผ่านและเปลี่ยนแปลงระหว่าง Node ต่าง ๆ ใน Workflow

class State(TypedDict):
messages: Annotated[List[BaseMessage], "add_messages"]

ตัวแปร messages คือ list ของข้อความ (เช่น HumanMessage, AIMessage) ที่ถูกสะสมไว้ตลอดการทำงานของ Agent

2️⃣ เตรียมเครื่องมือ เช่น LLM หรือ Functions

llm = ChatOpenAI(model="gpt-4o", temperature=0, api_key=OPENAI_API_KEY)

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

เราสร้างฟังก์ชัน chatbot ซึ่งรับข้อความจาก state แล้วส่งให้ LLM ประมวลผล และเก็บคำตอบกลับมาในรูปแบบใหม่

3️⃣ สร้าง Graph: เพิ่ม Node และเชื่อม Edge

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

ในขั้นตอนนี้ เราประกาศ Node ชื่อ chatbot และเชื่อมต่อจากจุดเริ่มต้น (START) ไปยัง chatbot และไปยังจุดสิ้นสุด (END)

4️⃣ (Optional) แสดงกราฟแบบภาพ

try:
display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:
pass

เมื่อรันโค้ดนี้ LangGraph จะสร้างแผนภาพ Mermaid ให้ดูโครงสร้างของ Graph ได้

📌 ตัวอย่างภาพ: โครงสร้างของ Graph ที่เราสร้าง

Figure: โครงสร้างของ Graph กรณีเริ่มต้นใช้งาน LangGraph

5️⃣ Run และดูผลลัพธ์

Figure: ผลลัพธ์ — เริ่มต้นใช้งาน LangGraph

จะเห็นได้ว่า Chatbot สามารถตอบคำถามได้ปกติเหมือนการใช้ LangChain ทั่วไป

อย่างไรก็ตาม หากลองถามคำถามเกี่ยวกับข้อมูลปัจจุบันหรือข้อมูลที่อยู่นอกขอบเขตของโมเดล LLM เช่น “อยากทราบผลบอล อาร์เซน่อล เสมอ เบรนท์ฟอร์ด ของวันที่ 13/4/2025” (วันที่เขียน Blog นี้) จะพบว่า LLM ไม่สามารถตอบได้ เพราะไม่มีการเชื่อมต่อข้อมูลจากโลกภายนอก

2. การเพิ่ม Search Tool ให้กับ Agent

เพื่อให้ Agent สามารถตอบคำถามเกี่ยวกับข้อมูลล่าสุดหรือโลกภายนอกได้ เราสามารถผสาน Search Tool เข้าไปใน Workflow ได้

1️⃣ เพิ่ม Search Tool (เช่น Tavily)

สร้าง Search Tool

search_tool = TavilySearchResults(max_results=2, tavily_api_key=TAVILY_API_KEY)
tools = [search_tool]

ผูก Tool เข้ากับ LLM

llm = ChatOpenAI(model="gpt-4o", temperature=0, api_key=OPENAI_API_KEY)
llm_with_tools = llm.bind_tools(tools)

สร้าง Node สำหรับ Tool

tool_node = ToolNode(tools=tools)

2️⃣ ปรับโครงสร้าง Graph

ในขั้นตอนนี้เราจะเพิ่ม Node สำหรับ Tool และกำหนดเงื่อนไขในการสลับการทำงานระหว่าง LLM และ Tool

graph_builder = StateGraph(State)

เพิ่ม Node สำหรับ LLM และ Tool

graph_builder.add_node("chatbot", chatbot)
graph_builder.add_node("tools", tool_node)

เงื่อนไขสำหรับการเลือกว่าจะใช้ Tool หรือจบการทำงาน

def tools_condition(state: State) -> str:
messages = state.get("messages", [])

if not messages:  
    return "end"  # กรณีไม่มีข้อความเลย → จบ workflow  

last_message = messages[-1]  
  
# ถ้า LLM มีการเรียกใช้ Tool (tool_calls) → ส่งไปที่ Node tools  
if isinstance(last_message, AIMessage) and last_message.tool_calls:  
    return "tools"  
  
return "end"  # ถ้าไม่มีก็จบที่ END  

กำหนด Flow ของ Graph

graph_builder.add_edge(START, "chatbot")

กำหนดเงื่อนไขจาก chatbot → tools หรือ end

graph_builder.add_conditional_edges(
"chatbot",
condition=tools_condition,
path_map={
"tools": "tools",
"end": END
}
)

หลังใช้ Tool เสร็จ ให้กลับไปที่ chatbot เพื่อสรุปผล

graph_builder.add_edge("tools", "chatbot")

Compile Graph ให้พร้อมใช้งาน

graph = graph_builder.compile()

3️⃣ (Optional) แสดงกราฟแบบภาพ

Figure: โครงสร้างของ Graph กรณีเพิ่ม Search Tool

4️⃣ Run และดูผลลัพธ์

Figure: Result of case 2: กรณีเพิ่ม Search Tool

เมื่อรัน Chatbot ที่มี Tool เสริมเข้ามาสามารถตอบคำถามได้

3. เสริมพลัง Agent ด้วย Memory

แม้ว่า Agent ของเราจะสามารถค้นหาข้อมูลและตอบคำถามได้จากทั้งโมเดลและ Search Tool แล้ว แต่หากไม่มี Memory ก็จะไม่สามารถ “จดจำบทสนทนา” หรือ รักษาบริบทระหว่างรอบการโต้ตอบ ได้

LangGraph รองรับการเพิ่ม memory ได้อย่างง่ายดายผ่านการใช้ checkpointer ซึ่งช่วยให้ Agent สามารถเก็บสถานะการสนทนาและนำกลับมาใช้ต่อได้ในรอบถัดไป

1️⃣ เพิ่ม Memory เข้าไปใน Workflow

เพิ่มการสร้าง memory object

memory = MemorySaver()

เพิ่มการผูก memory เข้าไปในการ Compile Graph

graph = graph_builder.compile(checkpointer=memory)

เพิ่มการกำหนด Thread ID สำหรับระบุตัวตนของ session

config = {
"configurable": {
"thread_id": "1" # เปลี่ยน thread_id ได้ตามผู้ใช้แต่ละคน
}
}

2️⃣ Run และดูผลลัพธ์

Figure: Result of case 3: กรณีเพิ่ม Memory

เมื่อรัน Agent ด้วย memory จะพบว่า:

  • สามารถ ตอบคำถามจากข้อมูลล่าสุด ได้ผ่าน Search Tool
  • และยังสามารถ จำประโยคก่อนหน้า เพื่อให้การสนทนาไหลลื่นและมีความต่อเนื่องมากยิ่งขึ้น

ตลอดบทความนี้ เราได้เรียนรู้วิธีใช้ LangGraph เพื่อสร้าง Agent ที่ตอบสนองได้อย่างชาญฉลาด ตั้งแต่การเริ่มต้นด้วย LLM พื้นฐาน → การผสาน Search Tool เพื่อดึงข้อมูลจากภายนอก → ไปจนถึงการเพิ่ม Memory ให้ Agent จดจำบทสนทนาได้อย่างต่อเนื่อง เสริมความสามารถให้ใกล้เคียงกับมนุษย์มากขึ้นในแต่ละรอบของการสนทนา

ในตอนถัดไป เราจะยกระดับสิ่งที่เรียนรู้ทั้งหมดไปสู่ Agentic RAG — การผสานความสามารถของ Retrieval-Augmented Generation เข้ากับเอกสารจริง ฝากติดตามกันด้วยนะครับ ^__^


Data Science Explore the world of data science with Donato_Story

Dashboard Discover the power of data visualization with Donato_Story

Donato_Journey Join me on my journey (Thai version)

Course_Review Discover the training courses with Donato_Story (Thai version)

Let’s Connect!

Your thoughts and feedback are invaluable. Feel free to share them in the comments or connect with me on

Originally published on Medium

Related