TL;DR

  • Graph engineering mô hình hoá workflow agent thành node, edge, state và điều kiện chuyển trạng thái rõ ràng.

  • Trong post gốc trên X, Akshay Pachaar nêu ý rất gọn: một agent loop chỉ là graph một nút quay lại chính nó, còn graph thì điều phối nhiều bước và nhiều nhánh.

  • Loop phù hợp với task tuyến tính, graph phù hợp khi có branching, fan-out, join hoặc approval gate.

  • Đừng thêm graph chỉ vì nghe hay; nếu workflow còn đơn giản, loop thường rẻ hơn và dễ debug hơn.

Từ một câu đùa thành khung tư duy

Graph engineering lan nhanh vì nó mô tả đúng cảm giác khi agent bắt đầu có nhiều bước, nhiều tool và nhiều vai trò. Lúc đó, một vòng lặp đơn lẻ không còn đủ để diễn tả toàn bộ hành vi. Bạn cần một lớp điều phối cho đường đi của công việc.

Trong bài gốc, điểm ăn tiền là phép ví von rất dễ nhớ: một agent loop chỉ là graph có một nút và một cạnh quay lại chính nó. Nói cách khác, graph không thay loop; graph bao quanh và tổ chức loop.

A single agent loop chỉ là graph một nút quay lại chính nó. Graphs don't replace loops. They connect and govern them.

Đọc theo hướng kỹ thuật, câu này không phải chơi chữ. Nó nhắc rằng khi hệ thống lớn hơn một tác vụ đơn, thứ quan trọng không chỉ là model sẽ làm gì, mà là ai được chạy tiếp, ai phải chờ, và ai cần người duyệt.

Graph là control flow, không phải một framework mới

Loop hỏi: sau một vòng làm việc, có cần lặp tiếp không? Graph hỏi: sau bước này, node nào được phép chạy tiếp, node nào phải chờ, và node nào chỉ được đi khi có điều kiện phụ.

Ba khái niệm cốt lõi là:

  • Node: một đơn vị công việc như research, draft, review, publish.

  • Edge: đường đi hợp lệ giữa các node, có thể kèm điều kiện.

  • State: dữ liệu được chuyền xuyên suốt graph để bước sau biết mình đang ở đâu.

Khi có state và edge, bạn có thể mô tả những thứ loop đơn thuần khó biểu diễn gọn: fan-out song song rồi join lại, rẽ nhánh theo kết quả kiểm tra, quay lại bước trước khi thiếu bằng chứng, hoặc dừng để human-in-the-loop duyệt một hành động rủi ro.

Đó là lý do LangGraph và AutoGen GraphFlow tồn tại. Chúng không thay model; chúng làm cho luồng thực thi rõ ràng hơn. LangGraph nhấn mạnh durable state, persistence và human-in-the-loop cho workflow dài. AutoGen GraphFlow tập trung vào thứ tự hành động chặt, conditional branching, fan-out song song và cycle có exit condition an toàn.

Loop vs graph khác nhau ở đâu trong thực tế?

Nếu task là đọc dữ liệu, tạo phản hồi, kiểm tra lại một lần rồi trả kết quả, một loop rõ ràng thường là đủ. Nhưng nếu task có nhiều pha khác nhau như research, viết nháp, fact-check, legal review, rồi xuất bản, graph giúp bạn đặt từng pha vào đúng chỗ và ghi rõ điều kiện chuyển tiếp.

Khác biệt này ảnh hưởng trực tiếp đến độ dễ debug, chi phí retry và khả năng khôi phục sau lỗi. Loop hỏng thường chỉ có một chỗ để soi. Graph hỏng có thể hỏng ở routing, state, join, checkpoint hoặc policy. Điều đó làm graph mạnh hơn, nhưng cũng đòi hỏi kỷ luật cao hơn.

Khi nào nên nâng từ loop lên graph?

Anthropic khuyến nghị bắt đầu đơn giản và chỉ thêm độ phức tạp khi nó cải thiện rõ ràng kết quả. Tinh thần đó rất hợp với graph engineering: đừng vẽ sơ đồ nhiều node chỉ vì nó trông chuyên nghiệp hơn.

  • Có nhiều nhánh rẽ thật sự: kết quả bước A quyết định bước B hay C, không chỉ là retry.

  • Có fan-out song song: nhiều agent hoặc nhiều bước độc lập có thể chạy cùng lúc.

  • Có approval gate: một số hành động cần người duyệt trước khi đi tiếp.

  • Có state dùng chung: node sau cần biết node trước đã làm gì, kiểm tra gì hoặc từ chối gì.

  • Cần durability: workflow phải sống qua restart, checkpoint hoặc phiên làm việc dài.

Ngược lại, nếu workflow còn ngắn và ổn định, hãy giữ nó là loop. Một kiến trúc nhỏ nhưng rõ ràng dễ duy trì hơn một graph đẹp trên giấy nhưng rỗng trong vận hành.

Những sai lầm thường gặp

  • Coi graph là upgrade mặc định: nếu chưa cần branching hay coordination, graph chỉ làm hệ thống nặng hơn.

  • Không có exit condition rõ ràng: cycle mà không có điều kiện thoát sẽ biến thành máy đốt chi phí.

  • State phình to: nhiều node cùng ghi vào một trạng thái chung mà không có schema rõ ràng sẽ biến graph thành nơi cãi nhau giữa các bước.

  • Quên lớp harness: theo LangChain, agent là model cộng với toàn bộ code, config và execution logic bao quanh nó; graph không thể cứu một harness cẩu thả.

Nói thẳng: graph là lớp điều phối, không phải lớp phép màu. Nếu nền móng yếu, thêm sơ đồ chỉ làm lỗi khó thấy hơn.

Kết luận: graph là bản đồ, loop là động cơ

Thông điệp hay nhất từ bài gốc trên X không phải là loop đã lỗi thời. Nó là: khi agent lớn dần, chúng ta cần một ngôn ngữ để mô tả quan hệ giữa các bước, không chỉ hành vi của từng bước riêng lẻ.

Loop là động cơ cho một tác vụ cục bộ. Graph là bản đồ điều phối nhiều động cơ, nhiều nhánh rẽ và nhiều điểm dừng an toàn. Khi chưa cần bản đồ, đừng vẽ bản đồ. Khi đã cần bản đồ, đừng cố giải quyết bằng một vòng lặp duy nhất.

Nếu bạn đang thiết kế agent hôm nay, quy tắc thực dụng nhất vẫn là: bắt đầu đơn giản, đo bằng chứng thật, rồi chỉ thêm graph khi workflow đã vượt ngưỡng mà loop đơn thuần không còn đủ.

Tài liệu chính thức của LangChain, OpenAI Agents SDK, Anthropic, và AutoGen GraphFlow.