事情本身不复杂,线索都在日志里。初始化模型时报 ValueError: No API key found,明明在终端里 export 过,脚本里就是读不到。

第一反应是「项目里存在 .env 但没被加载」,验证下来不成立。

原因不止一个,得分开看。环境变量只在当前终端有效,服务是别处启动的。少数情况下是变量名拼写与库要求的不一致。

还有一种情况,容器环境没有把变量传进去。

第一件事是打印进程里实际可见的变量

python -c "import os;print({k:v[:6] for k,v in os.environ.items() if 'API_KEY' in k})"

显式传入 key 绕开环境问题

llm = OpenAI(api_key=os.environ['OPENAI_API_KEY'], model='gpt-4o-mini')

接着用 dotenv 加载项目配置

from dotenv import load_dotenv; load_dotenv()

末了容器启动时显式传环境变量

docker run -e OPENAI_API_KEY=$env:OPENAI_API_KEY image_name

当时还开着另一个排查窗口,两边日志对照着看才定位到。

改完先别撤,确认这几项。初始化成功,能完成一次问答调用,日志里不再出现找不到 key 的错误。

容易忽略的是,环境变量的问题几乎都出在作用域上,服务方式启动时读的是服务自己的环境,和当前终端不是一回事。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189