Minh họa học tập và khám phá trí tuệ nhân tạo
08 · Kết nối mô hình

API là gì? Cách lấy và dùng API key an toàn

API là giao diện để một chương trình gửi yêu cầu tới dịch vụ khác và nhận phản hồi theo quy tắc đã định. API key là thông tin xác thực dùng để nhận diện/ủy quyền ứng dụng; nếu là khóa bí mật, ai lấy được có thể dùng dịch vụ và phát sinh chi phí trong tài khoản của chủ khóa.

Quan trọng với website CLB hiện tại: đây là website HTML/CSS/JavaScript tĩnh. Tuyệt đối không dán API key vào HTML, `common.js`, `site-config.js`, trình duyệt, GitHub hay Google Form. Mã giao diện được tải về máy khách nên khóa nhúng trong đó có thể bị người khác lấy. Muốn chatbot gọi API, cần backend/Worker giữ bí mật và giới hạn truy cập.

A. Tạo OpenAI API key (ví dụ cụ thể)

  1. Đăng nhập vào OpenAI API Platform bằng tài khoản được phép sử dụng và thanh toán API. Với học sinh, cần hỏi giáo viên/người giám hộ và tuân thủ yêu cầu độ tuổi, quy định nhà trường và điều khoản dịch vụ.
  2. Vào dự án (Project) phù hợp → phần **API Keys** → **Create new secret key**. Tên mục giao diện có thể thay đổi; xem hướng dẫn chính thức ở nguồn bên dưới nếu màn hình khác.
  3. Chọn quyền nhỏ nhất cần thiết nếu có lựa chọn permissions. Tạo khóa riêng cho thử nghiệm, không dùng chung khóa cá nhân hoặc khóa của dự án thật.
  4. Sao chép khóa ngay lúc tạo và lưu vào nơi quản lý bí mật. Nhiều nền tảng chỉ hiển thị toàn bộ khóa một lần; nếu mất, tạo khóa mới thay vì tìm cách khôi phục.
  5. Kiểm tra trang Billing/Usage và bảng giá hiện hành của mô hình trước khi gửi yêu cầu. API thường tính phí riêng; gói ChatGPT không mặc nhiên bao gồm chi phí API. Bắt đầu với thử nghiệm ít yêu cầu, giám sát mức dùng và đặt các giới hạn/nhắc nhở khả dụng.

B. Lưu khóa khi phát triển cục bộ

Trong dự án server-side, lưu biến môi trường ở máy phát triển, ví dụ tên biến `OPENAI_API_KEY`. Tệp `.env` chỉ chứa khóa trên máy cá nhân và phải được thêm vào `.gitignore` để Git không đưa lên GitHub. Không chụp màn hình có khóa; không ghi khóa vào log, prompt, issue hoặc tài liệu.

Ví dụ .gitignore:
.env
.env.*
!.env.example

Trong .env.example chỉ ghi tên biến giả, không ghi khóa thật:
OPENAI_API_KEY=

`.env` không phải kho bí mật hoàn hảo; chỉ dùng cho phát triển cục bộ và bảo vệ máy. Trên môi trường triển khai, dùng secret manager của nhà cung cấp.

C. Dùng với Cloudflare mà không lộ khóa

  1. Tạo Worker hoặc backend endpoint riêng; giữ API key trong mục **Secrets** của Worker, không phải biến công khai của website.
  2. Với Wrangler, lệnh quản lý secret có dạng npx wrangler secret put OPENAI_API_KEY; nhập khóa vào lời nhắc bảo mật của CLI. Hoặc thêm secret trong Dashboard ở phần cài đặt Worker. Giao diện Cloudflare có thể thay đổi, hãy đối chiếu tài liệu chính thức.
  3. Trang web chỉ gửi nội dung tới endpoint của chính Worker bằng địa chỉ tương đối/HTTPS. Worker mới là nơi gọi nhà cung cấp bằng secret.
  4. Worker cần kiểm tra đầu vào, giới hạn kích thước và tần suất, chặn spam, hạn chế CORS và kiểm soát chi phí. Không để endpoint công khai vô hạn hoặc cho người lạ gọi model tùy ý.
  5. Không gửi dữ liệu học sinh nhạy cảm tới mô hình. Xin phê duyệt của nhà trường trước khi triển khai; thử với dữ liệu giả trước.
Sơ đồ an toàn:
Trình duyệt người dùng → endpoint Worker có giới hạn → nhà cung cấp AI (API key nằm kín ở Worker) → Worker lọc phản hồi → trình duyệt

Không an toàn:
Trình duyệt → API nhà cung cấp với khóa bí mật đặt trong JavaScript/HTML.

D. Lỗi thường gặp

  • 401/Unauthorized: khóa sai, bị thu hồi, thiếu quyền hoặc gửi sai header; kiểm tra cấu hình server, không in khóa ra log.
  • 429/Rate limit hoặc quota: vượt giới hạn tốc độ/sử dụng; giảm tần suất, kiểm tra usage/billing và chính sách tài khoản.
  • Timeout/5xx: dịch vụ hoặc mạng tạm lỗi; xử lý retry có giới hạn và backoff, tránh vòng lặp tạo chi phí.
  • Khóa bị lộ: thu hồi/xóa ngay trên trang quản lý của nhà cung cấp, tạo khóa mới, thay ở secret store, xem usage/billing để tìm hoạt động lạ; xóa khóa khỏi mã và lịch sử công khai nếu có. Xóa commit không đảm bảo bí mật đã biến mất khỏi lịch sử hoặc bản sao.

E. Trước khi cho CLB dùng thật

□ Có người lớn/nhà trường chịu trách nhiệm tài khoản và thanh toán?
□ Secret chỉ nằm ở backend, không nằm trong bundle trình duyệt/Git?
□ Có giới hạn người dùng, tốc độ và mức sử dụng?
□ Có thông báo quyền riêng tư và quy trình báo sự cố?
□ Đã kiểm tra đầu vào, nội dung trả về, lỗi và chi phí?
□ Có thể tắt endpoint và thu hồi key ngay?

Đừng dán API key vào cuộc trò chuyện này. Nếu cần hỗ trợ cấu hình, chỉ gửi tên biến hoặc thông báo lỗi đã xóa mọi bí mật.

Triển khai thật trên Cloudflare Pages

Kết nối trang chat với NVIDIA NIM

  1. Tạo API key tại trang model NVIDIA DeepSeek V4.1 Flash. NVIDIA hiện hiển thị Free Endpoint là available; quota/giới hạn thay đổi, không giả định miễn phí vô hạn.
  2. Deploy website bằng Cloudflare Pages, không phải GitHub Pages thuần. Thư mục functions/api/chat.js tạo endpoint /api/chat.
  3. Trong Cloudflare Dashboard mở Pages project → Settings → Variables and Secrets → Add. Tên biến NVIDIA_API_KEY, dán key, chọn Encrypt để lưu thành Secret. Secret chỉ được backend đọc qua env.NVIDIA_API_KEY.
  4. Redeploy dự án để Function nhận Secret; mở ai-chat.html và thử câu hỏi. Có thể gửi kèm ảnh, nhưng không tải ảnh chứa dữ liệu cá nhân/nhạy cảm.
  5. Nếu có lỗi xác thực, kiểm tra Secret trong đúng môi trường Production/Preview và redeploy. Lỗi 429 thường là rate limit hoặc quota phía NVIDIA.
Trước khi công khai, thêm rate limiting/Turnstile, giới hạn traffic/đầu ra và xin phép nhà trường. Chỉ kiểm tra same-origin trong code chưa đủ chống bot/abuse. Không bao giờ gửi API key vào trình duyệt, GitHub hoặc cuộc trò chuyện.

Hướng dẫn Variables & Secrets của Pages ↗ Mở trang chat AI ↗

API preflight · kiểm tra trước khi chạy

Checklist bảo vệ API key

Đã xác nhận 0/4 điều kiện.
Browser→Worker / backend→Provider APISecret chỉ nằm phía server