# 如何开发一个 ChatGpt 插件

By [rayjun.eth](https://paragraph.com/@rayjun-2) · 2023-03-26

---

1.
--

按照 OpenAI 的这个发布速度，我们的脑子已经快跟不上了。在发布 GPT4 之后，OpenAI 又发布了插件系统，可以基于这个模型来开发应用了，这个插件系统好比是 IPhone 的 AppStore。

![ChatGPT Plugin](https://storage.googleapis.com/papyrus_images/080b092bb96c8ee47f4bbeb79c2905f3233bdd2920388278f89910a9cbecd172.png)

ChatGPT Plugin

每一个插件就是一个后端服务，这个后端服务会部署在云平台上，向外暴露特定的 API 文档，在 ChapGpt 中，只需要输入插件的地址，就可以对话中使用插件的数据了。通过插件的作者也可以通过接口更新插件的数据。

2.
--

开发者可以根据 OpenAI 提供的开发规范，向 ChatGPT 模型暴露 API，ChatGPT 就可以来消费这些 API。一个插件由以下三个部分组成：

*   API 接口
    
*   一个 API 描述文件（OpenAPI JSON 或者 YAML 格式）
    
*   一个定义了插件元数据的 manifest 文件
    

这个插件系统实际上基于 Python 的 API 框架 FastAPI 构建，这下 Python 的用户数量又能上一个台阶了。

对外暴露的 API 接口是固定的，由以下的 4 个 API 组成：

*   `/upsert` 向插件数据库中上传内容，这些内容会被分割成 200 字符的片段，然后存入数据库中
    
*   `/upsert-file` 和 upsert 接口的作用相同，但是这个接口可以上传文件，支持 PDF、TXT、DOCX、PPTX、MD 等文件格式
    
*   `/query` 数据查询接口，ChapGPT 主要调用这个接口
    
*   `/delete` 删除数据
    

插件毕竟也是一个后端服务，需要保证数据的安全，需要在后端加上一些鉴权和安全的策略。现在支持三种鉴权方式：

*   无鉴权：不推荐这种方式，否则插件中的数据可以被任何人修改或者删除
    
*   HTTP Bearer：设置一个固定的 token 来鉴权，这种方式最简单，但如果 token 泄漏了，数据也不安全
    
*   OAuth：这种方式是最安全的，但是配置会相对更复杂一些
    

插件的代码直接就在这个仓库中：[https://github.com/openai/chatgpt-retrieval-plugin](https://github.com/openai/chatgpt-retrieval-plugin)， 可以直接使用。甚至都不需要编写新的代码，修改一下配置就可以使用了。向量数据库的选择有很多，如果不知道选什么好，可以选择使用的最广泛的 Redis 数据库。以 Redis 为例，需要配置的内容如下：

    DATASTORE="redis"
    BEARER_TOKEN=""
    OPENAI_API_KEY=""
    REDIS_HOST=""
    REDIS_PORT=""
    REDIS_PASSWORD=""
    

BEARER\_TOKEN 是指需要上面对外暴露 4 个 API 的鉴权 token，OPEN\_AI\_KEY 填入自己的账号 KEY 就行。

在完成这些配置之后，直接打包成 Docker 镜像（Dockerfile 都给你写好了），然后把这个镜像部署在任意一个云平台上就可以了。推荐 [Fly.io](http://Fly.io) 或者 Heroku。

然后就可以通过 upsert 或者 upsert-file 接口向插件系统中推送数据就可以。**在基本不用编写代码的情况下，就可以完成一个 ChatGPT 插件的开发，你唯一需要准备的，就是数据**。

3.
--

通过 OpenAI 提供的示例之后可以看出，插件本身是没有开发难度的，你如果能提供有价值的数据，那么你的插件就有价值。OpenAI 盯上的也是这些数据，用户提供的数据越多，那么 OpenAI 获得的养料也更多，进化的速度就越快。

如果后续 OpenAI 的激励方案出来之后，这个数据的提供者只会越来越多，毕竟在一个风口上，越早的玩家收益越大，AI 的这个潮流已经不可逆转了，你跟还是不跟？

**参考链接：**

\[1\] [https://platform.openai.com/docs/plugins/getting-started](https://platform.openai.com/docs/plugins/getting-started)

\[2\] [https://github.com/openai/chatgpt-retrieval-plugin](https://github.com/openai/chatgpt-retrieval-plugin)

\[3\] [https://fastapi.tiangolo.com/](https://fastapi.tiangolo.com/)

---

*Originally published on [rayjun.eth](https://paragraph.com/@rayjun-2/chatgpt)*
