ChatGPT插件开发教程(一):创建一个Hello world插件

1,109 阅读3分钟

1. 介绍

在这篇教程中,我们将学习如何创建一个简单的ChatGPT插件。我们将创建一个"Hello World"插件,这个插件只有一个功能:当用户输入"Hello World Plugin Say Hello"时,插件会回复"Hello, world!"。

2. 创建你的第一个ChatGPT插件

2.1 使用express构建API

Express是一个基于Node.js的web应用框架,它提供了一种简单而灵活的方式来创建web应用,包括API。我们选择使用Express,是因为它的简单性和灵活性,以及它强大的功能,如路由、中间件、模板引擎等。

例如,我们可以使用Node.js和Express来创建一个简单的API。首先,我们需要在一个新的文件(例如,server.js)中编写以下代码:

const express = require('express');
const app = express();
const port = 3000;

app.use(express.static('public'));

app.get('/hello', (req, res) => {
  res.json({ message: 'Hello World!' });
}); // 构建一个/hello的get方法

app.listen(port, () => {
  console.log(`Server is running at <http://localhost>:${port}`);
});

我们需要在根目录创建一个名为'public'的文件夹,用于存放后续需要用到的静态文件。

2.2 创建Plugin manifest

接下来,我们需要创建一个插件清单(Plugin manifest)。

插件清单(Plugin manifest)是一个描述我们插件基本信息的JSON文件。它包括了插件的名称、描述、API URL等信息。这些信息对于ChatGPT来说是非常重要的,因为它们告诉ChatGPT插件是什么,它能做什么,以及如何与它进行交互。因此,创建一个准确且完整的插件清单是非常重要的。

我们可以在项目的/public/.well-known目录下创建一个新的文件ai-plugin.json,并在这个文件中定义插件清单(Plugin manifest):

{
  "schema_version": "v1",
  "name_for_human": "Hello World Plugin",
  "name_for_model": "hello_world",
  "description_for_human": "A simple plugin that says hello to the world.",
  "description_for_model": "A simple plugin that says hello to the world.",
  "auth": {
    "type": "none"
  },
  "api": {
    "type": "openapi",
    "url": "<http://localhost:3000/openapi.yaml>",
    "is_user_authenticated": false
  },
  "logo_url": "<http://localhost:3000/logo.png>",
  "contact_email": "support@example.com",
  "legal_info_url": "<http://www.example.com/legal>"
}

在这个文件中,我们定义了插件的名称、描述、API URL等信息。我们的API URL是http://localhost:3000/openapi.yaml,这是我们即将创建的OpenAPI插件描述文件的URL。

2.3 创建OpenAPI插件描述文件

OpenAPI插件描述文件是一个用于描述API的规范。通过使用OpenAPI插件描述文件,我们可以清晰地描述API的行为,包括我们的API有哪些endpoint,这些endpoint接受什么样的请求,以及这些端点会返回什么样的响应。这对于我们来说是非常有用的,因为它可以帮助我们更好地理解和设计我们的API。

我们可以在项目的/public目录下创建一个名为openapi.yaml的新文件,并在其中定义OpenAPI描述:

openapi: 3.0.0
info:
  title: Hello World
  version: 1.0.0
paths:
  /hello:
    get:
      operationId: hello
      summary: Returns a hello world message
      responses:
        '200':
          description: A JSON object containing a hello world message
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HelloResponse'
components:
  schemas:
    HelloResponse:
      type: object
      properties:
        message:
          type: string

在这个文件中,定义了一个GET方法的/helloendpoint。当这个endpoint被访问时,它会返回一个状态码为200的响应,响应的message是"Hello, world!"。

2.4 在本地运行你的插件

现在,插件已经准备好了,我们可以在本地运行它,看看它是否能够正确工作。

首先,需要启动Express应用。可以使用以下命令来启动应用:

node server.js

然后,我们可以在浏览器中访问http://localhost:3000/hello,看看插件是否能够正确返回{"message":"Hello World!"}

如果一切顺利,我们就可以开始在ChatGPT中安装和测试我们的插件了。

2.5 使用ngrok内网穿透

由于我们的Express应用运行在本地服务器上,这意味着它默认情况下只能在我们的计算机上访问。然而,为了让ChatGPT能够访问插件,我们需要使插件在互联网上可访问。这就是我们需要使用ngrok的原因。ngrok是一个能够将本地服务器映射到公网的工具,使我们的插件能够在互联网上被访问。

首先,我们需要下载并安装ngrok。我们可以在ngrok的官网上找到下载链接和安装说明。

然后,我们可以使用以下命令来启动ngrok:

ngrok http 3000

这个命令会启动ngrok,并将它映射到本地服务器的3000端口。ngrok会显示一个公网URL,我们可以使用这个URL来访问本地服务器。

最后,我们需要在插件清单(Plugin manifest)文件中更新API URL,将其更改为我们的ngrok URL。例如,如果ngrok URL是https://xxxxx.ngrok-free.app,那么API URL应该是https://xxxxx.ngrok-free.app/openapi.yaml。请在ai-plugin.json文件中进行相应的更改。

3. 在ChatGPT中安装和测试插件

现在,我们的插件已经准备好了,我们可以在ChatGPT中安装和测试它。

首先,我们需要登录到ChatGPT,然后点击右上角的"Plugins"按钮,然后点击"Develop your own plugin"按钮。

Untitled

在弹出的对话框中,我们需要输入我们的链接https://xxxxx.ngrok-free.app,然后点击"Find manifest file"按钮。如果一切顺利,插件就会被安装到ChatGPT中。

Untitled

然后,可以在ChatGPT中输入"Hello World Plugin Say Hello",看看插件是否能够正确回复"Hello, world!"。

4. 总结

在这篇教程中,我们学习了如何创建一个简单的ChatGPT插件。我们创建了一个"Hello World"插件,这个插件只有一个功能:当用户输入"Hello World Plugin Say Hello"时,插件会回复"Hello, world!"。

我们还学习了如何在Express应用中提供静态文件服务,如何使用ngrok映射本地服务器,以及如何在ChatGPT中安装和测试插件。

在下一篇教程中,我们将学习如何使用cloudflare提供的工具,快速开发和部署一个ChatGpt插件。

5. 源码

github.com/jerryjiao/E…