Skip to content

Stateful Agents: Cloudflare Agents SDK

Hạt nhân điều hành hành vi và ghi nhớ thông tin của người học trong hệ thống Hanoi AgentsCloudflare Agents SDK.


1. Why Use Cloudflare Agents SDK?

Thay vì gọi API LLM một cách không trạng thái (stateless) qua các API endpoint Worker thông thường, Agents SDK cung cấp một môi trường chạy Stateful Agent (Agent có trạng thái bền vững):

  • Bộ nhớ dài hạn (State & Memory): Trạng thái năng lực và lịch sử của người học được lưu trữ bền vững và duy trì nhất quán.
  • Tương tác thời gian thực (WebSockets): Cho phép duy trì kết nối persistent socket giữa frontend app và thực thể Agent để đồng bộ hóa giao diện tức thì.
  • Tự động lên lịch (Scheduling): Mỗi Agent có thể tự đặt lịch nhắc nhở (cron/timer) cục bộ để tự động kiểm tra xem học viên có đang bị kẹt bài tập hay không.
  • Durable Objects base: Mỗi Agent hoạt động trên một Durable Object, đảm bảo tính duy nhất toàn cầu (single-constructor coordinator) và tránh tranh chấp dữ liệu (concurrency conflict).

2. Entity Model: LearnerAgent

Mỗi học viên đăng ký vào hệ thống sẽ được cấp một thực thể Agent duy nhất tương ứng:

yaml
agent:learner_001
agent:learner_002
agent:learner_003

Mỗi LearnerAgent đóng vai trò là một "bộ não nhỏ" của học viên đó, sở hữu các thuộc tính:

  • State: Trạng thái hiện tại trong máy trạng thái (State Machine) như TASK_IN_PROGRESS, BLOCKED, EVALUATING.
  • Memory: Lịch sử học tập, phản hồi của Mentor, các lỗi sai cũ.
  • Current goal: Mục tiêu học tập ngắn hạn và dài hạn hiện tại của học viên.
  • Task history: Danh sách các nhiệm vụ đã thực hành, điểm số và trạng thái đạt/chưa đạt.
  • Confidence estimate: Mức độ tin cậy của AI đối với năng lực ước lượng của học viên.
  • Misconceptions: Các hiểu lầm tư duy đang tồn tại và lịch sử sửa sai.
  • Scheduled jobs: Hàng đợi các tác vụ tự động kích hoạt (nhắc nhở, rà soát tiến độ).

3. Role of LearnerAgent in the System

                    +--------------------+
                    |    LearnerAgent    |
                    +---------+----------+
                              |
       ┌──────────────────────┼──────────────────────┐
       ▼                      ▼                      ▼
[Đọc Năng lực]         [Phát hiện Block]      [Chọn Task tiếp]
Đọc Competency State   Kiểm tra sự trì hoãn   Tính marginal impact
để xem gap hiện tại    và tự gửi reminder     để giao bài tập tối ưu

LearnerAgent không trực tiếp thực hiện các tác vụ biên dịch code hay chấm điểm nặng nề. Nhiệm vụ chính của nó là Giám sát trạng thái, đưa ra quyết định sư phạm và điều phối các Workflow tương ứng.


4. Stateful vs. Stateless Architecture Comparison

Để làm rõ sự khác biệt giữa cách tiếp cận truyền thống (Stateless) và cách tiếp cận dựa trên Agent của hệ thống Hanoi Agents (Stateful), chúng ta hãy cùng phân tích bảng so sánh chi tiết dưới đây:

CriteriaStatelessStateful
Bản chất hoạt độngMỗi HTTP request được xử lý độc lập. Máy chủ không lưu giữ bất kỳ thông tin nào của request trước đó sau khi đã trả về kết quả (Response).Agent được duy trì hoạt động liên tục trong bộ nhớ (Durable Object), lưu giữ context và state của người học xuyên suốt các tương tác.
Quản lý ngữ cảnh (Context)Mỗi lần học viên chat hoặc gửi sự kiện, backend phải thực hiện truy vấn cơ sở dữ liệu để lấy lịch sử, ghép lại thành Prompt rồi gửi lên LLM.Agent nắm giữ sẵn Summary State và Memory trong RAM. Khi có sự kiện mới, Agent chỉ cần suy luận ngay mà không cần đọc lại toàn bộ DB.
Kết nối thời gian thựcSử dụng cơ chế Polling (truy vấn lặp lại) hoặc kết nối qua Gateway trung gian phức tạp để đồng bộ dữ liệu lên màn hình học viên.Kết nối WebSocket trực tiếp đến Agent. Bất kỳ sự thay đổi trạng thái nào của Agent đều được đẩy (Push) tức thì về Frontend.
Độ trễ & Hiệu năngĐộ trễ cao hơn do mất thời gian truy vấn I/O cơ sở dữ liệu và dựng lại ngữ cảnh (context reconstitution) trên mỗi request.Độ trễ cực thấp vì dữ liệu trạng thái nóng (Hot State) luôn thường trực trong bộ nhớ và SQLite cục bộ của Durable Object.
Hẹn giờ xử lý (Scheduling)Phải sử dụng các dịch vụ Cron Jobs bên ngoài để quét định kỳ toàn bộ cơ sở dữ liệu tìm những học viên không hoạt động.Agent tự lên lịch hẹn giờ (cục bộ) cho riêng mình. Khi đến giờ hẹn, Agent tự động thức dậy, kiểm tra trạng thái và gửi reminder.
Khả năng tự quyết (Autonomy)Bị giới hạn trong các phản hồi kiểu Request-Response. Khó có khả năng tự động thực hiện hành động khi không có yêu cầu từ Client.Có tính chủ động (Proactive). Agent tự quan sát hành vi trì hoãn của học viên và tự quyết định kích hoạt các quy trình can thiệp.

So sánh luồng xử lý thực tế qua các ví dụ:

Ví dụ 1: Giao tiếp gửi bài làm và chấm bài (API Integration Flow)

  • Luồng xử lý Không trạng thái (Stateless): Học viên gửi bàiWorker nhậnTruy vấn D1 để lấy Lịch sửGọi API LLMGhi kết quả vào D1Trả về HTTP Response
  • Luồng xử lý Có trạng thái (Stateful): Học viên gửi bàiLearnerAgent nhận trực tiếp qua WebSocketKích hoạt Workflow chấm bài chạy nềnGửi tức thì trạng thái 'EVALUATING' về Client qua WebSocket (Học viên nhìn thấy màn hình xoay chấm bài ngay lập tức mà không cần tải lại trang).

Ví dụ 2: Đồng bộ hóa trạng thái giao diện thời gian thực (Real-time Live Sync)

  • Luồng xử lý Không trạng thái (Stateless): Trình duyệt gửi API Request kiểm tra trạng thái mỗi 3 giây (Polling)Worker truy vấn bảng databaseTrả về chưa hoàn thànhLặp lại liên tục gây quá tải cơ sở dữ liệu
  • Luồng xử lý Có trạng thái (Stateful): Client kết nối 1 kết nối WebSocket duy nhấtWorkflow chạy xong ghi kết quả vào LearnerAgentLearnerAgent tự động đẩy (Push) dữ liệu qua WebSocket hiện cóGiao diện cập nhật tức thì

Ví dụ 3: Lập lịch phát hiện học viên bị kẹt (Scheduled Stuck Detection)

  • Luồng xử lý Không trạng thái (Stateless): Hệ thống Cron Job tổng quét toàn bộ cơ sở dữ liệu 100.000 học sinh mỗi 1 giờTruy vấn tìm kiếm những ai không có hoạt động trong 2 ngày quaXử lý chậm chạp và tốn tài nguyên
  • Luồng xử lý Có trạng thái (Stateful): Mỗi học viên có 1 LearnerAgent riêng biệtKhi giao bài, Agent tự đặt một bộ đếm giờ (Local Timer) cho riêng mìnhNếu học viên không nộp bài đúng hạn, Timer kích hoạtAgent tự động gửi tin nhắn nhắc nhở riêng cho học viên đó (Xử lý phân tán, không cần quét toàn bộ database).

Tài liệu được phân phối nội bộ phục vụ AI Hackathon.