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:
- 新建一个名为
OPENAI_API_KEY的 Secret。 - 填入真实 API key。
- 为当前 Notebook 开启访问权限。
- 使用下面的代码读取密钥。
当前版本的 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 代码问题。
备注:内容仅供参考。
