TungDaDev's Blog

langgraph & stateful multi-agent

Langgraph multi agent.jpg
Published on
/8 mins read/

Một chuỗi các bước tuyến tính chỉ tạo ra một pipeline thụ động. Một cỗ máy trạng thái có khả năng lặp lại và tự sửa sai mới tạo nên một Agent thực thụ.

Nếu bạn đã từng dùng LangChain trong những ngày đầu, chắc hẳn bạn đã quen thuộc với khái niệm Chain — một chuỗi các bước chạy một chiều từ đầu đến cuối theo dạng đồ thị có hướng không chu trình (DAG - Directed Acyclic Graph):

Prompt ──► LLM ──► OutputParser ──► Kết quả

Mô hình này hoạt động hoàn hảo cho các tác vụ xử lý ngôn ngữ đơn giản: tóm tắt văn bản, trích xuất thực thể, hoặc Q&A một lượt.

Nhưng khi bước vào kỷ nguyên của Agentic Workflows, nơi phần mềm phải tự thực hiện những tác vụ phức tạp của con người (như viết code, sửa lỗi, nghiên cứu thị trường, kiểm tra tính toán), chuỗi tuyến tính DAG hoàn toàn gãy đổ. Bởi vì bản chất của giải quyết vấn đề trong thế giới thực là vòng lặp (loops), thử sai (trial & error), và quay lui (backtracking):

  1. Agent viết code \to 2. Chạy thử test \to 3. Test fail \to 4. Quay lại bước 1 để sửa \to 5. Lặp lại cho đến khi pass hoặc cần con người can thiệp.

Để giải quyết bài toán này, đội ngũ LangChain đã tạo ra LangGraph — một framework đột phá mang tư duy của Máy trạng thái hữu hạn (Finite State Machine) vào việc điều phối các hệ thống AI Agent đơn lẻ và Đa Agent (Multi-Agent Systems).

Bài viết này sẽ mổ xẻ bản chất kiến trúc của LangGraph, giải thích tại sao State Machine là tương lai của AI Orchestration, và hướng dẫn xây dựng một mạng lưới Multi-Agent chuyên nghiệp.


# tại sao dag thất bại? sự trỗi dậy của state machine

Trong khoa học máy tính cổ điển, khi bạn muốn điều khiển một quy trình phức tạp có nhiều điều kiện chuyển giao và chu trình lặp (ví dụ: giao thức mạng TCP, quy trình thanh toán đơn hàng e-commerce), bạn không bao giờ dùng một script chạy thẳng tuột từ trên xuống dưới. Bạn dùng State Machine.

LangGraph định nghĩa một Agent dựa trên 3 trụ cột cơ bản:

  1. State (Trạng thái): Một cấu trúc dữ liệu trung tâm (Data Schema) lưu giữ toàn bộ ngữ cảnh hiện tại của hệ thống: lịch sử tin nhắn, danh sách file đã tạo, kết quả test, biến cờ (flags)...
  2. Nodes (Các đỉnh xử lý): Các hàm Python/TypeScript đại diện cho các hành động (Actions). Mỗi Node nhận vào State hiện tại, xử lý (gọi LLM, query Database, gọi API), và trả về bản cập nhật cho State.
  3. Edges (Các cạnh chuyển giao): Định nghĩa luồng di chuyển từ Node này sang Node khác. Đặc biệt, Conditional Edges (Cạnh điều kiện) cho phép hệ thống phân nhánh linh hoạt dựa trên kết quả trong State.

# 3 tính năng mang tính cách mạng của langgraph

1. Cycles (Hỗ trợ vòng lặp tự nhiên)

Khác với DAG cấm tiệt chu trình (cycles), LangGraph cho phép một luồng quay trở lại chính nó hoặc quay lại các bước trước đó. Đây là nền tảng để triển khai mẫu thiết kế Reflection & Self-Correction:

2. Human-in-the-Loop & Breakpoints (Tạm dừng an toàn)

Trong các hệ thống tự động hóa nghiệp vụ (như chuyển tiền, xóa cơ sở dữ liệu, gửi email hàng loạt), bạn không thể để AI tự tung tự tác 100%. Bạn cần sự kiểm duyệt của con người trước khi hành động rủi ro được thực thi.

  • LangGraph cho phép đặt Breakpoints (Điểm ngắt) trước bất kỳ Node nào.
  • Workflow chạy đến trước Node nguy hiểm sẽ tự động tạm dừng (Pause), lưu toàn bộ State vào database, và phát ra một event thông báo cho người quản trị.
  • Người dùng có thể: Phê duyệt (Approve), Từ chối (Reject), hoặc thậm chí chỉnh sửa trực tiếp State trước khi nhấn Resume.

3. Time-Travel (Cỗ máy thời gian gỡ lỗi)

Vì LangGraph lưu lại lịch sử trạng thái theo từng bước (Checkpointing), bạn có khả năng:

  • Tua lại (Rewind) hệ thống về thời điểm trước khi xảy ra quyết định sai lầm.
  • Thay đổi một nhánh suy luận và cho Agent chạy tiếp từ điểm đó mà không cần phải chạy lại từ đầu. Đây là công cụ gỡ lỗi (debugging) vô giá cho các hệ thống AI phức tạp.

# các mẫu thiết kế phối hợp đa agent (multi-agent patterns)

Khi một bài toán trở nên quá lớn, việc nhồi nhét tất cả vào một Agent duy nhất (Single Monolithic Agent) sẽ làm cho context window bị loãng và LLM mất tập trung. Giải pháp là chia nhỏ thành một Đội ngũ AI chuyên biệt (Specialized Agents).

LangGraph hỗ trợ 2 kiến trúc phối hợp phổ biến:

Mô hình 1: Supervisor Pattern (Mô hình Trưởng nhóm điều phối)

Một Supervisor Agent đóng vai trò là "Project Manager", nhận yêu cầu từ người dùng và quyết định giao việc cho Agent chuyên môn nào tiếp theo:

Mô hình 2: Hierarchical Teams (Đội nhóm phân cấp)

Các nhóm Agent nhỏ tự phối hợp nội bộ trước khi báo cáo kết quả lên cấp cao hơn, tương tự như cơ cấu phòng ban trong một doanh nghiệp phần mềm (ví dụ: Nhóm Dev + Test làm việc với nhau dưới sự quản lý của Tech Lead).


# ví dụ triển khai stateful graph với code

Dưới đây là cấu trúc cơ bản của một Workflow tự sửa lỗi trong LangGraph:

from typing import TypedDict, Annotated, List
from langgraph.graph import StateGraph, END
import operator
 
# 1. Định nghĩa State Schema trung tâm
class AgentState(TypedDict):
    task: str
    code: str
    test_output: str
    iteration: Annotated[int, operator.add] # Tự động tăng giá trị
 
# 2. Định nghĩa các Nodes xử lý
def write_code_node(state: AgentState):
    prompt = f"Task: {state['task']}\nPrevious error: {state.get('test_output', '')}"
    # Gọi LLM sinh code
    generated_code = call_llm_code_generator(prompt)
    return {"code": generated_code, "iteration": 1}
 
def test_code_node(state: AgentState):
    # Thực thi test trong Docker Sandbox an toàn
    passed, output = run_unit_tests(state["code"])
    return {"test_output": output, "is_passed": passed}
 
# 3. Định nghĩa Conditional Edge
def should_continue(state: AgentState):
    if state.get("is_passed", False):
        return END # Đạt yêu cầu, kết thúc!
    if state["iteration"] >= 3:
        return "human_review" # Thử lại quá 3 lần -> Chuyển người
    return "write_code" # Quay lại bước viết code để sửa!
 
# 4. Ghép nối Graph
workflow = StateGraph(AgentState)
workflow.add_node("write_code", write_code_node)
workflow.add_node("test_code", test_code_node)
 
workflow.set_entry_point("write_code")
workflow.add_edge("write_code", "test_code")
workflow.add_conditional_edges("test_code", should_continue)
 
app = workflow.compile()

# tổng kết

Thế giới AI đang chứng kiến một cuộc chuyển dịch triết lý mạnh mẽ: từ những lời hứa hão huyền về "Mô hình AGI vạn năng duy nhất giải quyết được mọi việc" sang những hệ thống phần mềm có cấu trúc, phối hợp nhiều Agent chuyên môn hóa và vận hành dưới sự kiểm soát chặt chẽ của các cỗ máy trạng thái.

LangGraph không phải là một framework tạo chat bot thông thường; nó là nền tảng kiến trúc phần mềm giúp các kỹ sư xây dựng những hệ thống tự động hóa bền bỉ, có khả năng phục hồi sau lỗi và sẵn sàng cho môi trường Production thực tế.


Chỉ là những ghi chép cá nhân với hy vọng mang lại chút giá trị. Nếu thấy hữu ích, đừng ngại chia sẻ cho bạn bè & đồng nghiệp nhé!

Happy coding 😎 👍🏻 🚀 🔥.