返回博客

快速开始指南

从 Google Colab 发出第一个请求:将 API 密钥保存在 Secrets 中

在 Colab 笔记本中发送你的第一个聊天补全请求,密钥存储在 Colab Secrets 中,然后读取回答和 token 用量。

作者:CheapTokens Team发布于 4 分钟阅读

Google Colab 笔记本单元格从 Colab Secrets 读取密钥并调用 CheapTokens API
本页内容
  1. 你需要什么
  2. 将密钥放入 Colab Secrets
  3. 运行第一个请求
  4. 请求的费用
  5. 当单元格失败时
  6. 分享与轮换

你可以在 Colab 笔记本中运行第一个请求,无需在电脑上安装任何东西。将密钥保存在 Colab Secrets 中,用 userdata.get(...) 读取它,将 openai 包指向 https://api.cheaptokens.dev/v1,并打印 choices[0].message.content 和 usage。密钥永远不会出现在单元格中,因此分享笔记本不会分享你的密钥。

最后这一点正是值得费心的原因。假设你完成了笔记本并把链接发给同学。如果密钥被粘贴到单元格中,他们现在就拥有了它。如果它保存在 Secrets 中,他们只会得到代码,别的什么都没有。

本指南建立在使用普通 requests 的第一个请求之上。这里唯一的新内容是密钥存放的位置以及笔记本如何读取它。关于在笔记本电脑上实现同样思路,请参阅将密钥存储在环境变量中。

你需要什么#

  • 一个 Google 账号,以及在 colab.research.google.com 上新建的笔记本。
  • 一个 CheapTokens API 密钥和已充值的余额。密钥和余额在你的账户中;文档展示了具体步骤。
  • 五分钟。

The API 兼容 OpenAI Chat Completions,因此标准的 openai Python 包只需换一个 base_url 即可使用。openai-python README(2026 年 11 月 5 日查阅)列出 Python 3.10 或更高版本以及 pip install openai。

将密钥放入 Colab Secrets#

在笔记本的左侧边栏中有一个钥匙图标,点击它会打开 Secrets 面板。添加一个新 secret,将其命名为 CHEAPTOKENS_KEY,将你的密钥粘贴为值,并为你正在使用的笔记本开启笔记本访问权限。按钮的措辞可能会变化,因此请寻找钥匙图标,而不是菜单路径。

现在就选好你想要的名称:它就是你要传给代码的字符串。名称写错是很容易犯的错误,错误部分展示了它的表现。

Before and after: a key pasted in the cell versus userdata.get
Left: the key sits in the cell and travels with the notebook. Right: the cell only names the secret.

运行第一个请求#

Colab 使用 google.colab.userdata.get(name) 读取 secrets,这是 Google colabtools 模块中的一个函数(文档字符串于 2026 年 11 月 5 日查阅)。安装 SDK,读取 secret,发送一个请求。

分步操作

三个单元格中的第一个请求

安装包

在第一个单元格中运行此代码。-q 标志会保持输出简短,并且无论该包是否已在运行时中都能工作。

python
!pip install -q openai

读取密钥并创建客户端

密钥来自 Secrets。这里没有粘贴任何内容。

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',
)

发送一个请求并打印结果

使用带开发者前缀的完整模型 id。不接受短 id。

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)

第一个 print 显示模型的回答。第二个打印两个数字:你发送的 token 数和模型写入的 token 数。这就是该请求的全部账单,因此我们每次都打印它。

请求的费用#

Token 是你付费的对象,所以请看输出的第二行。假设像上面这样的简短问题大约使用 40 个输入 token,回答是 150 个输出 token。按当前价格,该请求花费 $0.000016,一千个这样的请求花费 $0.0156。将 40 和 150 替换为你的笔记本打印出的两个数字。

DeepSeek-V4-Flash 在这里是默认模型是有原因的:380K 上下文,每次回答最多 32,768 个输出 token,并且全天统一价格,没有高峰时段。一个余额覆盖所有模型,因此你可以在此单元格中更换模型而无需更改其他任何内容。试试 zai-org/GLM-5.3-Flash(390K 上下文,最多 8,192 个输出 token)并再次运行该单元格。查看所有模型和价格获取完整列表。

自己试试试一试:resp.choices[0].finish_reason 是什么?显示答案

在其他打印语句下方添加 print(resp.choices[0].finish_reason)。如果回答自然结束,你会看到 stop。设置 max_tokens=5 并再次运行:回答被截短,你会看到 length,这意味着是限制阻止了它,而不是模型。

当单元格失败时#

来自 secrets 一侧的错误会首先出现,在任何请求离开 Colab 之前。colabtools 源代码(2026 年 11 月 5 日查阅)指出 userdata.get 可能引发三种错误。

Colab error: SecretNotFoundError
SecretNotFoundError means the name in the code doesn't match any secret.
  • SecretNotFoundError:没有该名称的 secret。将 userdata.get('...') 中的字符串与 Secrets 面板中的名称逐字母比较。大小写很重要。
  • NotebookAccessError:secret 存在,但此笔记本无权访问它。在 Secrets 面板中打开访问开关并重新运行该单元格。
  • TimeoutException:Colab 没有响应获取 secret 的请求。错误消息说 secrets 只能在代码从 Colab UI 运行时获取,因此请在 Colab 笔记本本身中运行该单元格,而不是在导出的脚本中。

如果 secret 加载成功但请求仍然失败,问题就在 API 一侧。401 意味着密钥错误或缺失;404 通常指向错误的 base URL 或模型 id。API 401 或 404:密钥、base URL、模型 id 会逐一讲解两者,而使用 GET /v1/models 列出模型展示了如何复制确切的 id。

分享与轮换#

分享笔记本时,调用 userdata.get 的代码也会随之分享;密钥不在任何单元格或输出中,因此没有什么可泄露的。打开笔记本的人需要自己的同名 secret,否则他们会得到 SecretNotFoundError(见上文)。

如果你创建了新密钥,请在 Secrets 面板中更新值;代码保持不变,因为它只命名 secret。

有一个习惯仍然很重要:永远不要打印密钥。像 print(userdata.get('CHEAPTOKENS_KEY')) 这样的单元格会把它放入输出中,而输出会随笔记本一起保存。

快速检查

在共享的 Colab 笔记本中,API 密钥应该放在哪里?

显示答案

答案: 在 Colab Secrets 中,用 userdata.get 读取

单元格及其输出会随笔记本一起保存并分享;代码只命名 secret。

下一步:将回答放入循环、聊天或小型工具中。文档涵盖了 API 的其余部分。