Đừng ship AI bằng nút deploy
Feature flags không chỉ để bật tắt UI. Với app AI, chúng là lớp quyết định runtime: chọn model, rollout agent, kill switch và giảm cháy production.
Bụi WireBạn chọn món cho cả bàn mà chỉ có một nút: gọi tất cả. Món khai vị chưa thử, phần chính chưa biết cay cỡ nào, tráng miệng thì có người dị ứng sữa. Nghe hơi liều, đúng không?
Nhiều team đang ship AI y như vậy: merge code, deploy, rồi cầu mong model mới, agent mới, voice feature mới không làm người dùng nổi quạu. Khi có lỗi thì rollback cả deployment, dù thứ cần tắt chỉ là một route, một model provider, hoặc một nhánh logic nhỏ.
Vercel Flags đáng bàn không phải vì “lại thêm một dịch vụ feature flag”. Điểm đáng bàn là: feature flag đang chuyển từ công cụ release UI thành lớp điều khiển runtime cho sản phẩm AI.
Nói thẳng ra thì, với AI app, câu hỏi không còn là “deploy chưa?” mà là “ai được thấy gì, dùng model nào, trong điều kiện nào, và tắt bằng cách nào khi nó cư xử kỳ?”.

Sơ đồ tóm tắt ý chính của bài viết.
Món đang được dọn ra: flag nằm sát platform hơn
Vercel giới thiệu Vercel Flags như một hệ thống feature flags platform-native, tức là nằm cùng nơi với project, deployments và framework integration. Theo mô tả của họ, việc merge code có thể đưa build lên production, nhưng flag mới quyết định user có nhìn thấy thay đổi hay không.
Có vài điểm kỹ thuật đáng để builder để mắt:
- Server-side evaluation — đánh giá flag phía server, tránh cảnh client phải chờ flag rồi mới render UI. Với Next.js React Server Components, code có thể
awaitflag trong lúc render. - Progressive rollout — mở dần theo nhóm user, environment hoặc thuộc tính người dùng, thay vì bật một phát cho toàn bộ.
- Kill switch — công tắc tắt nhanh khi production có vấn đề, không cần sửa source rồi redeploy.
- Flags SDK — thư viện open-source, provider-agnostic, nghĩa là code đọc flag không nhất thiết bị trói vào một backend flag duy nhất. Vercel cũng nhắc tới OpenFeature provider cho framework khác.
Điểm khác biệt họ nhấn mạnh là integration với framework và deployment dashboard. Bạn không quản lý flag ở một nơi, deploy ở một nơi, log ở một nơi, rồi ngồi nối dấu vết như chơi truy tìm kho báu lúc 11 giờ đêm.
Nhưng khoan đã: platform-native không tự động đồng nghĩa với “team nào cũng nên dùng”. Đây mới là phần cần mổ.
Mổ lớp quyết định: flag cho AI khác flag cho nút màu xanh
Feature flag thời web app truyền thống thường bật tắt mấy thứ như layout mới, pricing banner, checkout flow. Với AI app, flag đụng vào vùng rủi ro khác hẳn:
- Model routing — user A dùng model này, user B dùng model khác.
- Reasoning control — mức “suy nghĩ” của model, nếu SDK/provider cho phép chỉnh.
- Tool access — agent có được gọi tool nguy hiểm không, có cần approval không.
- Voice/realtime mode — bật voice agent cho nhóm nhỏ trước khi mở rộng.
- Infra cutover — chuyển dần backend, database hoặc service route.
Nguồn về AI SDK 7 cho thấy Vercel đang đẩy sâu vào agent production: reasoning control, tool approvals, durability với WorkflowAgent, timeout, sandbox, telemetry, tracing. Nguồn về AI Gateway voice thì thêm realtime audio, speech-to-text, text-to-speech, và routing qua gateway. Nguồn về Vercel Services lại gom nhiều service trong một project, hỗ trợ atomic deployments và internal service communication.
Khi ghép các mảnh này lại, flag không còn là “món tráng miệng” sau khi build xong. Nó thành phần chính trong cách bạn vận hành AI feature.
Ví dụ cụ thể: giả sử team bạn có chatbot support dùng AI SDK. Bạn muốn thử model mới cho 5% user trả phí, nhưng chỉ với câu hỏi không liên quan hoàn tiền. Nếu model mới tạo lỗi, bạn muốn tắt nhánh đó ngay, không rollback cả app. Lúc này flag nên bọc quanh quyết định runtime, không chỉ quanh button “Try new AI”.
Một đoạn pseudo-code kiểu builder sẽ gần như thế này:
const useNewSupportModel = await flag("support-model-v2");
const enableToolApproval = await flag("refund-tool-approval");
const model = useNewSupportModel ? "new-model" : "stable-model";
const result = await streamText({
model,
tools: {
refund: enableToolApproval
? refundToolWithApproval
: refundToolReadOnly,
},
});
Đây không phải code hoàn chỉnh để copy chạy ngay. Ý chính là: flag nên điều khiển đường đi của quyết định, không chỉ điều khiển màn hình hiển thị.
Ba lựa chọn cho team builder
Nếu đang làm AI product, bạn thường có ba hướng.
| Lựa chọn | Hợp với ai | Điểm mạnh | Cái giá phải trả |
|---|---|---|---|
| Dùng flag platform-native | Team deploy chủ yếu trên cùng một platform, dùng framework được hỗ trợ tốt | Ít keo dán, flag gần deployment/log, server-side render sạch hơn | Phụ thuộc vào cách platform thiết kế workflow |
| Dùng flag provider độc lập | Team đa cloud, nhiều backend, cần governance riêng | Linh hoạt, tách khỏi hosting, dễ chuẩn hóa toàn công ty | Tự nối SDK với framework, observability và deployment context |
| Tự build flag tối giản | Team nhỏ, ít biến thể, cần kiểm soát đơn giản | Rẻ về mặt vendor, dễ hiểu lúc đầu | Dễ thành nợ kỹ thuật: audit, targeting, rollback, ownership |
Với Vercel Flags, quyết định không nên là “có tính năng mới thì dùng”. Quyết định nên dựa trên độ gần giữa flag và nơi rủi ro xảy ra.
Nếu rủi ro nằm ở render server-side, rollout UI, model update trong Next.js app, hoặc deployment preview, flag nằm sát platform có lợi rõ. Nếu rủi ro nằm ở nhiều hệ thống backend ngoài Vercel, nhiều team dùng nhiều runtime khác nhau, bạn cần cân nhắc lớp flag độc lập hoặc chuẩn như OpenFeature.
Nguồn Hydrogen cũng cho một tín hiệu thú vị: Vercel và Shopify đang rebuild Hydrogen theo hướng open source và runtime agnostic, tức chạy ở nhiều nơi JavaScript chạy được. Đây là đối trọng quan trọng. Một mặt, platform-native giúp giảm ma sát. Mặt khác, runtime-agnostic giúp không biến toàn bộ architecture thành set menu cố định không đổi món.
Ai nên dùng, ai nên bỏ qua?
Nên xem nghiêm túc nếu:
- Bạn đang dùng Vercel/Next.js nhiều, đặc biệt với React Server Components.
- Bạn cần rollout model, agent hoặc AI UI theo segment.
- Bạn từng rollback cả deployment chỉ vì một nhánh AI hỏng.
- Bạn muốn flag gắn với preview deployment, logs, và project dashboard.
- Bạn đang chuẩn bị thêm voice/realtime feature và cần beta rollout có phanh.
Có thể bỏ qua hoặc chưa cần nếu:
- App của bạn chưa có release risk đáng kể; mỗi tuần chỉ thay vài dòng nội dung.
- Bạn đã có hệ thống flag mature, có audit, approval, ownership rõ.
- Backend chính nằm ngoài Vercel và flag cần được evaluate ở nhiều runtime không liên quan frontend.
- Team chưa có kỷ luật dọn flag cũ. Công cụ tốt không cứu được một danh sách flag mốc meo không ai dám xóa.
Điều kiện đổi quyết định khá đơn giản: khi AI feature của bạn bắt đầu ảnh hưởng trực tiếp tới tiền, dữ liệu, hoặc hành động thay người dùng, hãy ngừng coi deploy là ranh giới an toàn. Lúc đó cần flag, approval, telemetry và rollback nhanh hơn chu kỳ deploy.
Bẫy ít ai ghi trên menu
Có ba bẫy mình sẽ canh kỹ.
Một là flag debt. Flag sinh ra để giảm rủi ro, nhưng nếu không có owner và ngày hết hạn, nó biến codebase thành mê cung. Mỗi flag nên có tên rõ, mục đích rõ, người chịu trách nhiệm, điều kiện xóa.
Hai là targeting sai tầng. Đừng chỉ flag ở UI nếu rủi ro nằm ở tool calling. tool calling là khả năng model gọi API/công cụ thay vì chỉ trả lời chữ. Nếu agent có thể gọi API hoàn tiền, đặt flag ở nút bấm ngoài giao diện là chưa đủ; backend cũng phải kiểm tra quyền và flag.
Ba là quan sát không đi kèm quyết định. Vercel AI SDK 7 nhắc tới telemetry, tracing và lifecycle events. telemetry là dữ liệu quan sát hệ thống khi chạy; tracing là theo dấu từng bước xử lý. Nhưng log đẹp mà không có ngưỡng tắt flag thì vẫn chỉ là biên bản sau tai nạn.
Với AI, kill switch nên có tiêu chí trước: lỗi tool tăng, latency vượt mức bạn chấp nhận, user report xấu, chi phí tăng bất thường, hoặc model trả lời sai ở nhóm intent nhạy cảm. Không cần bịa benchmark cho sang; chỉ cần định nghĩa “đủ xấu để tắt” trước khi mở rollout.
Quyết định mình sẽ chốt
Nếu là mình trong vai tech lead của một team Việt Nam khoảng 5-10 dev đang build AI product trên Next.js, mình sẽ không bắt đầu bằng câu “hãy dùng Vercel Flags cho mọi thứ”. Mình sẽ chốt framework nhỏ hơn:
Flag những quyết định có thể gây hại khi sai. Đừng flag mọi thứ chỉ vì có dashboard đẹp.
Cụ thể, mình sẽ tạo ba nhóm flag:
release-*: bật tắt feature cho segment.model-*: chọn model/provider/reasoning mode cho từng luồng.safety-*: tool approval, sandbox, realtime beta, kill switch.
Sau đó mỗi flag phải có owner, ngày review, metric quan sát, và kế hoạch xóa. Nếu đang ở Vercel-heavy stack, Vercel Flags là lựa chọn đáng thử vì nó nằm gần deployment và server rendering. Nếu stack phân tán hơn, giữ SDK/provider-agnostic và OpenFeature trong đầu để không tự khóa mình quá sớm.
Sau bài này, thứ mình muốn bạn nghĩ khác là: feature flag không phải phụ kiện release; với AI system, nó là lớp quyết định vận hành. Deploy chỉ đưa món lên bếp, còn flag quyết định ai được ăn, ăn phần nào, và khi nào phải dừng phục vụ.
Chốt gọn: AI app không sợ ship nhanh; nó sợ ship mà không có nút dừng tử tế.
---
Bụi Wire — nghiện đọc release notes lúc 2 giờ sáng