Xây dựng AI governance framework nội bộ: từ model registry đến audit trail
Đây là lần thứ 11 tôi thấy cùng một kịch bản: team build AI feature trong vài sprint, celebrate go-live, rồi 6 tháng sau không ai biết model version nào đang chạy, ai đã approve nó, và dữ liệu nào đã được dùng để train. Governance không phải bureaucracy — đó là cách duy nhất để scale AI mà không mất kiểm soát. ---
Pattern tái diễn: "AI không có địa chỉ"
Lần đầu tiên tôi thấy vấn đề này là năm 2023, tại một fintech đang dùng AI để tự động phân loại hồ sơ vay. Model chạy ổn trong 4 tháng. Rồi accuracy giảm đột ngột — drift vì dữ liệu thị trường thay đổi sau chính sách tín dụng mới.
Khi tôi hỏi: "Model nào đang chạy?" — im lặng.
"Training data từ đâu?" — "Hình như từ hệ thống cũ."
"Ai approve model này trước khi deploy?" — "Dev tự merge."
Không có model registry. Không có audit trail. Không có người chịu trách nhiệm. AI đang ra quyết định ảnh hưởng đến hàng nghìn hồ sơ vay, nhưng về mặt operational, nó là một blackbox không có địa chỉ.
Từ đó đến nay, tôi thấy pattern này lặp lại 10 lần nữa. Lần nào cũng bắt đầu giống nhau: team nhanh, deadline gấp, governance "để sau". Lần nào cũng kết thúc giống nhau.
Bối cảnh: tại sao AI governance bị bỏ qua
Tôi không blame developer. Governance bị bỏ qua vì ba lý do thực tế:
1. Áp lực time-to-market: AI feature được hứa hẹn trong roadmap, PM đang chờ, team phải ship. Governance trông như overhead không có value ngắn hạn.
2. Không có template: Với REST API, có OpenAPI spec, có Swagger, có convention rõ ràng. Với AI model, team tự mò. Nhiều người chưa biết "model registry" là cái gì cụ thể.
3. Governance trông như enterprise bureaucracy: Nếu Google và Netflix không cần approval workflow cho mọi model, tại sao team startup 30 người lại cần?
Câu trả lời: họ có — chỉ là ở quy mô và form khác. Netflix Metaflow, Google Vertex AI Model Registry, Microsoft Azure ML model registry — đó là governance, được build vào tooling.
Bạn không build từ đầu. Bạn chọn cái đủ nhẹ cho quy mô của mình.
Giải pháp: governance như một engineering practice, không phải policy document
Sau 11 lần thấy cùng một vấn đề, tôi rút ra: governance framework hiệu quả có ba thành phần cốt lõi, và chỉ ba thành phần đó.
Thành phần 1: Model Registry — "địa chỉ" cho mỗi AI component
Model registry là single source of truth: cái gì đang chạy, version nào, train từ đâu, ai approve.
Minimal viable model registry không cần tool phức tạp. Với team nhỏ, một bảng database với C# wrapper là đủ để bắt đầu:
// Minimal model registry — đủ để bắt đầu
public class ModelRegistryEntry
{
public Guid Id { get; init; }
public required string ModelName { get; init; } // "customer-churn-classifier"
public required string Version { get; init; } // "v1.2.3" — semantic versioning
public required string Endpoint { get; init; } // Azure ML endpoint URL
public required string TrainingDataRef { get; init; } // Link đến training dataset
public required string ModelFramework { get; init; } // "azure-openai-gpt4o", "sklearn", "custom"
public required string UseCase { get; init; } // mô tả mục đích
public required RiskLevel RiskClassification { get; init; }
public required string ApprovedBy { get; init; } // không deploy nếu field này rỗng
public required DateTimeOffset ApprovedAt { get; init; }
public required string ApprovalJustification { get; init; }
public DeploymentStatus Status { get; init; }
public DateTimeOffset? DeprecatedAt { get; init; }
}
public enum RiskLevel { Low, Medium, High }
public enum DeploymentStatus { Staging, Production, Deprecated }
// Service: không cho phép deploy nếu chưa có approval
public class ModelDeploymentService
{
public async Task<DeployResult> DeployToProductionAsync(string modelName, string version)
{
var entry = await _registry.GetAsync(modelName, version)
?? throw new ModelNotFoundException($"{modelName}@{version} not found in registry");
if (string.IsNullOrEmpty(entry.ApprovedBy))
throw new UnauthorizedDeploymentException("Model chưa được approve — không thể deploy production.");
if (entry.RiskClassification == RiskLevel.High && entry.ApprovedBy == entry.RequestedBy)
throw new UnauthorizedDeploymentException("High-risk model phải được approve bởi người khác với requestor.");
// Log deployment event
await _auditTrail.RecordAsync(new AuditEvent
{
EventType = "model.deployed",
ModelName = modelName,
ModelVersion = version,
Actor = _currentUser.Id,
Timestamp = DateTimeOffset.UtcNow,
Details = $"Deployed to production. Approved by: {entry.ApprovedBy}"
});
return await _deploymentClient.DeployAsync(entry.Endpoint);
}
}
Điều quan trọng không phải tool — là convention. Team phải đồng ý: không có gì được deploy production mà không có registry entry và approval.
Thành phần 2: Audit Trail — "lịch sử" không thể xóa
Audit trail trả lời hai câu hỏi quan trọng nhất khi có incident: "Lúc đó model đang làm gì?" và "Ai đã thay đổi gì, lúc nào?"
Vấn đề tôi hay thấy: team log đủ thứ khi development, nhưng production AI audit trail thực sự lại rất thưa. Logs có, nhưng không structured, không queryable, và không có correlation giữa model decision và downstream action.
// Structured AI audit event — queryable, không chỉ là text log
public record AiAuditEvent
{
public required string EventId { get; init; } // UUID — idempotency key
public required string EventType { get; init; } // "model.inference", "model.deployed", "model.deprecated"
public required string ModelName { get; init; }
public required string ModelVersion { get; init; }
public required string UserId { get; init; }
public required DateTimeOffset Timestamp { get; init; }
public required string InputHash { get; init; } // SHA256 của input — không log raw input nếu có PII
public string? OutputHash { get; init; } // SHA256 của output
public required int InputTokens { get; init; }
public required int OutputTokens { get; init; }
public bool ContentFilterTriggered { get; init; }
public Dictionary<string, string> Metadata { get; init; } = new(); // context thêm
public string? CorrelationId { get; init; } // trace qua distributed system
}
// Anti-pattern: log raw conversation → PII risk
// ĐỪNG làm: _logger.LogInformation("Query: {Query}, Response: {Response}", query, response);
// ĐÚNG: log metadata, không log nội dung nếu chứa PII
// ĐÚNG: nếu cần log nội dung, hash nó và lưu riêng với access control chặt
Nguyên tắc audit trail tôi học được qua nhiều incident:
Đừng log để "cover yourself" — log để "understand what happened". Hai mục tiêu này dẫn đến data rất khác nhau. Audit trail để cover yourself là wall of text. Audit trail để understand là structured events có thể query bằng SQL trong 30 giây.
Thành phần 3: Ownership & Accountability — "ai chịu trách nhiệm"
Đây là thành phần bị bỏ qua nhiều nhất, và cũng gây ra nhiều vấn đề nhất.
Tôi không nói về committee hay governance board nghe có vẻ enterprise. Tôi nói về một quy tắc đơn giản: mỗi AI model trong production có một người có tên, có thể liên lạc, và biết model đó đang làm gì.
Tối thiểu cần có:
| Role | Trách nhiệm | Số lượng |
|---|---|---|
| Model Owner | Biết model làm gì, review performance định kỳ, quyết định deprecate | 1 người/model |
| Approver | Approve deployment (không phải model owner tự approve cho mình) | 1+ người/team |
| Security reviewer | Review model với OWASP LLM Top 10 trước go-live | 1 người/team (AppSec) |
Với team nhỏ, một người có thể đảm nhiệm Approver + Security reviewer — chỉ cần không phải cùng người với Model Owner.
7 anti-pattern tôi thấy nhiều nhất
Đây là những điều team thường làm với niềm tin tốt, nhưng dẫn đến vấn đề lớn về sau:
| Anti-pattern | Tại sao nguy hiểm | Consequence thực tế |
|---|---|---|
| "Deploy model như deploy code — merge là xong" | Không có approval gate, không có registry entry | 6 tháng sau không ai biết model version nào đang chạy |
| "Governance sau khi có issue mới làm" | Không thể reconstruct lịch sử từ đầu | Audit fail, không trả lời được câu hỏi của regulator |
| "Log everything" không có structure | Wall of text không queryable | Investigation mất ngày thay vì phút |
| "AI team tự approve model của mình" | Không có independent review | High-risk model lên production không qua security check |
| "Một model dùng cho nhiều use case" | Không clear ownership, không rõ risk level của từng use case | Khó deprecate, khó assess compliance |
| Model registry là spreadsheet Google Docs | Không integrate với deployment pipeline | Người cập nhật registry ≠ người deploy → drift |
| "NIST AI RMF quá phức tạp cho team mình" | Bỏ qua framework hoàn toàn thay vì adapt | Không có baseline để so sánh, không biết thiếu gì |
Về anti-pattern cuối: NIST AI RMF (GOVERN → MAP → MEASURE → MANAGE) không phải tài liệu để đọc và implement nguyên xi. Đó là checklist để tự hỏi xem mình đang thiếu gì. Team 5 người implement NIST AI RMF rất khác với Fortune 500 — nhưng câu hỏi đặt ra là giống nhau.
Bài học rút ra
Governance framework không phải thứ bạn build trước khi có vấn đề — thường là thứ bạn build vì đã có vấn đề. Nhưng tốt nhất là build trước khi vấn đề đủ lớn để không còn control được.
Tôi đã thấy team mất 3 tháng để reconstruct audit trail cho một AI system đang bị điều tra compliance. Tôi đã thấy team phải suspend toàn bộ AI feature để audit vì không có record về training data provenance. Cả hai tình huống đó đều có thể tránh được với governance tương đương vài tuần effort ban đầu.
Cái thực sự quan trọng không phải tool — Azure ML model registry, MLflow, hay self-built đều ổn nếu team thực sự dùng. Cái quan trọng là convention được enforce ở deployment pipeline, không phải ở policy document không ai đọc.
Một CI/CD gate từ chối deploy nếu không có registry entry + approval sẽ hiệu quả hơn 50 trang governance policy bao giờ cũng vậy.
Takeaway
Nếu bạn đang build AI system và chưa có governance, đây là thứ tối thiểu để bắt đầu — có thể làm trong một sprint:
- Tạo model registry table với 10 fields cơ bản từ ví dụ code trên
- Add gate vào deployment pipeline: từ chối deploy nếu không có registry entry và approved_by
- Designate Model Owner cho mỗi AI component đang chạy — người đó nhận alert khi có anomaly
- Chuẩn hóa audit event format — 5 fields bắt buộc: event_type, model_name, model_version, user_id, timestamp
Từ đây, scale dần theo risk và quy mô. Không cần build enterprise governance từ đầu — chỉ cần bắt đầu với những thứ có thể enforce được.
Nếu bạn đang xây dựng AI system và muốn tham chiếu về security layer kèm theo governance, bài checklist triển khai AI an toàn cover phần đó. Và nếu muốn hiểu cụ thể về attack vectors mà governance giúp prevent, đọc thêm bài OWASP LLM Top 10.
Tham khảo
| # | Title | URL | Ghi chú |
|---|---|---|---|
| 1 | Enterprise AI Governance Guide | https://www.liminal.ai/blog/enterprise-ai-governance-guide | EN — 6 components, 7-step roadmap |
| 2 | AI Model Governance 2026: Model Registry & Compliance | https://www.programming-helper.com/tech/ai-model-governance-2026-model-registry-mlflow-enterprise-compliance | EN — model registry patterns |
| 3 | NIST AI Risk Management Framework | https://www.nist.gov/itl/ai-risk-management-framework | Official NIST RMF |
| 4 | Azure AI security best practices | https://learn.microsoft.com/en-us/azure/security/fundamentals/ai-security-best-practices | MS Learn — model registry + audit |
Lão Đại — BKGlobal Tech Team
#BKGlobal #systemdesign #architecture #techleadership #lessons