Durable Workflows: Cloudflare Workflows
Trong kiến trúc của Hanoi Agents, các quy trình nghiệp vụ phức tạp, tốn thời gian và gồm nhiều bước được tách biệt hoàn toàn khỏi thực thể Agent và chạy trên Cloudflare Workflows.
1. Why Cloudflare Workflows?
Mặc dù AI Agent rất mạnh về việc suy luận và ra quyết định ngắn hạn, nhưng nó không phù hợp để thực thi trực tiếp các quy trình dài kỳ (durable execution). Cloudflare Workflows giải quyết các bài toán:
- Bảo toàn trạng thái giữa các bước: Nếu quy trình chấm điểm bị gián đoạn ở bước 3 (gọi API LLM bị timeout), Workflow có thể khôi phục và chạy tiếp từ bước 3 mà không cần chạy lại bước 1 và 2.
- Tự động thử lại (Automatic Retry): Cấu hình chính sách tự động thử lại khi gặp lỗi kết nối mạng hoặc lỗi dịch vụ bên thứ ba.
- Hỗ trợ chạy song song: Chạy nhiều tác vụ kiểm thử hoặc phân tích cùng một lúc và gom kết quả ở bước sau.
- Tiết kiệm tài nguyên: Workflow chạy bất đồng bộ trong nền, giúp Learner Agent giải phóng bộ nhớ để phục vụ các kết nối WebSocket thời gian thực của người dùng.
2. Evaluation Workflow: EvaluateSubmissionWorkflow
Dưới đây là cấu trúc lập trình (Pseudo-code) của quy trình đánh giá bài nộp của học viên sử dụng Cloudflare Workflows:
typescript
import { WorkflowEntrypoint } from "cloudflare:workers";
export class EvaluateSubmissionWorkflow extends WorkflowEntrypoint {
async run(event, step) {
// Bước 1: Tải dữ liệu bài nộp từ Database/R2
const submission = await step.do(
"load-submission",
() => loadSubmission(event.submissionId)
);
// Bước 2: Chạy các verifier scripts để kiểm tra lỗi cú pháp/mã nguồn tĩnh
const codeAnalysis = await step.do(
"static-code-analysis",
() => analyzeCode(submission.codeUrl)
);
// Bước 3: Sử dụng AI Grader để chấm điểm tự luận & trích xuất bằng chứng
const evaluation = await step.do(
"ai-grading-rubric",
() => callAIGrader(submission.content, event.rubricId)
);
// Bước 4: Chuyển dữ liệu chấm điểm thô sang quy trình xử lý bằng chứng (Evidence)
const scores = await step.do(
"evidence-processing",
() => processEvidence(evaluation, codeAnalysis)
);
// Bước 5: Cập nhật thông tin năng lực mới vào cơ sở dữ liệu D1
await step.do(
"update-competency-profile",
() => updateProfileInDatabase(event.learnerId, scores)
);
// Bước 6: Thông báo kết quả về cho Learner Agent qua Agents SDK
await step.do(
"notify-agent",
() => notifyLearnerAgent(event.learnerId, {
status: "EVALUATION_COMPLETED",
submissionId: event.submissionId,
result: scores.passed ? "PASS" : "REVISE"
})
);
}
}3. Interaction Between Agent and Workflow
Learner Agent (Stateful DO)
│
├─(1. Nhận bài làm)─> Ghi state = EVALUATING
├─(2. Kích hoạt)────> Khởi chạy Cloudflare Workflows
│
│ Cloudflare Workflows (Durable Execution)
│ │
│ ├─> Chấm điểm tự luận qua AI Grader
│ ├─> Trích xuất bằng chứng
│ └─> Cập nhật D1 Database
│
├─(3. Nhận phản hồi)<── Đồng bộ kết quả hoàn thành
▼
Cập nhật Competency Score & Đổi state sang READY