Khi Agent Của Bạn Crash Ở Bước 87

Hãy tưởng tượng bạn vừa triển khai một workflow AI agent phức tạp: phân tích báo cáo tài chính, tổng hợp dữ liệu từ 12 nguồn khác nhau, tạo ra dự báo, sau đó gửi report cho stakeholders. Workflow có 100 bước. Bạn chạy nó qua đêm.

Sáng hôm sau, bạn check logs và thấy nó crash ở bước 87.

Câu hỏi đầu tiên không phải “tại sao nó crash?” — mà là “bây giờ tôi phải làm gì?” Restart từ đầu? Mất 86 bước đã chạy xong, tốn thêm 3-4 giờ compute và chi phí API. Cố gắng resume từ bước 87? Với hầu hết các implementation hiện tại, điều đó không thể làm được.

Đây là vấn đề cốt lõi mà durable execution giải quyết — và đây là lý do tôi quan tâm đến nó như một kỹ sư đã xây dựng production AI workflows trong 2 năm qua.

Tại Sao Production AI Agents Không Thể Chỉ “Retry”

Trong thế giới của API đơn giản, retry logic là đủ. Request thất bại? Thử lại. Nhưng agentic workflows hoạt động khác hoàn toàn.

Một AI agent không chỉ gọi một API — nó là một chuỗi quyết định có trạng thái. Ở bước 50, agent đã đọc xong 30 files, đã query 5 databases, đã call 8 external APIs, và đã build up một context window đầy ắp intermediate reasoning. Khi bạn restart từ đầu, tất cả context đó biến mất. Agent không nhớ những gì nó đã “học” được trong 86 bước trước.

Hơn nữa, nhiều bước trong agentic workflows không phải là idempotent. Gửi email thông báo ở bước 40? Nếu bạn restart, nó sẽ gửi lại. Tạo ticket trong Jira? Bạn sẽ có duplicate. Ghi data vào database? Race conditions và inconsistencies.

Đây là sự khác biệt căn bản giữa toy demosproduction systems: production không chấp nhận “chỉ chạy lại là xong.”

Ba Pattern Cốt Lõi: Checkpointing, Replay, và Signed History

Durable execution không phải là một tính năng đơn lẻ — nó là sự kết hợp của ba pattern bổ sung cho nhau.

Checkpointing là việc lưu trạng thái execution sau mỗi bước có ý nghĩa. Không phải sau mỗi token generation, mà sau mỗi bước logic — mỗi tool call, mỗi external API call, mỗi state transition quan trọng. Checkpoint cần bao gồm: kết quả của bước đó, inputs đã dùng, và đủ context để resume từ đúng điểm đó.

Replay là khả năng tua nhanh qua execution history khi cần resume. Khi agent crash ở bước 87 và bạn restart, hệ thống không re-execute các bước 1-86 — nó replay lại kết quả đã được checkpoint. Agent nhận lại đúng output của từng bước như thể chúng vừa chạy xong. Insight chính: replay ≠ re-execute.

Signed Execution History là lớp bảo mật và integrity. Mỗi step trong history được sign bằng cryptographic signature, đảm bảo rằng history không bị tamper, replay đúng là những gì đã xảy ra, và bạn có audit trail hoàn chỉnh cho compliance và debugging.

Diagrid Catalyst 2.0 triển khai cả ba pattern này thông qua Dapr workflow engine. Điều thú vị là cách nó intercept agent runner lifecycle: thay vì để LangGraph, OpenAI Agents SDK, hay Microsoft Agent Framework quản lý execution trực tiếp, Catalyst wrap lifecycle đó và register mỗi step như một Dapr workflow activity. Kết quả: durable execution mà không cần thay đổi agent logic.

Non-Durable vs. Durable: Sự Khác Biệt Thực Tế

Hãy xem một ví dụ cụ thể — một simplified financial analysis agent:

# NON-DURABLE: Stateless execution — restart từ đầu khi fail
class FinancialAnalysisAgent:
    def run(self, company_ticker: str):
        market_data = self.fetch_market_data(company_ticker)   # 45 giây
        financials = self.fetch_financials(company_ticker)     # 30 giây
        competitors = self.analyze_competitors(company_ticker) # 2 phút
        # ... 97 bước nữa ...
        return self.generate_report(market_data, financials, competitors)

    # Crash ở bước 87 → TOÀN BỘ phải restart từ bước 1
    # Chi phí: 3+ giờ compute, hàng trăm API calls, hàng nghìn tokens
# DURABLE: Mỗi step là workflow activity với checkpoint
from dapr.ext.workflow import WorkflowActivityContext

class DurableFinancialAnalysisAgent:

    @workflow_activity  # Catalyst intercept ở đây
    def fetch_market_data(self, ctx: WorkflowActivityContext, ticker: str):
        # Catalyst tự động checkpoint kết quả
        # Khi replay, function này KHÔNG được re-execute — kết quả lấy từ checkpoint
        return self._fetch_from_api(ticker)

    @workflow_activity
    def fetch_financials(self, ctx: WorkflowActivityContext, ticker: str):
        return self._fetch_financials_api(ticker)

    def run(self, company_ticker: str):
        # Dapr workflow orchestrate các activities
        # Crash ở bước 87 → bước 1-86 replay từ signed history
        # Chỉ bước 87+ cần re-execute
        market_data = yield self.fetch_market_data(company_ticker)
        financials = yield self.fetch_financials(company_ticker)
        competitors = yield self.analyze_competitors(company_ticker)
        return yield self.generate_report(market_data, financials, competitors)

Sự khác biệt không chỉ là code structure — nó là toàn bộ failure recovery model. Với non-durable agent, một network hiccup ở bước 87 = 86 bước wasted. Với durable agent, cùng failure đó = resume từ bước 87, mất vài giây.

Diagrid Catalyst 2.0 làm điều này transparent với LangGraph, OpenAI Agents SDK, và các framework khác bằng cách intercept ở level của agent runner — không phải ở level application code. Bạn không cần rewrite agent logic; framework tự động wrap các tool calls và LLM calls thành workflow activities.

Trade-offs Thực Tế: Khi Nào Overhead Xứng Đáng

Tôi muốn thẳng thắn: durable execution không phải silver bullet, và nó có chi phí thực sự.

Checkpointing overhead: Mỗi step cần serialize state và write vào durable storage. Với fast, simple agents chạy trong vài giây, overhead này có thể chiếm đáng kể phần trăm runtime. Nếu agent của bạn chạy 10 steps trong 5 giây, cost của checkpointing có thể vượt qua benefit.

Replay logic complexity: Signed execution history yêu cầu deterministic replay. Nếu steps của bạn có non-deterministic side effects (random seeds, timestamps, external state), replay có thể produce kết quả khác nhau — và hệ thống cần handle điều đó. LLM calls đặc biệt phức tạp vì temperature và sampling tạo ra non-determinism.

Storage và retention: Mỗi workflow instance cần persistent storage cho history. Với high-volume agents, đây là infrastructure cost đáng kể.

Debugging complexity: Khi agent behavior xuất phát từ replayed history thay vì fresh execution, debugging traces trở nên phức tạp hơn. Bạn cần tooling tốt để phân biệt “bước này chạy fresh” vs “bước này được replayed.”

Decision Checklist cho Tech Leads

Sau khi build nhiều production agent systems, đây là checklist tôi dùng:

Bạn CẦN durable execution nếu:

  • Workflow chạy lâu hơn 5 phút: Bất kỳ thứ gì chạy đủ lâu đều có nguy cơ cao bị interrupt bởi infrastructure issues, timeouts, hay deploys.
  • Có non-idempotent side effects: Gửi emails, tạo tickets, charge payments, ghi database records — những thứ bạn không muốn duplicate nếu retry.
  • Chi phí re-execution cao: Nếu restart từ đầu tốn nhiều hơn $1 về API costs hoặc nhiều hơn 30 giây compute, overhead của durable execution thường xứng đáng.
  • Compliance yêu cầu audit trail: Signed execution history không chỉ là resilience — nó là evidence cho auditors.
  • Fan-out với nhiều parallel steps: Khi agent chạy 10 parallel research tasks và một cái fail, bạn muốn chỉ retry cái đó, không phải tất cả 10.
  • User-facing workflows với SLA: Nếu user đang đợi kết quả và bạn có SLA, “xin lỗi, bị crash, chạy lại đi” không phải acceptable answer.

Bạn CÓ THỂ bỏ qua durable execution nếu:

  • Agent chạy dưới 30 giây: Fast agents hiếm khi bị interrupt và overhead không xứng đáng.
  • Pure read-only operations: Nếu agent chỉ đọc data và không có side effects, simple retry là đủ.
  • Idempotent workflows: Nếu mọi step đều safe để re-execute, built-in retry logic của framework đủ dùng.
  • Low-cost, high-frequency operations: Chatbots, simple Q&A, real-time classification — latency quan trọng hơn resilience ở đây.
  • Development và experimentation: Trong giai đoạn prototype, simplicity thường quan trọng hơn durability.

Nhìn Về Phía Trước

Diagrid Catalyst 2.0 là implementation đầu tiên tôi thấy thực sự giải quyết durable execution cho AI agents một cách transparent — không yêu cầu rewrite agent logic, support multiple frameworks, và leverage Dapr workflow engine đã được battle-tested.

Nhưng điều quan trọng hơn là pattern này. Khi AI agents ngày càng được dùng cho critical business workflows — không phải demos, mà production systems có SLA và compliance requirements — durable execution sẽ trở thành expectation, không phải nice-to-have.

Nếu bạn đang build long-running AI workflows hôm nay và chưa nghĩ về failure recovery, hãy nhìn lại checklist ở trên. Câu hỏi không phải là “liệu agent của tôi có crash không?” — mà là “khi nó crash, tôi muốn điều gì xảy ra?”

Với production systems, câu trả lời luôn luôn là: resume từ chỗ dừng, không phải restart từ đầu.


Thuận Lương là một Technical Lead với 15+ năm kinh nghiệm trong .NET, cloud architecture, và AI systems. Anh viết về những gì anh học được khi build production systems thực sự.

Xuất nội dung

Bình luận