LangGraph: Graph-based agent workflows — Khi agent cần 'suy nghĩ' theo vòng lặp
LangGraph biến agent từ chuỗi hành động tuyến tính thành state machine với các vòng lặp phản tư, persistence và branching — giải pháp cho workflow phức tạp v...
Tại sao một số workflow agent cần "đi vòng" thay vì chỉ đi thẳng? Khi bạn xây dựng agent khảo sát tài liệu dài 100 trang — đọc → tóm tắt → phát hiện lỗ hổng → đọc thêm → sửa lại tóm tắt — cấu trúc tuyến tính (A→B→C) sẽ bóp nghẹt logic. LangGraph sinh ra để biến agent thành máy trạng thái (state machine) có vòng lặp, nhánh rẽ và bộ nhớ liên tục, thay vì chỉ là chuỗi prompt nối tiếp.
Vấn đề
Các framework agent thế hệ đầu (bao gồm LangChain gốc) thiết kế workflow dưới dạng DAG (Directed Acyclic Graph) — tức là đồ thị có hướng không chu kỳ. Prompt A gọi LLM → Output đi vào Prompt B → Kết thúc. Mô hình này gặp khủng hoảng khi:
- Cần retry: Agent gọi API bị lỗi timeout → phải thử lại 3 lần rồi mới chuyển sang bước khác.
- Human-in-the-loop: Giữa chừng cần dừng lại đợi người duyệt, sau đó có thể quay lại bước trước hoặc tiến tới bước mới tùy kết quả phê duyệt.
- Branching động: Dựa vào độ dài output, agent tự quyết định chia nhỏ tài liệu (chunking) và xử lý song song, rồi merge lại — cấu trúc không thể biết trước khi chạy.
Code "if-else" lồng nhau trong Python nhanh chóng trở thành spaghetti, và việc debug trạng thái (state) sau 20 lượt gọi API trở thành ác mộng. Bạn cần một kiến trúc vừa deterministic (điều khiển luồng rõ ràng) vừa flexible (cho phép LLM quyết định đường đi).
Ý tưởng cốt lõi
LangGraph biến workflow thành đồ thị có chu kỳ (cyclic graph) gồm ba thành phần:
Nodes: Hành động là các "đỉnh"
Mỗi node là một hàm Python hoặc một Runnable (LLM, tool, hoặc human interrupt). Ví dụ:
agent_node: Gọi LLM để suy nghĩtool_node: Thực thi bash script hoặc APIhuman_review_node: Dừng lại đẩy notification lên Slack đợi approve
Edges: Cung nối có điều kiện
Không chỉ là A→B cố định, LangGraph hỗ trợ:
- Conditional edges: Hàm routing kiểm tra state hiện tại (
should_continue()) rồi quyết định đi tớicontinue_to_toolhayend. - Cycles: Cho phép quay lại
agent_nodesau khi tool trả về observation — tạo thành vòng lặp ReAct (Reasoning → Acting → Observing) tự nhiên.
State: Bộ nhớ chia sẻ giữa các turn
State là một dictionary (hoặc Pydantic model) được truyền qua các node. Mỗi node nhận state, thay đổi nó (ví dụ: thêm message mới vào list), rồi trả về. Điều này khác với context window thuần túy — state có cấu trúc, có thể persist vào database, và cho phép checkpointing (lưu trạng thái sau mỗi bước để resume sau crash).
Persistence & Human-in-the-loop
LangGraph tích hợp checkpoint bằng Postgres hoặc SQLite. Nếu server restart giữa chừng khi agent đang "suy nghĩ", bạn có thể resume đúng tại node đang dừng, không mất context. Tính năng interrupt cho phép inject human approval vào bất kỳ cung nào, biến agent thành hệ thống "tự chủ có giám sát" thay vì tự động hoàn toàn.
Tại sao nó hoạt động
Kiến trúc graph của LangGraph giải quyết separation of concerns giữa control flow và reasoning:
Control flow (điều khiển) là deterministic: Các cung (edges) được định nghĩa rõ ràng bằng code Python — không có hallucination ở tầng này. Bạn chắc chắn rằng sau khi chạy tool ssh_exec, hệ thống sẽ kiểm tra exit code trước khi quyết định retry hay proceed.
Reasoning (suy luận) là probabilistic: Nội dung bên trong node (prompt gửi LLM) vẫn là "mềm" — LLM quyết định viết gì trong message. Nhưng cấu trúc "sau khi viết xong thì đi đâu" là "cứng", ngăn agent lạc vào vòng lặp vô tận hoặc đi lạc hướng.
So với các pattern khác:
- LangChain Expression Language (LCEL): Chỉ hỗ trợ DAG, không có vòng lặp.
- CrewAI: Tập trung vào role-based delegation (Manager → Worker), ít kiểm soát cấp độ graph.
- AutoGen: Dùng conversation thread, hỗ trợ loop nhưng khó debug vì trạng thái nằm rải rác trong history chat.
Ý nghĩa thực tế
Khi nào chọn LangGraph?
| Đặc điểm workflow | LangGraph phù hợp? | Lý do |
|---|---|---|
| Cần vòng lặp retry (test → fix → retest) | ✅ Cực kỳ | Cycles là first-class citizen |
| Human approval giữa các bước | ✅ Cực kỳ | Interrupt + State persistence |
| Logic branching phức tạp (nếu A thì X, nếu B thì Y) | ✅ Cực kỳ | Conditional edges rõ ràng |
| Multi-agent với luồng nghiêm ngặt | ✅ Tốt | Có thể map agent vào node, dùng graph để điều phối |
| Chỉ là Q&A đơn giản 1 lượt | ❌ Không | Thiết lập graph quá nặng cho task đơn giản |
| Cần "vibe coding" nhanh gọn | ⚠️ Cân nhắc | CrewAI hoặc OpenClaw nhanh hơn |
Ví dụ production
1. Research Agent với verification loop Agent đọc tài liệu → Trích xuất claim → Kiểm chứng bằng search → Nếu conflict > 0.7 thì quay lại đọc thêm tài liệu, nếu < 0.3 thì ghi nhận kết luận. LangGraph cho phép loop này chạy tối đa 5 lần rồi forced exit, tránh infinite loop.
2. Customer Support Escalation
Node đầu tiếp nhận ticket → Node phân loại (LLM quyết định technical/billing) → Nếu billing thì chạy node truy vấn Stripe API → Nếu API trả lỗi 5xx, edge điều hướng sang human_handoff_node và pause, đợi staff bấm "Resume" trên dashboard. State được lưu checkpoint nên staff có thể restart server mà không mất context khách hàng.
3. Code Generation với Test-Driven cycles
planner_node viết test → coder_node viết code → test_runner_node chạy pytest → Nếu fail, conditional edge quay lại coder_node với error message; nếu pass, đi tới review_node. Toàn bộ history của 10 vòng lặp sửa lỗi được lưu trong state để review cuối cùng.
Hạn chế
- Learning curve: Phải hiểu rõ state management và graph theory cơ bản, không "vibe code" được như Claude Code hay OpenClaw.
- Boilerplate: Định nghĩa node, edge, state schema tốn nhiều dòng code hơn CrewAI (chỉ cần decorator
@task). - Scaling horizontally: Graph chạy trên một process Python; để scale ra nhiều worker cần tự động hóa checkpoint và queue bên ngoài (Redis/RabbitMQ), không có sẵn như GoClaw.
Đào sâu hơn
Docs chính thức
- LangGraph Documentation — Hướng dẫn cơ bản về StateGraph, Persistence và Human-in-the-loop.
Cùng cụm: Framework Landscape
Bản đồ AI Agent Framework 2026
Tổng quan vị trí 5 framework chính: OpenClaw, GoClaw, LangGraph, CrewAI, AutoGen trong hệ sinh thái AI
OpenClaw: Agent framework phổ biến nhất
So sánh LangGraph với runtime agent liên tục của OpenClaw — khi nào dùng graph, khi nào dùng message-oriented middleware
GoClaw: OpenClaw rebuilt bằng Go
Kiến trúc GoClaw cho enterprise-scale khác gì LangGraph Python-based?
CrewAI: Role-based multi-agent đơn giản nhất
Khi workflow chỉ cần "Manager phân công cho Workers", CrewAI có thể thay thế LangGraph phức tạp
Đọc tiếp
So sánh 5 framework head-to-head
Bảng quyết định: LangGraph vs CrewAI vs AutoGen vs OpenClaw/GoClaw — chọn framework nào cho use case của bạn?
Chạy agent đầu tiên
Bước tiếp theo: Thiết lập môi trường và chạy LangGraph agent "Hello World" với persistence
GoClaw: OpenClaw rebuilt bằng Go cho enterprise — Binary nhỏ, chạy nhanh, deploy đơn giản
GoClaw là bản rebuild OpenClaw bằng ngôn ngữ Go cho enterprise: binary nhỏ hơn 90%, khởi động dưới 100ms, goroutine xử lý hàng ngàn agent đồng thời. Tìm hiểu...
CrewAI: Role-based multi-agent đơn giản nhất
Khám phá CrewAI — framework Python dễ tiếp cận nhất để xây dựng hệ thống multi-agent. Từ khái niệm Role-Goal-Backstory đến cách so sánh với LangGraph và Auto...