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 Agents là Cloudflare 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:
agent:learner_001
agent:learner_002
agent:learner_003Mỗ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 ưuLearnerAgent 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:
| Criteria | Stateless | Stateful |
|---|---|---|
| Bản chất hoạt động | Mỗ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ực | Sử 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ài➔Worker nhận➔Truy vấn D1 để lấy Lịch sử➔Gọi API LLM➔Ghi kết quả vào D1➔Trả về HTTP Response - Luồng xử lý Có trạng thái (Stateful):
Học viên gửi bài➔LearnerAgent nhận trực tiếp qua WebSocket➔Kích hoạt Workflow chấm bài chạy nền➔Gử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 database➔Trả về chưa hoàn thành➔Lặ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ất➔Workflow chạy xong ghi kết quả vào LearnerAgent➔LearnerAgent 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 qua➔Xử 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ệt➔Khi giao bài, Agent tự đặt một bộ đếm giờ (Local Timer) cho riêng mình➔Nếu học viên không nộp bài đúng hạn, Timer kích hoạt➔Agent 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).