Một agent nhiều bước không chỉ cần tạo câu trả lời. Nó còn phải nhớ đã đọc dữ liệu nào, đang chờ ai duyệt và nên tiếp tục ở đâu nếu tiến trình ngừng. LangGraph được tìm đến khi những câu hỏi về trạng thái và phục hồi trở thành phần chính của ứng dụng, thay vì một chi tiết có thể bỏ qua trong demo.
Điểm khó là phục hồi luồng không đồng nghĩa phục hồi tác động ở hệ thống ngoài. Agent có thể nhớ đã đến bước cập nhật đơn, nhưng nếu request timeout sau khi backend xử lý, nó vẫn cần cách kiểm tra kết quả trước khi thử lại. Hiểu ranh giới đó giúp tránh kỳ vọng checkpoint tự giải quyết mọi vấn đề giao dịch lặp.
LangGraph là gì là gì?

LangGraph là framework điều phối ở mức thấp cho agent và workflow có trạng thái. Các khái niệm như node, cạnh và state giúp biểu diễn công việc thành những bước cùng điều kiện chuyển. Nó có thể được dùng cho luồng có phần xác định bằng code và phần cần model suy luận, thay vì bắt mọi quyết định đi qua LLM.
Tổng quan chính thức nhấn mạnh các khả năng phục vụ luồng dài, persistence và tương tác với con người. Để đánh giá, cần chuyển chúng thành yêu cầu cụ thể của ứng dụng: trạng thái nào phải sống qua restart, bước nào được chạy lại và dữ liệu nào cần kiểm tra mới trước khi tiếp tục.
Nếu luồng chỉ có một request ngắn và không cần chờ hoặc khôi phục, có thể chưa cần đồ thị riêng. LangGraph đáng xem xét khi các nhánh, điểm dừng và trạng thái cần được đọc, thử và vận hành rõ. Một sơ đồ nhiều node không tự tốt hơn chương trình nhỏ nếu nó không giải quyết nhu cầu thật.
Repo này giải quyết bài toán gì?

Tình huống giả định: trợ lý kiểm tra một hồ sơ thiếu tham chiếu, tìm đơn ứng viên rồi chờ nhân viên duyệt. Bước tìm có thể xong ngay, còn bước duyệt đến sau vài giờ. Nếu tất cả nằm trong một phiên chat ngắn, bạn khó biết dữ liệu nào còn hiệu lực và ai đã đồng ý với gợi ý nào.
Biểu diễn luồng thành các bước giúp nêu rõ đầu vào và đầu ra: tiếp nhận hồ sơ, chuẩn hóa, tìm ứng viên, kiểm điều kiện, chờ duyệt và áp dụng. Nhánh không đủ dữ liệu có thể quay về yêu cầu bổ sung, còn nhánh không có ứng viên chuyển sang xử lý riêng. Tên bước cần mô tả kết quả, không chỉ tên công nghệ dùng bên trong.
Graph API cung cấp mô hình state, nodes và edges để tổ chức luồng. Trong thiết kế nghiệp vụ, nên giữ state nhỏ và có ý nghĩa: mã hồ sơ, dữ liệu nguồn, kết quả đề xuất, quyết định duyệt và trạng thái áp dụng. Không nên chỉ lưu một đoạn chat dài rồi yêu cầu model suy ra mọi quyết định từ đó.
Cũng cần phân biệt gợi ý với dữ liệu đã xác nhận. Một danh sách đơn ứng viên có thể thay đổi khi thông tin mới đến; khoản thu đã được phân bổ là sự kiện nghiệp vụ khác. Đặt hai loại vào trường riêng giúp người review biết phần nào có thể tính lại và phần nào phải điều chỉnh qua quy trình có lịch sử.
Cách cài đặt và chạy thử langchain-ai/langgraph
Đợt thử đầu nên dùng dữ liệu cố định và các bước không tạo tác động thật. Vẽ điều kiện chuyển trước rồi đối chiếu cách khai báo graph với tài liệu phiên bản đang dùng. Sơ đồ dưới là mô hình khái niệm cho một luồng thanh toán; nó không phải code Python hoặc contract của Pay2S.
START\n -> INGEST_BALANCE_EVENT\n -> NORMALIZE\n -> MATCH_ORDER\n -> HUMAN_APPROVAL_IF_UNCERTAIN\n -> UPDATE_ORDER\n -> AUDIT_AND_NOTIFY
Chạy một hồ sơ qua đường thành công, sau đó thêm trường hợp không tìm thấy và trường hợp cần duyệt. Quan sát state sau từng bước. Nếu một node nhận thiếu dữ liệu nhưng vẫn trả trạng thái hoàn tất, sửa contract nội bộ trước khi thêm model vào luồng.
Tài liệu persistence phân biệt checkpointer lưu state theo thread với store lưu dữ liệu ứng dụng qua nhiều thread. Bộ lưu trong RAM không giữ được dữ liệu sau restart. Vì vậy, phép thử phục hồi phải dùng đúng loại lưu trữ dự kiến, không suy từ việc nhớ trạng thái trong một tiến trình đang chạy.
Chủ động dừng tiến trình sau một bước, khởi động lại rồi tiếp tục với đúng định danh. Kiểm dữ liệu đã lưu, bước được chạy lại và đầu ra cuối. Sau đó thử định danh khác để chắc hai hồ sơ không dùng nhầm state. Đây là phép kiểm sự tách biệt, đặc biệt quan trọng khi nhiều người xử lý đồng thời.
Kiến trúc triển khai và điểm cần kiểm soát
Checkpoint là ảnh chụp trạng thái luồng, còn cơ sở dữ liệu nghiệp vụ là nơi lưu kết quả có hiệu lực của đơn hoặc khoản thu. Hai lớp có thể cập nhật ở thời điểm khác nhau. Thiết kế cần biết khi chúng không đồng bộ thì nguồn nào quyết định trạng thái và cách tiến trình tìm lại kết quả.
Ví dụ giả định: node gọi backend đánh dấu hồ sơ đã phân bổ, backend xử lý thành công nhưng phản hồi bị mất. Khi resume, nếu node gọi lại mà backend không có khóa thao tác, tác động có thể bị nhân đôi. Cách kiểm soát là backend nhận định danh ổn định, giữ kết quả và xử lý yêu cầu lặp theo quy tắc rõ.
Tài liệu interrupts mô tả điểm dừng chờ đầu vào ngoài và việc resume với cùng thread. Tài liệu cũng lưu ý node chứa interrupt có thể chạy lại từ đầu khi tiếp tục. Vì vậy, tác vụ có side effect đặt trước điểm dừng cần được xem xét rất kỹ, không giả định chỉ chạy một lần.
Quyết định duyệt cần gắn với phiên bản dữ liệu mà người duyệt đã xem. Nếu khoản thu đã được người khác phân bổ trong lúc chờ, một phê duyệt cũ không nên tự áp dụng. Trước tác động cuối, đọc lại điều kiện nghiệp vụ và chuyển sang xử lý xung đột nếu state nguồn thay đổi.
Với nhiều nhánh cùng cập nhật state, phải xác định cách hợp nhất từng trường. Hai kết quả ứng viên có thể cần gộp danh sách, còn hai quyết định áp dụng không nên được ghép tùy tiện. Bộ thử nên có nhánh chạy lệch thời gian để phát hiện phụ thuộc thứ tự mà lần chạy đơn giản không cho thấy.
Ưu điểm, giới hạn và cách đánh giá trước production
Ưu điểm là luồng có thể được diễn đạt rõ theo bước, trạng thái và điểm dừng. Đổi lại, nhóm phải quản lý schema state, nơi lưu checkpoint, phiên bản code và quy trình resume. Nếu không có nhu cầu phục hồi hoặc quan sát từng nhánh, phần hạ tầng thêm vào có thể lớn hơn lợi ích.
Khi cập nhật SDK hoặc mã graph, cần thử hồ sơ đang dở. Một state do phiên bản cũ tạo có thể thiếu trường mà code mới chờ. Nên có chiến lược cho hồ sơ đang chờ: hoàn tất bằng phiên bản cũ, chuyển đổi dữ liệu hoặc đưa về bước kiểm tra. Không chỉ chạy thử hồ sơ mới sau deploy.
Đo thời gian chờ theo từng nguyên nhân: model, nguồn dữ liệu, người duyệt hay lỗi hạ tầng. Tổng thời gian một luồng không nói rõ nơi cần cải thiện. Nếu phần lớn nằm ở hàng chờ duyệt, tối ưu prompt có thể không ảnh hưởng đáng kể; cần xem thông tin trình bày và trách nhiệm xử lý.
Retention của checkpoint cũng cần có chủ đích. Lưu mọi state vô hạn có thể giữ lại nhiều dữ liệu riêng và tăng công quản trị. Xác định phần cần cho khôi phục, phần cần cho audit và phần có thể xóa theo chính sách. Log nghiệp vụ cần thiết không nhất thiết phải là toàn bộ lịch sử suy luận của agent.
Trước production, thử lỗi ở nhiều vị trí: trước gọi tool, sau khi backend ghi, tại điểm chờ duyệt và lúc gửi thông báo. Với mỗi vị trí, ghi rõ cách tiếp tục cùng bằng chứng không tạo tác động lặp. Đây là kiểm tra tính chất của luồng, khác với việc graph chạy từ đầu đến cuối một lần.
Liên hệ với hoadontudong.com.vn và Pay2S

Trong hệ thống liên quan đến hoadontudong.com.vn, LangGraph có thể hỗ trợ luồng xử lý ngoại lệ do doanh nghiệp xây. Tầng tiếp nhận IPN Pay2S nên lưu và xác minh sự kiện trước, rồi mới kích hoạt công việc phía sau. Không cần đưa mọi giao dịch bình thường qua agent chỉ để sử dụng framework.
Sơ đồ dưới là cách phân lớp khái niệm. Nhánh AI có thể đề xuất hồ sơ cần xem; bộ quy tắc cùng người có thẩm quyền quyết định áp dụng. Việc dùng checkpoint không xác nhận khoản tiền là thật và không tự chống trùng tại backend. Các bảo đảm đó phải được thiết kế ở đúng nơi tạo tác động.
PAYMENT_EVENT_RECEIVED
-> VERIFY_AND_STORE
-> AI_CLASSIFY_OR_SUGGEST
-> BUSINESS_RULE_CHECK
-> APPROVE_OR_QUEUE
-> UPDATE_AND_AUDIT
Không lưu Access Key, Secret Key hoặc Bearer Token trong state để tiện resume. Những giá trị xác thực cần được quản lý ngoài dữ liệu luồng và cấp cho thành phần backend phù hợp. State nên giữ tham chiếu cần thiết, giúp tiến trình lấy lại dữ liệu được phép mà không nhân bản bí mật qua nhiều checkpoint.
Đối với luồng hóa đơn, có thể tách chuẩn bị dữ liệu, tạo nháp và bước phát hành theo điều kiện nghiệp vụ. Nếu phát hành đang chờ kết quả, resume phải tra lại trạng thái trước khi thực hiện tiếp. Luồng này là gợi ý thiết kế, không phải xác nhận có tích hợp LangGraph dựng sẵn của Pay2S.
Câu hỏi thường gặp về LangGraph là gì
LangGraph khác LangChain thế nào?
LangChain cung cấp các thành phần và cách dựng agent ở mức cao hơn; LangGraph tập trung điều phối state cùng bước thực thi. Có thể dùng chúng cùng nhau hoặc chọn theo nhu cầu. Bài tổng quan LangChain giúp xác định khi nào vòng tool đơn giản đã đủ.
Checkpoint có chống giao dịch trùng không?
Không tự động. Checkpoint giúp lưu vị trí và state của luồng; chống tác động lặp cần quy tắc ở hệ thống thực hiện ghi. Đặc biệt phải thử trường hợp backend đã xử lý nhưng phản hồi bị mất, vì tiến trình có thể không biết kết quả chỉ từ state cục bộ.
Human-in-the-loop dùng khi nào?
Khi cần người xác nhận dữ liệu chưa chắc chắn hoặc phê duyệt một tác động cụ thể. Màn hình duyệt nên hiển thị hồ sơ nguồn, thay đổi dự kiến và phiên bản dữ liệu. Sau duyệt, backend vẫn phải kiểm điều kiện hiện tại trước khi áp dụng.
LangGraph có hợp với biến động số dư không?
Có thể dùng cho nhánh xử lý nhiều bước hoặc ngoại lệ cần chờ, nếu doanh nghiệp có yêu cầu đó. Tiếp nhận biến động số dư thông thường vẫn cần một luồng backend rõ. Chỉ nên thêm agent khi có phần việc cần diễn giải hoặc lựa chọn mà quy tắc đơn giản chưa đáp ứng.
Kết luận
LangGraph đáng dùng khi trạng thái, điểm dừng và phục hồi cần trở thành phần có thể kiểm chứng của ứng dụng. Bài thử quyết định là một luồng bị ngắt giữa chừng rồi tiếp tục đúng, không tạo tác động lặp và không áp dụng quyết định trên dữ liệu đã cũ. Khi vượt qua phép thử đó, đồ thị mới có ý nghĩa vận hành.