PAYATHON 2026

Colab 中 OpenAI API key 缺失与 syntax error

技术老齐

结论

<API-KEY> 是错误信息中的占位符,不能直接写进 Python 代码。Python 会把尖括号当作运算符解析,所以会报 SyntaxError。

在 Colab 中,建议把密钥保存在 Colab Secrets 中,并使用名称 OPENAI_API_KEY。不要使用 API-KEY。环境变量名通常使用下划线,python-dotenv 和 OpenAI SDK 默认约定的名称也是 OPENAI_API_KEY。

推荐方式:使用 Colab Secrets

打开 Colab 左侧边栏中的钥匙图标,进入 Secrets:

  1. 新建一个名为 OPENAI_API_KEY 的 Secret。
  2. 填入真实 API key。
  3. 为当前 Notebook 开启访问权限。
  4. 使用下面的代码读取密钥。

当前版本的 OpenAI Python SDK 可以这样使用:

from google.colab import userdata
from openai import OpenAI

api_key = userdata.get("OPENAI_API_KEY")

if not api_key:
    raise RuntimeError("未在 Colab Secrets 中找到 OPENAI_API_KEY")

client = OpenAI(api_key=api_key)

def get_completion(prompt, model="gpt-4o-mini"):
    response = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "user", "content": prompt}
        ],
        temperature=0,
    )
    return response.choices[0].message.content

你也可以先把密钥写入当前 Colab 运行时的环境变量,再让 SDK 自动读取:

import os
from google.colab import userdata
from openai import OpenAI

os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")

client = OpenAI()

这个环境变量只在当前运行时中有效,不需要把密钥直接写进 Notebook。

如果使用 .env 文件

.env 文件中的变量应写成:

OPENAI_API_KEY=sk-你的真实密钥

读取方式如下:

import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

api_key = os.getenv("OPENAI_API_KEY")

if not api_key:
    raise RuntimeError("OPENAI_API_KEY 未设置或 .env 文件未被加载")

client = OpenAI(api_key=api_key)

Colab 中不一定有本地 .env 文件。如果 find_dotenv() 找不到文件,load_dotenv() 不会自动创建变量。此时 os.getenv(...) 会返回 None,最终触发 AuthenticationError。

可以用下面的代码检查变量是否读取成功,但不要打印完整密钥:

print("API key loaded:", bool(api_key))

为什么原代码没有读到密钥

原代码使用了:

openai.api_key = os.getenv("API-KEY")

这段代码只会读取名为 API-KEY 的环境变量。如果密钥实际保存在 OPENAI_API_KEY 中,读取结果就是 None。应改为:

api_key = os.getenv("OPENAI_API_KEY")

如果使用的是较旧版本的 OpenAI Python SDK,可以采用旧写法:

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

旧版的:

openai.ChatCompletion.create(...)

与当前 SDK 的调用方式不同,不能把两套示例混在一起使用。如果安装的是当前 SDK,应创建 OpenAI() 客户端,并调用 client.chat.completions.create(...)。

为什么 <API-KEY> 会产生语法错误

下面这行代码不是合法的 Python:

openai.api_key = <API-KEY>

< 和 > 不是字符串引号。即使只是临时测试,直接填写密钥时也必须使用字符串:

openai.api_key = "sk-你的真实密钥"

不建议直接填写,因为密钥可能保存在 Notebook、共享链接或执行历史中。如果密钥已经公开,应立即撤销并重新生成。

原代码中还需要修正的问题

修复密钥问题后,代码中还有几处可能引发错误:

  • Python 使用 # 添加注释,不能使用 //:
# I get an error when I run this block
  • 函数体必须缩进:
def get_completion(prompt, model="gpt-4o-mini"):
    messages = [{"role": "user", "content": prompt}]
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0,
    )
    return response.choices[0].message.content
  • 代码定义了 get_completion(),调用的却是没有展示定义的 get_completion_from_messages()。需要统一函数名,或者补充后者的定义。
  • Panel 的 TextInput 通常使用 inp.value 读取内容,而不是 inp.value_input:
prompt = inp.value

正确的处理顺序是:先通过 Colab Secrets 或 OPENAI_API_KEY 环境变量提供密钥,再按照已安装的 OpenAI SDK 版本选择对应的调用方式,最后修正缩进、注释和函数名等 Python 代码问题。

备注:内容仅供参考。