在Python中使用有效密钥时出现Google Gemini API的KeyError

我目前正在尝试编写一个程序,该程序从NASA天文图片每日一图API获取数据,然后将数据以简单网页的形式呈现给用户。API返回的是JSON格式的数据,我在Python中将其转换为简单的文本字符串。由于这个字符串非常长,我试图使用Google的Gemini AI API将文本作为输入并提供摘要。然而,每当我使用我的API密钥时,它只是返回一个KeyError,指向os.py文件中的行(不是我的程序)。我可以通过Google AI Studio网站访问我的API,网站上显示有几次请求被接收。任何帮助都将不胜感激!

以下是我的代码:(请查看第12-14行以了解API配置,以及apod()函数的最后部分以了解问题代码)(为了隐私,已将实际的API密钥替换为API KEY)

# 导入功能模块import requests import google.generativeai as genai # AI编译器import os# requests模块 --> 允许我们向API发送/接收数据包# 我们在这个程序中使用了3个API;2个NASA开放API和一个Google AI API SDK。# 我们从前两个API中提取信息,并使用Google API进行总结,# 然后以简单网页的形式呈现给用户。# NASA API配置key = 个人开发密钥 # --> NASA API密钥# Google API配置 --> 在开发AI密钥后迁移到openai genai.configure(api_key=os.environ["API KEY"]) # --> Google AI API model = genai.GenerativeModel("gemini-1.5-flash") # --> 生成稳定模型# API引用字典apis = {    "apod" : "https://api.nasa.gov/planetary/apod?api_key="+ key }# 检查API错误代码rcodes = {    200 : "成功",    301 : "重定向",    400 : "无效请求",    401 : "无效登录",    403 : "未授权页面",    404 : "页面未找到",    503 : "服务器未准备好"}# 函数用于通过Google OpenAI库传递文本: -> # 解析每个API数据的函数块def apod(data):    # 此块将apod数据追加到data.txt    f.write(i + ": \n")    print(data['date']) # 日期    f.write(str(data['url'] + "\n")) # URL         imgexp = str(data['explanation']) # 变量用于存储说明    f.write(imgexp) # <-- 将说明写入data.txt     airesp = model.generate_content("总结以下文本,优先考虑科学信息,同时保持足够简单,以便非专业人士也能理解:" + imgexp)    print(airesp)        f = open("data.txt", "w") # 以写入模式打开数据文件for i in apis: # 遍历API列表        # 从API获取数据:I        response = requests.get(apis[i]) # 返回状态代码    respt = response.json() # 将API数据的文本值存储为字典        # 完全集成后删除此部分 -->    print(i + "-" + rcodes[response.status_code]) # 打印状态代码     print(respt['url'])     # 完全集成后删除此部分 <--    # 确定解析函数的块    if i == "apod":        apod(respt) # <-- 将API响应的字典通过解析函数传递    else: pass    # 最后调用此行,以启用完整数据写入f.close() # 关闭文件以防止意外写入

运行此代码会导致:

genai.configure(api_key=os.environ['API KEY']) # --> Google AI API  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/os.py", line 675, in __getitem__    raise KeyError(key) from NoneKeyError: 'API KEY'

回答:

您不应将API密钥包含在代码中 – 请将它们分开存放。

一种方法(有几种方法)是使用一个Python脚本,从中导入所需的值。在我的开发环境中,我有一个apikeys.py文件来存储我的密钥。

使用这种方法,您可以实现一个更简单的实现,如下所示:

import google.generativeai as genaiimport requestsfrom apikeys import NASA, GAPIfrom functools import cacheAI = "总结以下文本,优先考虑科学信息,同时保持足够简单,以便非天文学家也能理解:"APIS = [    "https://api.nasa.gov/planetary/apod"]MODEL = "gemini-1.5-flash"@cachedef get_model():    genai.configure(api_key=GAPI)    return genai.GenerativeModel(MODEL)if __name__ == "__main__":    with requests.Session() as session:        for api in APIS:            with session.get(api, params={"api_key": NASA}) as response:                response.raise_for_status()                if explanation := response.json().get("explanation"):                    print(get_model().generate_content(AI + explanation).text)                else:                    print("没有说明!")

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注