使用 ChatGPT 访问实时数据

ChatGPT以最快的方式取代了搜索,成为获取问题答案的最佳途径,但直到最近它一直缺少一个重要功能——获取实时数据的能力。过去,当向ChatGPT提出需要时效知识的话题性问题时,它的回答如下:

“When was the hottest year on record?” “… 2020 …”

那么,Open AI是如何解决这个问题的呢?

他们引入了动作:一小段代码,允许ChatGPT与外部系统进行交互。

OpenAI已经将ChatGPT与许多行动进行了整合。如果您要求一张图片,DALL·E行动会为您创建一张,如果您提出一个需要最新回答的问题,它通常会查询必应。

在本文中,我将展示如何快速简便地编写自己的动作,以从任何来源访问实时信息。

示例 - 域名可用性检查器

创建网站时,通常要为您的品牌注册一个域名。但是目前已经注册了超过3.65亿个域名,所以很难获得您想要的第一个域名。通常需要一些创意!

ChatGPT拯救之师

在发现icecream.com被占用后,我问Chat GPT寻求我冰淇淋公司的备选域名。

太棒了!我特别喜欢ScoopSensation.com。然而,将每个建议都复制到域名注册网站中一遍又一遍地被告知不可用,这样会非常耗时。

如果我们能让Chat GPT检查每个答案,那岂不是很酷?

好消息是,我们很幸运因为我们可以完全做到这一点。我将向您展示如何做到这一点。

API API(Application Programming Interface,应用程序编程接口)是一组定义软件组件之间交互的规则和方法。它允许不同的应用程序之间进行数据交换和功能共享。API可以提供访问其他应用程序或服务的接口,使开发人员能够直接使用其功能而不必重新编写代码。 API的设计可以用于不同的操作系统、编程语言和开发环境。它可以是一组预定义的函数和协议,也可以是一组共享库和工具。 API在现代软件开发中起着重要的作用,它使开发人员能够轻松地将不同的组件和服务集成到他们的应用程序中,从而提高开发效率和灵活性。通过使用API,开发人员可以访问各种功能,如数据存储、图像处理、地理位置服务等。 很多互联网公司和服务提供商都提供自己的API,开发人员可以使用这些API来创建与其平台或服务集成的应用程序。API在移动应用开发、网站开发、软件集成等领域都得到广泛应用。

ChatGPT可以与任何公开可访问的API集成,即使它需要身份验证。

对于这个例子,我们将创建一个小型demo API,它能进行基本的域名可用性检查。

(其实,在实际情况下,您应该与注册API进行核实,但在这里,我们只是检查域名是否解析为IP地址,并称之为“可用”)

from flask import Flask, jsonify, request
import dns.resolver

app = Flask(__name__)

# Function to check domain availability
def is_domain_available(domain):
try:
# Attempt to resolve the domain
dns.resolver.resolve(domain, 'A')
return False # Domain is registered
except dns.resolver.NoAnswer:
return True # Domain is likely available
except dns.resolver.NXDOMAIN:
return True # Domain is not registered
except Exception as e:
return str(e) # Other errors

# API endpoint to check domain availability
@app.route('/check_domain', methods=['GET'])
def check_domain():
domain = request.args.get('domain', default='', type=str)
if domain:
is_available = is_domain_available(domain)
return jsonify({'domain': domain, 'is_available': is_available})
else:
return jsonify({'error': 'No domain specified'}), 400


if __name__ == '__main__':
app.run(debug=True)

使用此API非常简单,如下所示的查询用于testmedium123.com网站:

Domain registration check for testmedium123.com showing is_available = true

好的,太棒了- 我们已经设置好我们的API,用于告诉我们一个域名是否可用,那么我们如何让ChatGPT使用它呢?

创建一个GPT

首先,你必须登录Chat GPT,然后访问你的GPT页面。

请问您能提供文本、图片、视频或其他类型的文件吗?这样我就可以帮您进行翻译了。

这里,您将找到创建自己GPT的选项:

Create a GPT: Customize a version of ChatGPT for a specific purpose

在“创建GPT”界面中,我们提供了对我们的GPT所能提供的功能的简要概述:

GPT Settings

滚动到页面底部,您将找到一个名为“创建新动作”的按钮。

在此面板中,我们有各种选项,可以用来描述我们对ChatGPT的新API。

ChatGPT Actions Options

本节的核心部分是一些称为“API架构”的JSON,我会将其下面重复一遍,以便我们讨论。

NB:如果您的API是使用现代API框架编写的,那么您可能可以直接从API本身导入此架构。

{
"openapi": "3.1.0",
"info": {
"title": "Is domain registered?",
"description": "Returns if a domain is registered or not.",
"version": "v1.0.0"
},
"servers": [
{
"url": "https://domregapi.<redacted>"
}
],
"paths": {
"/check_domain": {
"get": {
"description": "Determine if a domain is registered",
"operationId": "GetDomainAvailability",
"parameters": [
{
"name": "domain",
"in": "query",
"description": "The domain name",
"required": true,
"schema": {
"type": "string"
}
}
],
"deprecated": false
}
}
},
"components": {
"schemas": {}
}
}

信息和描述部分非常重要,因为它们向ChatGPT解释了你的函数是做什么的以及何时调用它。这值得再重复一遍:描述不仅仅是为了你自己的好处,你还要向ChatGPT解释你的函数何时有用。

我們的例子中有一個單一的GET端點/check_domain,它接收一個單一字符串參數domain。

那些习惯创建强类型接口的人可能会对这种信息足以让ChatGPT知道该做什么感到不可思议。即使没有返回模式!

点击屏幕右上角的“保存”按钮,然后让我们看看当我们向ChatGPT询问更多冰淇淋领域时会发生什么!

ChatGPT 明白需要调用 API 十次来检查每个域名的可用性。一旦完成,它甚至会返回给我们一个有用的摘要:

ChatGPT Action results

太棒了,ScoopDelight.com 可用!给我注册吧!

我们从这里去哪里?

嗯,这很强大,但是很慢。它对我们的API进行了10次连续调用,每个域名一次。如果我们尝试创建一个端点,可以在单个调用中查找多个域名,会怎么样呢?

NB: 这个示例只为演示用途,如果使用asyncio并同时进行查询,速度将更快!

@app.route('/check_domains', methods=['GET'])
def check_domains():
domains = request.args.get('domains', default='', type=str)
if domains:
results = {}
for domain in domains.split(','):
results[domain] = is_domain_available(domain)
return jsonify({'results': results})
else:
return jsonify({'error': 'No domain specified'}), 400

让我们看看ChatGPT如何处理更复杂的排列方式 - 参数用逗号分隔,并且结果需要从更深层的结构中提取出来。

我将新的端点添加到GPT的模式中。

"/check_domains": {
"get": {
"description": "Determine if multiple domains are registered",
"operationId": "GetDomainsAvailability",
"parameters": [
{
"name": "domains",
"in": "query",
"description": "The domain names to check",
"required": true,
"schema": {
"type": "string"
}
}
],
"deprecated": false
}
}

编辑完架构后,系统会显示一个按钮,用于测试新的终端点/操作:

GetDomainsAvailability appeared for test

我点击了按钮,ChatGPT忠实地生成了一个合适的请求,并提供了关于它发送和接收的调试信息,并且第一时间就理解了所得到的有效载荷。

一个API调用中有三个结果!

现在显然我们可以进一步发展,而且没有什么能阻止我们在API上使用POST端点,也许允许用户注册他们的域名。

结论

动作是向ChatGPT和您自己的工作流程添加实用功能的一种极其强大的方式。集成过程非常简单,而且威力无穷。ChatGPT解释结果的方式简直令人惊叹。

你能想到其他可以与ChatGPT集成的酷炫事物吗?在评论中告诉我!

2024-01-15 04:18:53 AI中文站翻译自原文