Mở đầu: 12 bài rời rạc, giờ ghép lại thành 1 hệ thống

Hành trình series bắt đầu ở Bài 1 với câu hỏi "một AI product ra đời thế nào", đi qua Track A (dữ liệu, huấn luyện, alignment, red-team, vận hành), Track C (tool, memory, ReAct), và Track B (multi-agent, blackboard, deadlock). Bài capstone này không giới thiệu khái niệm mới — nó chứng minh rằng mọi thứ đã học GHÉP ĐƯỢC VỚI NHAU thành một hệ thống thật: một AI Ops Center nơi 1 agent tự động giám sát pipeline và tự ra quyết định vận hành, không cần con người bấm nút.

Toàn bộ demo bên dưới KHÔNG viết code mới từ đầu — nó import trực tiếp computeCanaryMetrics từ aisys-fleet-dashboard.js (Bài 6) và Blackboard từ aisys-orchestrator.js (Bài 11), rồi nối chúng bằng mẫu hình ReAct (Bài 9).


📚 Điều kiện tiên quyết
Bài này tham chiếu ngược toàn bộ series — nên đã đọc ít nhất Bài 6, Bài 9, và Bài 11 để hiểu rõ từng mảnh ghép trước khi xem chúng vận hành cùng nhau.

1. Kiến Trúc Tổng Thể — Ghép 3 Track Thành 1 Hệ Thống

AI Ops Center gồm đúng 3 mảnh ghép, mỗi mảnh đến từ 1 track:

  • Track A (Pipeline): hàm computeCanaryMetrics(step, buggy) từ Bài 6 — mô phỏng metric thật của 1 phiên bản model đang chạy canary.
  • Track C (Framework Agent): mẫu hình ReAct (Thought → Action → Observation) từ Bài 9 — nhưng lần này "Action" không phải gọi tool tính toán, mà là gọi rollback() thật lên hệ thống.
  • Track B (Orchestration): Blackboard từ Bài 11 — nơi agent ghi lại system_statusincident_report, để bất kỳ agent/con người nào khác cũng đọc được tình trạng hệ thống mà không cần hỏi trực tiếp OpsAgent.
ops-center-architecture.js
import { computeCanaryMetrics, ERROR_THRESHOLD_PCT } from "./aisys-fleet-dashboard.js"; // Track A
import { Blackboard } from "./aisys-orchestrator.js";                                    // Track B

// Track C: vòng lặp ReAct áp dụng vào VẬN HÀNH thay vì trả lời câu hỏi
function opsAgentTick(step, buggy, blackboard) {
  const canary = computeCanaryMetrics(step, buggy);            // Thought: quan sát metric
  if (canary.errorRatePct > ERROR_THRESHOLD_PCT) {              // Quyết định
    blackboard.write("OpsAgent", "system_status", "rolled_back"); // Action + ghi log chung
    return "rollback";
  }
  blackboard.write("OpsAgent", "system_status", "healthy");
  return "monitor";
}

2. Agent Giám Sát Tự Động — ReAct Áp Dụng Vào Vận Hành

Điểm khác biệt so với Bài 9: ở đó, ReAct loop dừng lại sau khi trả lời XONG 1 câu hỏi. Ở đây, OpsAgent chạy một vòng LIÊN TỤC (mỗi "tick" tương ứng một chu kỳ giám sát thật, ví dụ mỗi 1 phút trong production) — nó không có "câu hỏi" để trả lời, chỉ có nhiệm vụ giám sát và tự quyết định. Đây chính là điểm khác nhau cốt lõi giữa 1 agent trả lời hội thoại và 1 agent vận hành hạ tầng (ops agent).

💡 Mẹo: Agent tự động vẫn cần "giới hạn số bước" như Bài 9
Dù chạy liên tục, OpsAgent vẫn phải có điều kiện dừng rõ ràng cho MỖI quyết định (đã rollback rồi thì không rollback thêm lần nữa trong cùng sự cố) — áp dụng đúng nguyên tắc "giới hạn bước tránh lặp vô hạn" đã học ở Bài 9 mục 4, chỉ khác là áp dụng cho MỖI sự cố thay vì mỗi câu hỏi.
ops-agent-tick-loop.js
function opsAgentTick(step, buggy, blackboard, alreadyRolledBack) {
  if (alreadyRolledBack) return "idle"; // đã xử lý sự cố này rồi — không lặp lại hành động

  const canary = computeCanaryMetrics(step, buggy);       // Thought: quan sát
  blackboard.write("OpsAgent", "last_check", { step, errorRatePct: canary.errorRatePct });

  if (canary.errorRatePct > ERROR_THRESHOLD_PCT) {         // Quyết định
    blackboard.write("OpsAgent", "system_status", "rolled_back"); // Action
    return "rollback";
  }
  blackboard.write("OpsAgent", "system_status", "healthy"); // Observation ngầm
  return "monitor";
}

3. Blackboard Ghi Lại Toàn Bộ Quyết Định

Mọi quyết định của OpsAgent được ghi vào blackboard chung — không "giấu" trong biến nội bộ của riêng OpsAgent. Điều này quan trọng vì trong hệ thống thật, nhiều bên khác (dashboard cho con người, hệ thống cảnh báo Slack/PagerDuty, agent khác chịu trách nhiệm điều tra nguyên nhân gốc rễ) đều cần đọc được system_status mà không cần hỏi trực tiếp OpsAgent — đúng tinh thần blackboard đã học ở Bài 11.

notifier-agent-reads-status.js
// Một agent HOÀN TOÀN KHÁC (ví dụ NotifierAgent gửi cảnh báo Slack) có thể đọc
// trạng thái mà không cần biết OpsAgent tồn tại — chỉ cần biết đúng tên key:
function notifierAgentTick(blackboard) {
  const status = blackboard.read("system_status");
  if (status === "rolled_back") {
    const report = blackboard.read("incident_report");
    return `🔔 Cảnh báo team: ${report}`;
  }
  return null; // im lặng khi hệ thống khoẻ mạnh
}
🕳️ Cạm bẫy: Quyết định tự động mà không ghi log = hộp đen nguy hiểm
Nếu OpsAgent tự động rollback nhưng KHÔNG ghi lại lý do (như incident_report trong demo), đội vận hành con người sẽ không biết TẠI SAO hệ thống đột nhiên rollback lúc 3 giờ sáng — một agent tự động càng có nhiều quyền hành động, càng cần minh bạch tuyệt đối về LÝ DO ra quyết định. Đây là nguyên tắc sống còn khi trao quyền tự động hoá cho AI trong hạ tầng thật.

4. Thực hành tương tác: AI Ops Center Dashboard

Bật "Có lỗi tiềm ẩn" rồi bấm "Bước tiếp theo" nhiều lần — quan sát OpsAgent tự phát hiện regression và tự rollback KHÔNG cần bạn bấm nút rollback (khác hẳn Bài 6, nơi con người phải tự bấm), đồng thời theo dõi blackboard cập nhật theo thời gian thực:

🏢 AI Ops Center Dashboard
Blackboard (trạng thái chung mọi agent có thể đọc)

                
aisys-ops-center-lab.js (trích)
import { STABLE_METRICS, ERROR_THRESHOLD_PCT, computeCanaryMetrics } from "./aisys-fleet-dashboard.js";
import { Blackboard } from "./aisys-orchestrator.js";

const bb = new Blackboard();
if (canary.errorRatePct > ERROR_THRESHOLD_PCT) {
  rolledBack = true;
  bb.write("OpsAgent", "system_status", "rolled_back");
  bb.write("OpsAgent", "incident_report", `Regression phát hiện ở bước ${step}...`);
}

5. Giới Hạn Của Mô Phỏng

Trung thực về những gì demo này KHÔNG thể hiện được, so với vận hành AI production thật:

  • Quy mô: production thật giám sát hàng nghìn metric trên hàng chục region, không phải 1 con số error rate duy nhất.
  • Chi phí thật: mỗi lần OpsAgent "kiểm tra" trong đời thực có thể là một lệnh gọi model thật (tốn tiền), không miễn phí như hàm JS tất định ở đây.
  • Rủi ro pháp lý/an toàn: một agent tự động rollback hạ tầng thật cần được kiểm soát chặt (quyền hạn, giới hạn phạm vi hành động, human-in-the-loop cho quyết định rủi ro cao) — điều mà mô phỏng đồ chơi này bỏ qua hoàn toàn để tập trung vào CƠ CHẾ.
  • Đa dạng sự cố: demo chỉ mô phỏng 1 loại sự cố (tỷ lệ lỗi tăng) — thực tế có vô số kiểu regression khác (drift chất lượng tinh vi, thiên lệch mới xuất hiện, chi phí tăng đột biến) khó phát hiện bằng 1 ngưỡng số đơn giản.
🔬 Đào sâu: Vì sao "mô phỏng đơn giản hoá" vẫn có giá trị dạy học
Xuyên suốt cả 13 bài, series này chọn mô phỏng CƠ CHẾ thật (dedup, all-reduce, reward model, sandbox, ReAct, blackboard, deadlock...) bằng code tất định thay vì gọi API AI thật — điều này giúp bạn nhìn thấy CHÍNH XÁC logic bên trong (không bị che bởi độ trễ mạng, chi phí API, hay tính không tất định của model thật), điều kiện tiên quyết để sau này áp dụng đúng các nguyên tắc này khi làm việc với hệ thống AI production thật quy mô lớn.

Tải file code thực hành minh họa bài học

File JavaScript aisys-ops-center-lab.js — ghép computeCanaryMetrics (Bài 6) và Blackboard (Bài 11) thành 1 agent giám sát tự động:

Tải về aisys-ops-center-lab.js

📖 Tài liệu tham khảo

Bài viết liên quan trong series

Bài 12: Orchestration Nâng Cao — Xung Đột & Deadlock Quay lại Lộ trình Kỹ Thuật Hệ Thống AI — Hoàn thành 13/13! 🎉

Bình luận