Open AI announced ChatGPT plugins on March 23rd, 2023. ChatGPT插件的推出,是LLM在应用领域的里程碑,更有人将其比作AI领域的AppStore Moment。曾经在5月12日就拿到了ChatGPT Plugins的开发者权限,但不幸的是由于Depay的问题,5月27日账号被BAN,ChatGPT的插件开发者权限,以及GPT-4 API的调用权限全都被付之一炬,也是变相感受了一次“科技封锁”。

不过幸运的是,5月27日重新申请新的账号后,6月16日插件开发者权限重新申请成功,6月18日趁热打铁,完成第一个插件(Mifuzi Domain AI)的开发和提审,5月19日插件审核通过,正式上架ChatGPT Plugin Store。这个插件能够帮助创业者、产品经理、或者任意有想法的人,基于自己的idea和创意,自动生成相应的域名建议,并查询对应的域名注册状态,此外还可以查询详细的域名注册WHOIS信息。

看到目前关于ChatGPT插件开发的介绍还比较少,觉得有必要记录下大致的过程。首先让我们通过一张流程图来描述下ChatGPT Plugin的工作流程和一些相关细节,ChatGPT Plugin在整体的过程中充当了类似Middleware的职责:

如果你有全栈开发的基础或经验,ChatGPT插件的开发其实会非常简单。插件部署后需要提供几个关键的描述文件,ai-plugins.json是插件的描述文件,需要存储在插件域名的.well-known目录下。其中分别描述了给人(for Human)和给模型(for Model)理解的插件名称和插件介绍,也声明了openapi.yaml的访问路径、Logo地址、Legal Info等信息。

{
    "schema_version": "v1",
    "name_for_human": "TODO List",
    "name_for_model": "todo",
    "description_for_human": "Manage your TODO list. You can add, remove and view your TODOs.",
    "description_for_model": "Help the user with managing a TODO list. You can add, remove and view your TODOs.",
    "auth": {
        "type": "none"
    },
    "api": {
        "type": "openapi",
        "url": "http://localhost:3333/openapi.yaml"
    },
    "logo_url": "http://localhost:3333/logo.png",
    "contact_email": "[email protected]",
    "legal_info_url": "http://www.example.com/legal"
}

openapi.yaml则通过OpenAPI Specification,定义了插件对应的服务端接口的请求格式和响应格式。但值得一提且比较有趣的地方是,openapi.yaml文件中针对接口描述的summarydescription字段将起到类似Hidden Prompt的作用,ChatGPT将基于这些Hidden Prompt对用户的消息内容(User Prompt)进行处理,并将相关内容转换成插件接口所需的数据格式。

openapi: 3.0.1
info:
  title: TODO Plugin
  description: A plugin that allows the user to create and manage a TODO list using ChatGPT.
  version: 'v1'
servers:
  - url: http://localhost:3333
paths:
  /todos:
    get:
      operationId: getTodos
      summary: Get the list of todos
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/getTodosResponse'
components:
  schemas:
    getTodosResponse:
      type: object
      properties:
        todos:
          type: array
          items:
            type: string
          description: The list of todos.

其实到此为止,ChatGPT Plugin的运行机制和核心细节已经介绍完了,剩下的都是具体实现细节。比如工程目录结构如下,ai-plugins.json必须放置于.well-known目录下,并且能够通过域名(如https://example.com/.well-known/ai-plugins.json)进行访问,服务必须支持HTTPS访问:

├── README.md
├── .well-known
│   └── ai-plugins.json
├── server.py
├── logo.png
├── openapi.yaml
└── legal

由于OpenAI支持localhost本地方式进行插件的开发和调试,并且ChatGPT设置中支持开启Plugin Devtools,因此整个插件的开发体验还是相当流畅的。当你完成插件开发后,还需要通过Ticket正式提交OpenAI审核。

审核顺利的话会非常快通过审核,注意插件的名称和描述内容中不能包含ChatGPTGPT等关键词,并且务必要提供可访问的Legal Info,我的插件从提审到通过基本上只用了十几个小时不到,审核通过后你会收到一封通知邮件。

Hey there,

We’re excited to share that your ChatGPT plugin has been approved.
Your plugin will be made available in the store today.
Please read this note in its entirety to avoid any future confusion.
...