Bài viết hướng dẫn Cloudflare Workers AI này sẽ chỉ cho bạn cách triển khai và chạy các mô hình học máy (machine learning) trực tiếp trên mạng biên toàn cầu của Cloudflare. Với Cloudflare Workers AI , bạn có thể thực thi các Mô hình Ngôn ngữ Lớn (LLMs), dịch thuật văn bản, tạo ảnh và chuyển giọng nói thành văn bản ở vị trí gần với người dùng nhất mà không cần quản lý hệ thống máy chủ GPU phức tạp. Các bước dưới đây bao gồm việc cấu hình Wrangler, viết fetch handler, chạy mô hình Llama và tối ưu hóa chi phí API tại máy chủ biên.

TL;DR

  • Chạy các mô hình AI không máy chủ; Cloudflare Workers AI quản lý hạ tầng GPU bên dưới, bạn chỉ trả phí dựa trên tài nguyên tính toán thực tế.
  • Cấu hình liên kết (bindings) trong wrangler.toml; kết nối trực tiếp Worker của bạn với cổng liên kết AI mà không cần quản lý các API key.
  • Viết một fetch handler để nhận các yêu cầu từ phía người dùng, chạy mô hình và stream các phản hồi JSON.
  • Lựa chọn các mô hình tối ưu từ danh mục của Cloudflare (chẳng hạn như Llama 3, Whisper hoặc Stable Diffusion) nhằm cân bằng tốc độ và chất lượng.
  • Phân tách hạn mức thanh toán và giới hạn lượt gọi để bảo vệ API endpoint của bạn khỏi việc lạm dụng tiêu hao lượng lớn token trong môi trường thực tế.

Tại sao nên chạy các mô hình AI trên máy chủ biên?

Trước đây, việc tích hợp các tính năng AI đòi hỏi bạn phải gọi các API bên thứ ba (như OpenAI) hoặc tự lưu trữ các mô hình mã nguồn mở trên các máy chủ đám mây đắt đỏ.

Việc gọi các API ngoài dẫn đến các lo ngại về độ trễ và tính riêng tư của dữ liệu. Trong khi đó, việc tự vận hành hệ thống máy chủ GPU lại phức tạp về bảo trì và rất khó để mở rộng quy mô một cách hiệu quả. Cloudflare Workers AI giải quyết triệt để bài toán này. Nền tảng lưu trữ sẵn các mô hình mã nguồn mở trên hệ thống GPU được triển khai rộng khắp trên mạng lưới toàn cầu của Cloudflare. Mã nguồn của bạn chạy dưới dạng một Worker siêu nhẹ, thực thi các mô hình ngay sát người dùng với độ trễ gần như bằng không. Để tìm hiểu thêm về việc xây dựng các cấu trúc máy chủ biên cơ bản, hãy đọc hướng dẫn của chúng tôi về cách xây dựng API không máy chủ với Cloudflare Workers .


Điều kiện tiên quyết

Trước khi bắt đầu, hãy đảm bảo bạn đã chuẩn bị đầy đủ các yếu tố sau:

  • Một tài khoản Cloudflare đã kích hoạt tính năng Workers. Gói miễn phí cung cấp một hạn mức suy luận (inference) hàng ngày đủ lớn để bạn thực hiện toàn bộ nội dung hướng dẫn này.
  • Node.js phiên bản 18 trở lên cài đặt sẵn trên máy để chạy các dòng lệnh và máy chủ phát triển cục bộ.
  • Wrangler (Workers CLI) đã được cài đặt và xác thực. Cài đặt thông qua lệnh npm install -g wrangler, sau đó chạy wrangler login để liên kết với tài khoản của bạn.
  • Kiến thức JavaScript cơ bản và mô hình yêu cầu/phản hồi fetch – cấu trúc cốt lõi để xây dựng mọi Worker.

Nếu bạn bắt đầu từ một dự án mới hoàn toàn, hãy khởi tạo dự án bằng công cụ create-cloudflare (C3). Công cụ này sẽ tự động tạo một cấu trúc Worker sẵn sàng triển khai, một tệp wrangler.toml và giá trị compatibility_date chuẩn xác:

1npm create cloudflare@latest my-edge-ai
2cd my-edge-ai

Chọn mẫu Worker “Hello World” khi được hỏi. Điều này cung cấp cho bạn một điểm khởi đầu sạch sẽ để có thể thêm liên kết AI ở bước tiếp theo.


Bước 1: Cấu hình wrangler.toml

Để truy cập các mô hình AI, trước tiên bạn cần khai báo liên kết (binding) AI trong tệp cấu hình dự án của mình.

Mở tệp wrangler.toml (hoặc wrangler.json) và thêm khối cấu hình sau:

1[ai]
2binding = "AI"

Liên kết này làm cho dịch vụ AI khả dụng trên đối số môi trường (env.AI) trong mã nguồn Worker của bạn. Bạn không cần phải quản lý API key, cấu hình endpoint, hay xử lý các chuỗi kết nối phức tạp. Wrangler sẽ tự động xử lý xác thực khi bạn thực hiện deploy.

Một tệp wrangler.toml hoàn chỉnh cho dự án này sẽ có dạng:

1name = "my-edge-ai"
2main = "src/index.js"
3compatibility_date = "2025-01-01"
4
5[ai]
6binding = "AI"

Giá trị compatibility_date là bắt buộc: nó cố định hành vi của môi trường chạy (runtime) để các cập nhật nền tảng trong tương lai không làm thay đổi cách Worker của bạn hoạt động. Nếu bỏ qua trường này, quá trình triển khai sẽ báo lỗi cấu hình – một lỗi rất thường gặp trong lần đầu tiên chạy.


Bước 2: Viết mã nguồn Worker

Khi liên kết đã được cấu hình, bạn có thể gọi dịch vụ AI từ bên trong handler fetch của mình. Ví dụ dưới đây minh họa cách nhận một payload JSON chứa prompt của người dùng và tạo ra một văn bản hoàn thiện bằng Llama 3.

 1export default {
 2  async fetch(request, env) {
 3    if (request.method !== "POST") {
 4      return new Response("Method not allowed", { status: 405 });
 5    }
 6
 7    try {
 8      const { prompt } = await request.json();
 9      if (!prompt) {
10        return Response.json({ error: "Missing prompt" }, { status: 400 });
11      }
12
13      // Call the model using the AI binding
14      const response = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
15        prompt: prompt,
16        max_tokens: 256
17      });
18
19      return Response.json(response);
20    } catch (err) {
21      return Response.json({ error: err.message }, { status: 500 });
22    }
23  }
24};

Cấu trúc đơn giản này cho phép bạn xây dựng các công cụ tóm tắt văn bản, phân tích cảm xúc hoặc tạo nội dung tự động. Nếu bạn muốn kết nối các tính năng này với cơ sở dữ liệu của mình, bạn có thể liên kết với một cơ sở dữ liệu SQL không máy chủ; xem hướng dẫn thiết lập cơ sở dữ liệu Cloudflare D1 để biết chi tiết.

Sử dụng định dạng tin nhắn hội thoại (chat message format)

Trường prompt rất tiện lợi cho các câu trả lời ngắn một lần, nhưng các mô hình hội thoại sẽ hoạt động tốt nhất với một mảng messages có cấu trúc. Điều này cho phép bạn thiết lập các chỉ dẫn hệ thống (system prompt) nhằm định hình giọng điệu của mô hình và tách biệt nó khỏi dữ liệu đầu vào của người dùng:

 1const messages = [
 2  { role: "system", content: "You are a concise technical assistant." },
 3  { role: "user", content: prompt }
 4];
 5
 6const response = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
 7  messages,
 8  max_tokens: 512
 9});
10
11// Text models return the generated text on the `response` property
12return Response.json({ answer: response.response });

Lưu ý rằng các mô hình tạo văn bản bọc đầu ra của chúng trong một trường response, do đó văn bản hoàn chỉnh nằm ở response.response chứ không phải ở cấp cao nhất của đối tượng. Chi tiết này thường khiến nhiều người mới sử dụng nhầm lẫn khi ghi nhật ký đối tượng thô và thấy một cấu trúc dữ liệu lạ.


Lựa chọn mô hình phù hợp

Danh mục của Cloudflare chứa hàng chục mô hình, và việc chọn đúng mô hình là sự cân bằng giữa tốc độ, chất lượng và chi phí. Các mô hình nhỏ hơn phản hồi nhanh hơn và tiêu thụ ít tài nguyên hơn; các mô hình lớn hơn có khả năng lập luận tốt hơn nhưng tốn nhiều chi phí hơn cho mỗi lượt gọi. Bảng dưới đây so sánh một vài lựa chọn tạo văn bản phổ biến.

Mô hìnhPhù hợp nhất choTốc độ tương đốiChi phí tương đối
@cf/meta/llama-3-8b-instructHội thoại thông thường, tóm tắtNhanhThấp
@cf/meta/llama-3.1-70b-instructLập luận phức tạp, trả lời dàiChậm hơnCao hơn
@cf/mistral/mistral-7b-instruct-v0.2Chỉ dẫn ngắn, viết nhápNhanhThấp
@cf/meta/llama-guard-3-8bKiểm duyệt và phân loại nội dungNhanhThấp

Theo kinh nghiệm thực tế, hãy bắt đầu với một mô hình 8B như Llama 3 8B Instruct. Nó đáp ứng tốt phần lớn các nhu cầu tóm tắt, phân loại và hội thoại với độ trễ và chi phí chỉ bằng một phần nhỏ so với mô hình 70B. Chỉ nên nâng cấp lên mô hình lớn hơn khi các thử nghiệm thực tế của bạn chứng minh mô hình nhỏ không đáp ứng được yêu cầu chất lượng.


Bước 3: Stream kết quả trả về để cải thiện trải nghiệm người dùng

Đối với các ứng dụng trò chuyện, việc bắt người dùng chờ đợi toàn bộ câu trả lời được tạo xong có thể dẫn đến trải nghiệm sử dụng kém.

Bạn có thể cấu hình liên kết AI để truyền (stream) kết quả trả về theo từng token ngay khi chúng được tạo ra. Để thực hiện việc này, hãy truyền tham số stream: true trong tùy chọn yêu cầu của bạn. Worker sẽ trả về một đối tượng ReadableStream để bạn chuyển tiếp trực tiếp đến trình duyệt của máy khách, tạo ra một giao diện trò chuyện thời gian thực mượt mà. Để so sánh phương pháp chạy trên biên này với lưu trữ đám mây truyền thống, hãy đọc bài so sánh của chúng tôi về Cloudflare Workers so với AWS Lambda .

Dưới đây là một handler stream hoàn chỉnh. Thay vì trả về dữ liệu JSON đã phân tích cú pháp, bạn chuyển tiếp luồng dữ liệu đến máy khách với cấu hình content-type chính xác để trình duyệt có thể xử lý dưới dạng Server-Sent Events:

 1export default {
 2  async fetch(request, env) {
 3    const { prompt } = await request.json();
 4
 5    const stream = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
 6      prompt,
 7      max_tokens: 512,
 8      stream: true
 9    });
10
11    return new Response(stream, {
12      headers: { "content-type": "text/event-stream" }
13    });
14  }
15};

Điểm khác biệt cốt lõi so với phiên bản không stream là cấu trúc phản hồi: bạn chuyển trực tiếp luồng dữ liệu vào new Response() và đặt content-type thành text/event-stream. Nếu bạn cố bọc stream trong Response.json(), nó sẽ không được tuần tự hóa đúng cách và trình duyệt sẽ nhận về một phản hồi rỗng.


Kiểm thử và triển khai Worker của bạn

Sau khi thiết lập xong liên kết và handler, hãy chạy thử Worker ở môi trường cục bộ trước khi phát hành:

1npx wrangler dev

Vì tác vụ suy luận chạy trực tiếp trên GPU của Cloudflare chứ không phải trên máy tính cá nhân của bạn, liên kết AI sẽ thực hiện kết nối mạng ngay cả khi đang phát triển cục bộ. Wrangler sẽ quản lý toàn bộ việc này, nhưng điều đó có nghĩa là máy của bạn cần có kết nối internet và thông tin đăng nhập hợp lệ để kiểm thử cục bộ.

Gửi một yêu cầu kiểm thử bằng curl khi lệnh wrangler dev đang chạy:

1curl -X POST http://localhost:8787 \
2  -H "Content-Type: application/json" \
3  -d '{"prompt": "Summarise the benefits of edge computing in one sentence."}'

Khi bạn đã hài lòng với kết quả đầu ra, hãy tiến hành triển khai lên mạng lưới toàn cầu:

1npx wrangler deploy

Wrangler sẽ tải Worker của bạn lên và trả về một đường dẫn URL dạng *.workers.dev. Endpoint của bạn hiện đã hoạt động trên mọi trung tâm dữ liệu của Cloudflare, và mỗi yêu cầu gọi đến sẽ được tự động điều hướng đến vị trí máy chủ vật lý gần người dùng nhất.


Các lỗi thường gặp và cách khắc phục

Dưới đây là một số vấn đề thường xuyên lặp lại khi các đội ngũ kỹ thuật lần đầu triển khai suy luận trên máy chủ biên. Việc biết trước cách xử lý sẽ giúp bạn tiết kiệm nhiều giờ tìm lỗi.

  • Cannot read properties of undefined (reading 'run') – liên kết env.AI bị thiếu hoặc không tồn tại. Lỗi này hầu như luôn xuất phát từ việc thiếu cấu hình [ai] trong tệp wrangler.toml, hoặc bạn đã sửa tệp này nhưng chưa khởi động lại lệnh wrangler dev (hoặc chưa deploy lại). Hãy xác nhận lại tên liên kết chính xác.
  • Lỗi No such model hoặc lỗi 400 khi chạy run – mã định danh mô hình bị sai. Tên mô hình phân biệt chữ hoa chữ thường và phải bao gồm đường dẫn đầy đủ, ví dụ @cf/meta/llama-3-8b-instruct. Hãy sao chép chính xác từ danh mục mô hình thay vì tự gõ lại theo trí nhớ.
  • Luồng dữ liệu stream trả về trống hoặc lỗi định dạng – bạn đã trả về stream thông qua Response.json() thay vì new Response(stream, ...). Các luồng stream phải được chuyển tiếp trực tiếp chứ không được tuần tự hóa.
  • Lỗi quá tải hoặc lỗi 429 dưới tải cao – mô hình tạm thời bị nghẽn hoặc bạn đã đạt đến giới hạn tài khoản. Hãy triển khai cơ chế thử lại (retry) ngắn với thời gian chờ tăng dần (back-off), và cân nhắc sử dụng một mô hình nhỏ hơn cho các thời điểm lưu lượng tăng đột biến.
  • Câu trả lời bị cắt ngắn – nội dung trả về bị dừng giữa chừng vì cấu hình max_tokens quá thấp. Hãy tăng giới hạn này lên, nhưng hãy lưu ý rằng giá trị token lớn hơn sẽ làm tăng cả độ trễ lẫn chi phí.

Nếu một yêu cầu thất bại mà không có thông báo lỗi cụ thể, hãy theo dõi trực tiếp nhật ký hệ thống bằng lệnh npx wrangler tail trong khi gửi yêu cầu kiểm thử. Lệnh này sẽ hiển thị lỗi runtime và các kết quả ghi nhật ký console.log từ Worker đã triển khai.


Tối ưu hóa chi phí sản xuất và bảo mật

Mặc dù Workers AI có hiệu quả chi phí rất cao, việc chạy suy luận mô hình trong môi trường thực tế (production) vẫn cần các biện pháp kiểm soát chặt chẽ.

  • Triển khai giới hạn lượt gọi (Rate Limiting): Hạn chế tần suất một máy khách gọi đến API endpoint của bạn. Chi phí tính toán GPU tăng tuyến tính theo lưu lượng sử dụng.
  • Lọc sạch Prompts (Sanitize Prompts): Xác thực đầu vào để ngăn chặn các cuộc tấn công tiêm prompt (prompt injection) và đảm bảo các câu trả lời của mô hình luôn đi đúng hướng.
  • Thu hẹp kích thước ngữ cảnh (Silo Context Size): Giữ cho lịch sử prompt ngắn gọn. Việc gửi lượng lớn ngữ cảnh lịch sử trong mỗi lần gọi sẽ làm tăng chi phí xử lý token đáng kể.

Để tìm hiểu chi tiết hơn về quản lý ngữ cảnh hội thoại, hãy xem hướng dẫn của chúng tôi về xây dựng chatbot bằng API OpenAI .


Các điểm rút ra chính

  • Cloudflare Workers AI cung cấp khả năng tiếp cận các mô hình mã nguồn mở không máy chủ mà không cần bận tâm bảo trì phần cứng GPU.
  • Cấu hình quyền truy cập bằng cách thêm khối liên kết [ai] vào tệp cấu hình wrangler.toml của bạn.
  • Viết các fetch handler để thực thi trực tiếp các tác vụ tạo văn bản, dịch thuật hoặc xử lý ảnh tại máy chủ biên.
  • Bật tính năng stream token bằng thiết lập stream: true để tối ưu hóa trải nghiệm trên thiết bị di động và ứng dụng hội thoại.
  • Thiết lập giới hạn lượt gọi và lọc dữ liệu đầu vào để bảo vệ các endpoint biên của bạn trong môi trường thực tế.

Xây dựng các ứng dụng AI của bạn trên máy chủ biên

Việc xây dựng các hệ thống tích hợp AI đáng tin cậy đòi hỏi kiến thức chuyên sâu về kiến trúc không máy chủ. Mecanik chuyên cung cấp các dịch vụ tích hợp AI và cấu hình API tùy chỉnh thông qua dịch vụ tích hợp API OpenAI của chúng tôi. Chúng tôi xây dựng các công cụ chạy trực tiếp trên biên có thể mở rộng quy mô mượt mà, tối ưu hóa cả chi phí và trải nghiệm của người dùng. Liên hệ với chúng tôi ngay hôm nay để thảo luận về các yêu cầu dự án của bạn.


Câu hỏi thường gặp (FAQ)

Cloudflare Workers AI là gì? Đây là một nền tảng không máy chủ (serverless) cho phép bạn chạy các mô hình học máy (tạo văn bản, dịch thuật, chuyển giọng nói thành văn bản, tạo ảnh) trên mạng lưới GPU toàn cầu của Cloudflare.

Tôi có cần API key để sử dụng Workers AI không? Không. Khi bạn khai báo liên kết AI trong tệp wrangler.toml, Cloudflare sẽ quản lý thông tin xác thực nội bộ, cho phép truy cập dịch vụ trực tiếp qua biến env.AI.

Những mô hình nào đang có sẵn trên Cloudflare Workers AI? Nền tảng lưu trữ nhiều mô hình mã nguồn mở phổ biến bao gồm Meta Llama, Mistral, OpenAI Whisper và Stable Diffusion, và liên tục được cập nhật trong danh mục mô hình của họ.

Tôi có thể stream câu trả lời dạng văn bản từ Workers AI không? Có. Bằng cách thiết lập stream: true trong các tham số của lệnh gọi env.AI.run, Worker sẽ trả về một đối tượng ReadableStream tiêu chuẩn để stream văn bản trực tiếp về trình duyệt.

Cách tính phí cho Workers AI như thế nào? Chi phí được tính dựa trên số lượng token được xử lý (đối với các mô hình văn bản) hoặc thời gian tính toán thực tế (đối với các mô hình khác), mang lại mô hình thanh toán theo lưu lượng sử dụng vô cùng hiệu quả.