Skip to main content

Command Palette

Search for a command to run...

Kiến trúc GenAI cho Doanh nghiệp với LangGraph: Từ Router đến Supervisor (System 1 vs. System 2)

Updated
6 min read
Kiến trúc GenAI cho Doanh nghiệp với LangGraph: Từ Router đến Supervisor (System 1 vs. System 2)
C

Cu đơ yêu nghề

Phân tích Hệ thống Tư duy: System 1 (Router) vs. System 2 (Supervisor)

Dựa trên lý thuyết tư duy kép (Dual-process theory), chúng ta phân loại các Agentic Workflow thành hai tầng kiến trúc chính:

  • System 1 (Predefined Reasoning/Router): Hoạt động như phản xạ nhanh. Đây là các quy trình có cấu trúc module cố định, sử dụng LLM hoặc logic quy tắc để phân loại và điều hướng (routing) yêu cầu đến các nhánh xử lý chuyên biệt (verticals). System 1 đóng vai trò là một bước tiền xử lý (preprocessing step) hiệu quả.

  • System 2 (Agentic Reasoning/Supervisor): Tương tự như tư duy chậm và thận trọng. Một Agent Supervisor sẽ đóng vai trò điều phối trung tâm, duy trì trạng thái hội thoại và linh hoạt quyết định Agent phụ (sub-agent) nào cần được triệu hồi tiếp theo. Đây là mô hình điều phối đa lượt (multi-turn orchestration) giúp giải quyết các bài toán phức tạp mà kịch bản cố định không thể bao quát.

Bảng so sánh System 1 (Router) và System 2 (Supervisor)

Cơ chế Routing: Stateless vs. Stateful và Hạ tầng Dữ liệu

Việc lựa chọn cơ chế điều hướng ảnh hưởng trực tiếp đến khả năng mở rộng của hệ thống:

  • Stateless Routing: Xử lý mỗi yêu cầu độc lập. Phù hợp cho việc phân loại đầu vào đơn giản mà không cần quan tâm đến lịch sử.

  • Stateful Routing: Duy trì ngữ cảnh qua nhiều lượt tương tác.

    • Tool Wrapper (Hybrid): Một chiến lược hiệu quả là bọc Stateless Router vào trong một tool để Agent chính (có memory) gọi khi cần. Điều này giữ cho Router nhẹ nhàng nhưng vẫn tận dụng được bộ nhớ của hệ thống tổng thể.

    • Context Engineering: Stateful Routing cho phép thực hiện "selective context injection" – chỉ trích xuất những phần lịch sử hội thoại thực sự cần thiết, giúp tối ưu context window và giảm chi phí token.

Quản lý trạng thái và Persistence: Checkpointer trong Production

Để đưa hệ thống Agentic AI vào môi trường Production ổn định, khả năng lưu trữ trạng thái (Persistence) là điều kiện bắt buộc.

  • MemorySaver: Chỉ dùng cho môi trường phát triển (Development).

CẢNH BÁO: Tuyệt đối không dùng MemorySaver cho Production. Trong môi trường cân bằng tải (load-balanced), dữ liệu in-memory sẽ không được chia sẻ giữa các server instance và sẽ mất sạch khi hệ thống restart hoặc auto-scale.

  • Durable Checkpointer (PostgreSQL/Redis): Lưu trữ trạng thái đồ thị (graph state) bền vững. Đây là nền tảng cho cơ chế Human-in-the-loop. Sử dụng hàm interrupt() để tạm dừng hệ thống khi cần sự phê duyệt của con người, sau đó khôi phục chính xác trạng thái từ cơ sở dữ liệu.

Production Note: Luôn thực hiện "version pinning" cho các thư viện langgraph và langchain-core. Do API của Supervisor đã có những thay đổi lớn trong giai đoạn 2025-2026, việc không cố định phiên bản sẽ dẫn đến lỗi runtime nghiêm trọng khi CI/CD tự động cập nhật thư viện.

Kiểm soát vòng lặp (Execution Loops) và Quản trị rủi ro

Sai lầm phổ biến nhất trong kiến trúc Supervisor là tin tưởng tuyệt đối vào việc LLM tự đưa ra quyết định dừng (token FINISH). Trong thực tế, LLM có thể rơi vào "vòng lặp vô tận" khi các sub-agent không cung cấp đủ thông tin, gây lãng phí tài nguyên và chi phí API.

Quy tắc triển khai Loop Guard (ngăn chặn vòng lặp):

  1. State Schema: Thêm trường iteration_count vào State.

  2. Forbid Direct Mutation: Tuyệt đối không sử dụng các lệnh thay đổi trạng thái trực tiếp như state["messages"].append(). Điều này bypass cơ chế Reducer của LangGraph, gây sai lệch trạng thái khi chạy song song. Luôn trả về kết quả dưới dạng return {"messages": [...], "iteration_count": ...}.

  3. Hard Ceiling: Thiết lập ngưỡng MAX_ITERATIONS (thường là 10-15) tại node Supervisor. Nếu vượt ngưỡng, ép buộc hệ thống kết thúc với thông báo lỗi.

  4. Monitoring: Theo dõi phân phối iteration_count trong sản xuất. Nếu chỉ số p95 tiệm cận giới hạn cứng, đó là tín hiệu cho thấy Prompt của Supervisor cần được tinh chỉnh lại.

  5. Chiến lược xử lý lỗi (Error Handling) đa tầng

Trong LangGraph, cần hiểu rõ Superstep Transaction Rule: Nếu một nhánh chạy song song gặp lỗi, toàn bộ bước chạy (superstep) đó sẽ bị rollback. Để tránh việc một API lỗi nhỏ làm hỏng cả chu trình thành công của các nhánh khác, hãy áp dụng RetryPolicy tại từng node riêng lẻ thay vì áp dụng global.

Lỗi tạm thời (Transient Errors)

  • Định nghĩa: API 429, timeout, DNS blip.

  • Xử lý: RetryPolicy với Exponential Backoff và Jitter để tránh hiện tượng thâm hụt tài nguyên đồng loạt (thundering herd).

Lỗi có thể phục hồi bởi LLM (LLM-Recoverable)

  • Định nghĩa: Tool trả về sai format hoặc tham số không hợp lệ.

  • Xử lý: Gửi lỗi ngược lại cho LLM dưới dạng ToolMessage. Tuy nhiên, phải giới hạn số lần tự sửa (thường là 3) trước khi ngắt hệ thống để tránh lãng phí.

Lỗi cần con người xử lý (User-Fixable)

  • Định nghĩa: Thiếu thông tin đầu vào, dữ liệu mơ hồ.

  • Xử lý: Sử dụng interrupt(). Việc cố gắng retry bằng LLM cho loại lỗi này là lãng phí tài nguyên (vô ích sau ~6 giây latency).

Lỗi không mong đợi (Unexpected Errors)

  • Định nghĩa: Logic bug, TypeError, sai lệch schema.

  • Xử lý: Để lỗi "bubble up" (gây crash). Sử dụng LangSmith với các tag cụ thể (ví dụ: error-v3) để theo dõi tỷ lệ lỗi giữa các phiên bản pipeline. Đừng cố gắng "nuốt lỗi" bằng try/except tổng quát, điều đó sẽ che giấu các bug nghiêm trọng.

Kết luận và Lời khuyên

Xây dựng hệ thống Multi-agent cho doanh nghiệp không chỉ là viết Prompt, mà là thiết kế một hệ thống phân tán có khả năng tự phục hồi.

  • Tính bền vững (Persistence): Triển khai Postgres/Redis Checkpointer ngay từ ngày đầu để hỗ trợ Human-in-the-loop và mở rộng ngang.

  • Tính nguyên tử (Atomicity): Hiểu rõ cơ chế Superstep để thiết kế các node độc lập, tránh Rollback dây chuyền.

  • Tính quản trị (Governance): Luôn có giới hạn cứng về vòng lặp và giám sát chặt chẽ các Reducers để đảm bảo trạng thái hệ thống không bị biến đổi phi deterministic.

Agentic AI 101

Part 1 of 1

More from this blog

C

Code ở Nhật

14 posts

Chia sẻ Kiến Thức, Kinh Nghiệm, Định Hướng nghề nghiệp dành cho Kỹ Sư IT người Việt ở Nhật Bản.