Quay lại blog

Bắt đầuHướng dẫn

Yêu cầu đầu tiên từ Google Colab: giữ khóa API trong Secrets

Gửi chat completion đầu tiên từ notebook Colab với khóa được lưu trong Colab Secrets, sau đó đọc câu trả lời và mức sử dụng token.

Bởi CheapTokens TeamĐã xuất bản 6 phút đọc

Cell notebook Google Colab đọc khóa từ Colab Secrets và gọi API CheapTokens
Trên trang này
  1. Những gì bạn cần
  2. Đặt khóa vào Colab Secrets
  3. Chạy yêu cầu đầu tiên
  4. Yêu cầu tốn bao nhiêu
  5. Khi một cell thất bại
  6. Chia sẻ và xoay khóa

Bạn có thể chạy yêu cầu đầu tiên trong một notebook Colab mà không cần cài đặt gì trên máy tính. Lưu khóa trong Colab Secrets, đọc nó bằng userdata.get(...), trỏ gói openai vào https://api.cheaptokens.dev/v1, và in choices[0].message.content và usage. Khóa không bao giờ nằm trong một cell, nên chia sẻ notebook không chia sẻ khóa của bạn.

Phần cuối đó chính là lý do để bận tâm. Giả sử bạn hoàn thành notebook và gửi liên kết cho một bạn học. Nếu khóa được dán vào một cell, giờ họ đã có nó. Nếu nó nằm trong Secrets, họ nhận được mã và không gì khác.

Hướng dẫn này dựa trên yêu cầu đầu tiên với requests thuần. Ở đây điều mới duy nhất là nơi khóa nằm và cách notebook đọc nó. Với cùng ý tưởng trên laptop, xem lưu khóa trong biến môi trường.

Những gì bạn cần#

  • Một tài khoản Google và một notebook mới tại colab.research.google.com.
  • Một khóa API CheapTokens và số dư đã nạp. Khóa và số dư nằm trong tài khoản của bạn; tài liệu chỉ ra các bước chính xác.
  • Năm phút.

API tương thích với OpenAI Chat Completions, nên gói Python openai tiêu chuẩn hoạt động với một base_url khác. README của openai-python (kiểm tra ngày 5 tháng 11 năm 2026) liệt kê Python 3.10 trở lên và pip install openai.

Đặt khóa vào Colab Secrets#

Trong thanh bên trái của notebook có một biểu tượng chìa khóa, mở bảng Secrets. Thêm một secret mới, đặt tên là CHEAPTOKENS_KEY, dán khóa của bạn làm giá trị, và bật quyền truy cập notebook cho notebook bạn đang làm việc. Cách diễn đạt của các nút có thể thay đổi, nên hãy tìm biểu tượng chìa khóa thay vì đường dẫn menu.

Chọn tên bạn muốn ngay bây giờ: đó là chuỗi bạn sẽ truyền cho mã. Sai tên là một lỗi dễ mắc, và phần lỗi cho thấy nó trông như thế nào.

Trước và sau: khóa dán trong cell so với userdata.get
Trái: khóa nằm trong cell và đi theo notebook. Phải: cell chỉ nêu tên secret.

Chạy yêu cầu đầu tiên#

Colab đọc secret bằng google.colab.userdata.get(name), một hàm trong module colabtools của Google (docstring kiểm tra ngày 5 tháng 11 năm 2026). Cài SDK, đọc secret, gửi một yêu cầu.

Từng bước một

Yêu cầu đầu tiên của bạn trong ba cell

Cài gói

Chạy lệnh này trong cell đầu tiên. Cờ -q giữ đầu ra ngắn gọn, và nó hoạt động dù gói đã có trong runtime hay chưa.

python
!pip install -q openai

Đọc khóa và tạo client

Khóa đến từ Secrets. Không có gì được dán ở đây.

python
from google.colab import userdata
from openai import OpenAI

client = OpenAI(
    api_key=userdata.get('CHEAPTOKENS_KEY'),
    base_url='https://api.cheaptokens.dev/v1',
)

Gửi một yêu cầu và in kết quả

Dùng id model đầy đủ với tiền tố developer. Id ngắn không được chấp nhận.

python
resp = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    messages=[{'role': 'user', 'content': 'Explain a token in one sentence.'}],
    max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

Lần print đầu tiên hiển thị câu trả lời của model. Lần thứ hai in hai con số: token bạn đã gửi và token model đã viết. Đó là toàn bộ hóa đơn cho yêu cầu, đó là lý do chúng ta in nó mỗi lần.

Yêu cầu tốn bao nhiêu#

Token là thứ bạn trả tiền, nên hãy xem dòng thứ hai của đầu ra. Giả sử một câu hỏi ngắn như trên dùng khoảng 40 token vào và câu trả lời là 150 token ra. Yêu cầu đó tốn $0.000016 theo giá hiện tại, và một nghìn yêu cầu như vậy tốn $0.0156. Thay 40 và 150 bằng hai con số mà notebook của bạn đã in.

DeepSeek-V4-Flash là mặc định ở đây vì một lý do: ngữ cảnh 380K, tối đa 32.768 token đầu ra mỗi câu trả lời, và một mức giá vào bất kỳ thời điểm nào trong ngày, không có giờ cao điểm. Một số dư bao trùm mọi model, nên bạn có thể đổi model trong cell này mà không thay đổi gì khác. Thử zai-org/GLM-5.3-Flash (ngữ cảnh 390K, tối đa 8.192 token đầu ra) và chạy lại cell. Xem tất cả model và giá để có danh sách đầy đủ.

Tự mình thử xemThử xem: resp.choices[0].finish_reason là gì?Hiện đáp án

Thêm print(resp.choices[0].finish_reason) dưới các lệnh in khác. Nếu câu trả lời kết thúc tự nhiên bạn thấy stop. Đặt max_tokens=5 và chạy lại: câu trả lời bị cắt ngắn và bạn thấy length, nghĩa là giới hạn đã dừng nó, không phải model.

Khi một cell thất bại#

Lỗi từ phía secrets đến trước, trước khi bất kỳ yêu cầu nào rời khỏi Colab. Mã nguồn colabtools (kiểm tra ngày 5 tháng 11 năm 2026) nói rằng userdata.get có thể ném ba lỗi.

Lỗi Colab: SecretNotFoundError
SecretNotFoundError nghĩa là tên trong mã không khớp với bất kỳ secret nào.
  • SecretNotFoundError: không có secret nào với tên đó. So sánh chuỗi trong userdata.get('...') với tên trong bảng Secrets, từng chữ cái. Phân biệt chữ hoa chữ thường.
  • NotebookAccessError: secret tồn tại, nhưng notebook này không có quyền truy cập nó. Bật công tắc truy cập trong bảng Secrets và chạy lại cell.
  • TimeoutException: Colab không trả lời yêu cầu lấy secret. Thông báo lỗi nói rằng secret chỉ có thể được lấy khi mã chạy từ giao diện Colab, nên hãy chạy cell trong chính notebook Colab, không phải trong một script đã xuất.

Nếu secret tải được và yêu cầu vẫn thất bại, vấn đề nằm ở phía API. Một 401 nghĩa là khóa sai hoặc thiếu; một 404 thường chỉ ra base URL hoặc id model sai. API 401 hoặc 404: khóa, base URL, id model đi qua cả hai, và liệt kê model với GET /v1/models cho thấy cách sao chép id chính xác.

Chia sẻ và xoay khóa#

Chia sẻ notebook và mã gọi userdata.get đi theo nó; khóa không nằm trong bất kỳ cell hay đầu ra nào, nên không có gì để rò rỉ. Ai mở notebook cần secret riêng của họ với cùng tên, nếu không họ nhận được SecretNotFoundError (xem ở trên).

Nếu bạn tạo khóa mới, cập nhật giá trị trong bảng Secrets; mã vẫn giữ nguyên vì nó chỉ nêu tên secret.

Một thói quen vẫn quan trọng: không bao giờ in khóa. Một cell như print(userdata.get('CHEAPTOKENS_KEY')) đưa nó vào đầu ra, và đầu ra được lưu cùng notebook.

Kiểm tra nhanh

Khóa API nên nằm ở đâu trong một notebook Colab được chia sẻ?

Hiện đáp án

Trả lời: Trong Colab Secrets, đọc bằng userdata.get

Một cell và đầu ra của nó được lưu cùng notebook và chia sẻ với nó; mã chỉ nêu tên secret.

Bước tiếp theo: đưa câu trả lời vào một vòng lặp, một cuộc trò chuyện hoặc một công cụ nhỏ. Tài liệu bao quát phần còn lại của API.