Press "Enter" to skip to content

使用NASA的Power API创建气候GPT

ChatGPT中创建的图片

TL;DR

在本文中,我们探索了OpenAI的新功能GPTs,它提供了一种无需编码的方式来快速创建能够自动调用外部API获取数据并生成代码回答数据分析问题的AI代理。仅仅花费几个小时,我们就构建了一个可以根据来自NASA Power API的数据回答与气候相关的问题并执行数据分析任务的聊天机器人。OpenAI创建的GPT用户体验非常优秀,大大降低了创建领先的AI代理的门槛。然而,外部API调用配置可能有些技术挑战,并且需要API具有可用的openapi.json文件。此外,成本仍然是未知的,虽然在预览版中GPTs每天可允许的交互次数似乎有一些限制。然而,随着OpenAI的GPT商店即将推出,我们可能会看到这些GPT AI代理的爆炸增长,即使现在它们也提供一些令人惊叹的功能。

GPT是什么?

OpenAI最近推出了GPTs,为非技术用户提供了一种创建由强大的GPT-4大型语言模型(LLM)支持的AI聊天代理的方式。尽管通过第三方库(如LangChainautogen)在一段时间内已经可以实现GPTs提供的大部分功能,但GPTs提供了一种本地解决方案。这意味着它具有一个漂亮易用的界面,并与OpenAI生态系统紧密集成。重要的是,它们很快也将在新的GPT商店中提供,这使得我们有可能看到一个应用商店的情况以及AI代理的爆炸增长。或者不会,很难说,但潜力确实存在。

GPTs具有一些非常强大的功能,特别是能够浏览网页、生成和运行代码以及最重要的功能,与API进行交互以获取外部数据的能力。最后一个功能非常强大,因为这意味着可以轻松在任何使用API呈现数据的数据存储之上创建一个AI代理。

创建一个GPT

GPTs目前仅适用于ChatGPT Plus订阅用户。要创建一个GPT,您需要访问chat.openai.com/create,然后会提示您提供关于您的GPT将要做的事情的一些细节以及您想使用的缩略图图像(可以使用DALL-E-3自动生成)。

使用NASA的Power API创建气候GPT 四海 第2张

为本分析,我使用了提示语“创建一个使用NASA Power API获取数据的气候指标聊天机器人”。这将创建一个带有以下系统提示的GPT(在“配置”下的“说明”字段中)…

GPT被设计为NASA Power API Bot,专门用于检索和解释各个位置的气候数据。它的主要作用是帮助用户访问和理解与气候相关的信息,具体通过与NASA的Power API进行接口交互。它应专注于提供准确、最新的气候数据,如温度、降水量、太阳辐射和其他相关的环境参数。为了确保准确性和相关性,机器人应避免对其所提供范围之外的数据进行推测,并避免提供超出API数据支持的预测或解释。它应引导用户提出数据请求,并在需要对查询进行精确说明的情况下进行澄清。在交互中,机器人应以客观事实和直接明了的方式呈现数据,如果需要,它应提供有关如何解释数据的指导,但要保持中立、提供信息的语气,而不涉及个性化或幽默。如果用户的请求含糊不清或缺乏所需的具体细节以从NASA Power API获取相关数据,机器人应明确要求澄清。

这在我提供的单个句子的基础上似乎非常合理。当然,这可以根据品味进行调整,正如我们将在下面看到的那样,这也是引导聊天机器人关于API调用的好方法。

配置能力

GPT可以配置各种能力。对于我们的分析,我们将停用生成图像的能力,并保留浏览Web和生成和运行代码的能力。对于生产GPT,我可能会停用Web访问,并确保通过指定的API提供所有所需的数据,但对于我们的分析,我们将保持它开启,因为它便于获取地点的纬度和经度,这是调用NASA Power API所需的。

使用NASA的Power API创建气候GPT 四海 第3张

配置API访问

这是数据驱动GPT的真正核心,配置API集成。为了做到这一点,您需要在GPT顶部点击“配置”,然后向下滚动,然后点击“创建操作”…

配置GPT以与NASA Power API通信以获取气候数据

这将打开一个部分,您可以在此提供API的详细信息,可以通过提供链接或粘贴openapi.json(以前是swagger)API定义。

当然,这带来一个约束,即外部API需要有一个可用的openapi.json文件。尽管非常常见,但对于许多重要的API来说并不成立。此外,默认的openapi.json通常需要进行一些调整才能使GPT正常工作。

NASA Power API

对于这次分析,我们将使用NASA的全球能源资源(POWER) API获取气候指标。这个令人惊叹的项目结合了各种数据和模型模拟,为点位置的气候指标提供了一组API。有几个API端点,对于这个分析,我们将使用包含Indicators API的,其中包含一个在GPT的操作配置窗格中粘贴进去的openapi.json规范。它需要做一些调整:(i)确保任何参数描述在300个字符限制之下;(ii)添加一个“servers”部分…

"servers": [  {    "url": "https://power.larc.nasa.gov"  }],

当GPT用户界面中的所有异常都解决后,openapi.json中指定的端点显示出来…

NASA Power API的指标端点,在GPT用户界面上显示的略微调整的openapi.json规范

我本可以添加其他API,比如气候学,但OpenAI不支持具有相同端点域的多个操作,也就是说,我无法为NASA提供的每个openapi.json创建一个操作。我将不得不将它们合并成一个更大的openapi.json文件,这并不是很困难,但我选择保持这次分析简单,只使用指标端点。

调整系统提示

通过对API进行直接实验,我发现每次调用都没有提供’ user ‘字段,导致API异常。为了解决这个问题,我将以下内容添加到系统提示中…

始终将 'user' API查询参数设置为'<我的API ID>'

在API调用中,我创建了一个包含字母和数字的用户ID。

测试我们的GPT

在GPT编辑界面中,左侧窗格用于调整配置,右侧窗格用于预览。我发现预览提供了一些在发布的GPT中可用的额外调试信息,对于调查API问题特别有用。

当我询问“东京的平均降雨量是多少”时,我收到了使用API的确认提示…

在首次使用API操作时,GPT所有者会提示进行确认

我选择了“始终”,然后GPT调用了API。然而,它收到的回应是需要一个年份范围…

使用NASA的Power API创建气候GPT 四海 第7张

这相当酷,它已经建议使用2018年至2022年的年份范围,我通过回答“是”接受了这个建议…

GPT能够使用NASA的Power API检索和呈现东京的平均降雨量

API页面上使用“尝试一下”按钮,输入上述年份范围和东京的纬度/经度(35.6895/139.6917),我得到了一个回答。由于我对变量名不熟悉,我询问了GPT…

GPT在呈现API变量名方面非常有帮助

回到API响应,我们看到…

  "PRECTOTCORR": {    "1": 69.1,    "2": 58.6,    "3": 154.9,    "4": 151.2,    "5": 158.4,    "6": 184.3,    "7": 247.3,    "8": 140.4,    "9": 226.8,    "10": 226.2,    "11": 100.3,    "12": 73.7  },

嗯,所以基本的API数据实际上为每个月提供了数据,但是GPT的回应将前5个月份作为年度平均值呈现。

所以一切看起来都很好,但正如我们经常发现的那样,我们需要在LLM方面进行一些调整以避免出现幻觉。让我们在GPT配置的“说明”部分提供更多关于API的上下文信息…

API提供了指定年份范围的平均数据。如果返回的数据有12个元素,那么很可能这是一个月度平均值的列表。

再次尝试“东京的平均降雨量是多少”…

使用NASA的Power API创建气候GPT 四海 第10张

现在哪个是正确的。通过一点提示来提高性能的一个很好的例子。

让我们要求它通过问“请绘制每月平均值”来进行一些分析……

GPTs can run code using data they retrieved from APIs to provide basic data analysis

这非常聪明!上面图中的值与直接在API中检索的值对齐。在其响应的末尾,有一个链接,您可以查看它生成和运行的代码……

使用NASA的Power API创建气候GPT 四海 第12张

好的,现在让我们尝试一些更复杂的东西。首先我问了一下有哪些可用的变量……

GPTs can interrogate documentation API endpoints

它自动访问了配置端点以获取元数据。使用这个,让我们问“相对湿度是否与近期5年内的太阳辐射在威尔士南尼斯的Neath地区有相关性”……

使用NASA的Power API创建气候GPT 四海 第14张

它查询了API以获取数据,然后生成代码创建了一张图表。非常惊人,但是没有回答完整的问题,所以我们通过询问“请计算相关系数”来坚持……

使用NASA的Power API创建气候GPT 四海 第15张

点击链接查看代码……

import pandas as pdimport seaborn as sns# 2018年至2022年间威尔士南尼斯的Neath地区相对湿度和太阳辐射的月度数据months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]relative_humidity = [4.2, 4.3, 4.7, 4.6, 4.0, 4.0, 3.7, 3.4, 3.4, 3.3, 3.1, 3.5]  # 从MCWBR_DB或类似数据库中采样的值solar_radiation = [0.84, 1.65, 2.81, 4.35, 5.36, 5.45, 5.45, 4.34, 3.29, 1.94, 1.03, 0.65]  # 从RADIATION_AVG中采样的值# 创建DataFrame数据 = pd.DataFrame({'Month': months, 'Relative Humidity': relative_humidity, 'Solar Radiation': solar_radiation})# 绘图plt.figure(figsize=(10, 6))sns.scatterplot(data=data, x='Relative Humidity', y='Solar Radiation')plt.title('Neath地区相对湿度与太阳辐射的相关性(2018-2022)')plt.xlabel('相对湿度')plt.ylabel('太阳辐射')plt.grid(True)plt.show()# 计算相对湿度和太阳辐射之间的相关系数correlation = data['相对湿度'].corr(data['太阳辐射'])correlation

这是合理的。

好的,那么多个地点的比较呢?首先,我将这个添加到指令(系统提示)中以明确……

如果要求关于多个地点,请调用每个地点的API以获取数据。

现在,让我们问“过去5年中,Svalbard是否比Bargoed Wales更潮湿”……

使用NASA的Power API创建气候GPT 四海 第16张

由于API需要经度和纬度,GPT确认了这种方法。如果我们将地理编码API配置为操作,则无需此操作,但现在使用中心坐标就足够了。

GPT调用了两个位置的API,提取了数据,并进行了比较…

使用NASA的Power API创建气候GPT 四海 第17张

我在Bargoed长大,可以坦率地说那是一个非常多雨的地方。通过直接调用API,以上数值是正确的。

限制

在这个分析过程中,出现了一些挑战。

首先,GPT-4每天所允许的交互次数似乎有限制。在经过一两个小时的测试后达到了限制,似乎比发布的GPT-4限制较低,因此可能与GPT的预览性质有关。这将阻止任何生产部署,但希望随着GPT商店的推出而解决。

性能有时也可能会有点慢,但考虑到GPT调用外部API和运行代码,这是可以接受的。用户体验非常好,清楚地向用户表明事物正在进行中。

成本是一个未知数,或者至少我们无法看到任何显着的成本影响,但我们将继续跟踪此问题。GPT会生成代码并分析API的冗长响应,因此令牌成本可能成为许多组织使用它们的障碍。

结论与未来工作

在这个分析中,我们仅仅使用了NASA的Power API端点中的“指标”。使用NASA的所有Power端点并加入地理编码以创建一个真正全面的气候聊天机器人将不会很费力。

GPT提供了一种低代码的方法来开发与API自动接口并生成代码进行数据分析的最先进的AI代理。它们具有潜在的改变游戏规则的能力,我们能够在几个小时内创建一个相当先进的气候聊天机器人,而无需编写任何代码!

它们绝对还不完美,配置用户体验非常好,但在一些方面例如API错误报告方面,用户会被凭空猜测。外部API设置需要技术知识,有些API可能缺少所需的openapi.json文件,使其更难实现。成本可能也是不可行的,但由于GPT目前处于预览状态,很难说。像任何LLM应用一样,确保事实的正确性以及常规的设计和工程工作流程当然仍然适用于任何软件项目。

GPT很棒,但并不是魔法… 至少目前还不是。

参考资料

关于NASA的全球能源资源预测(POWER):“这些数据是通过NASA Langley研究中心(LaRC)POWER项目,由NASA地球科学/应用科学计划资助获得的。”

Leave a Reply

Your email address will not be published. Required fields are marked *