# ChatGPT Plugin 開發與送審全記錄
* [排隊](https://openai.com/waitlist/plugins)已經排到了嗎?
* 成為 [Plus](https://openai.com/blog/chatgpt-plus) 的使用者,取得 Plugin 使用權
* 擁有獨立&正式的 [Domain](https://zh.wikipedia.org/zh-tw/%E5%9F%9F%E5%90%8D) & [TSL憑證](https://www.cloudflare.com/zh-tw/learning/ssl/transport-layer-security-tls/)
## 前言
開發 ChatGPT 外掛,其實沒有想像中困難,若你已經有現成或者具備開發 WebAPI 能力,那麼你掌握到開發 ChatGPT 外掛的一半能力了,後面一半就交給3個必備檔案,讓 OpenAI ChatGPT 去認識你的 WebAPI 即可。
## 基本簡介:
OpenAI 的外掛替 ChatGPT 帶來了連結到第三方應用程式的能力!透過這些外掛 ChatGPT 不只是會說話那麼簡單,還能與各種 API 進行互動,大大擴充了它的超能力!
它都能做些什麼呢?
* 快速搞定即時資訊,取得最新的體育競賽比分、股市股價飆升或是熱門新聞!
* 探索知識庫,像是搜尋公司的檔案內容或是你的筆記紀錄。
* 幫你完成各種任務,無論是訂機票飛到夢想的目的地或是訂那份可口美味的晚餐,都只需一聲令下!
## 必備檔案
* 準備好 3 個必備檔案,讓 ChatGPT 認識你的 API
* .wll-known/ai-plugin.json
* .wll-known/logo.jpg
* openapi.yaml

### ai-plugin.json 與 logo圖檔說明
每個外掛都需要一個 ai-plugin.json 檔案,該檔案需要被托管在 API 的域名上。例如,一家名為 example.com 的公司應該讓外掛的JSON檔案可以透過 https://example.com 的域名進行訪問,因為他們的 API 就托管在該處。當您透過 ChatGPT 的使用者界面安裝外掛時,後台系統會查找位於 /.well-known/ai-plugin.json 的檔案。/.well-known 資料夾是必需的,並且必須存在域名上,以便 ChatGPT 與外掛進行串接。如果找不到檔案,外掛則無法被安裝。本地開發可以使用 HTTP ,但如果指向正式伺服器需要 HTTPS 。
必需的 ai-plugin.json 檔案的最基本定義,如下所示:
```
{
"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:30163/openapi.yaml"
},
"logo_url": "http://localhost:30163/.wll-known/logo.jpg",
"contact_email": "support@example.com",
"legal_info_url": "http://www.example.com/legal"
}
```
| Field | Type | Description |
| --------------------- | ------------ | --------------------------------------------------------------------------------------------- |
| schema_version | String | 架構版本 |
| name_for_model | String | 模型名稱用於(只能字母和數字,不可使用空白)。 最多 50 個字元 |
| name_for_human | String | 給使用者看的產品名稱,例如產品完整名稱。 最多 20 個字元 |
| description_for_model | String | 更貼近模型的描述,例如考量令牌上下文的長度或為了增強外掛提示而使用的關鍵字。最多 8,000 個字元。 |
| description_for_human | String | 給使用者看的外掛易讀描述。最多 100 個字元。 |
| auth | ManifestAuth | 驗證架構(Authentication schema) |
| api | Object | API 規格(API specification) |
| logo_url | String | Logo 圖檔的的 URL 。建議大小:512 x 512。支援透明背景。必須是圖片檔,不支援 GIF 格式。 |
| contact_email | String | 技術人員 EMail (safety/moderation, support, and deactivation) |
| legal_info_url | String | 外掛詳細的法律資訊、隱私權政策聲明 URL |
### Open API規格文件說明
下一步是建立 Open API 規格文件。 ChatGPT 中的模型除了在 Open API 規格和 manifest 檔案中所定義的內容外,對您的 API 一無所知。這意味著,如果你 API 相當龐大,您可以只寫出需要被呼叫到的 API 功能即可,而可以選擇特定的端點。例如,如果您有一個社交媒體 API ,您可能希望讓模型透過 GET 請求訪問網站的內容,但為了減少垃圾訊息的可能性,防止模型對使用者的發文進行評論。
Open API 規格是放置在您的 API 服務內。基本的 Open API 規格如下所示:
```
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:30163
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 運作一個查詢過程,它會查看資訊部分中定義的描述,確定外掛是否與用戶的查詢有相關。您可以在撰寫描述部分閱讀更多有關提示的資訊。
請記住在您的 Open API 規格中有以下限制,且這些限制未來可能會發生變動:
* API 規格中每個 API 端點的描述/摘要欄位最多 200 個字元
* API 規格中每個 API 參數的描述/摘要欄位最多 200 個字元
由於在本機執行此範例,我們希望將伺服器設定為指向本機 URL 位置。剩下部分遵循傳統的 Open API 格式,您可以透過各種線上資源了解更多關於 Open API 的格式設定。還有許多工具可以根據您底層的 API 程式碼自動產生出 Open API 規格。
## 嘗試使用自己開發的外掛:
1. 先確認本機能正常呼叫與取得結果

2. 到 ChatGPT Plugin 界面選擇器,選擇右下角「開發你的外掛」

3. 輸入你的 Domain or 本機測試位置,按下「尋找清單檔案」

4. 會跑 manifest 、 OpenAPI Spec 兩個驗證,通過後「安裝本地主機外掛」

5. 開始到 ChatGPT ,可以進行聊天使用了,可以看到開始呼叫剛剛投餵給 ChatGPT 的資料結果。

6. 最後 ChatGPT Model 整理如下

## 送審
送審過程中,心得是只要有不符合規定,審核人員幾乎會在 12 小時內退件告訴你原因。
### 英文首要必備,並開發多國語言
英文作為全球通用語言,下在國際間被廣泛使用,所以一定要必備英文版,接著再提供你的當地國家語言。
> 若未提供英文版,則退件率 100% ,當初開發過程並未瞭解到此要點,所以語系問題吃了不少苦頭。
### 規格簡易、資訊豐富
Input 越簡單越好, Output 越豐富越好,讓 AI 快速理解你的外掛程式如何使用與得到結果。
### 統整與零碎事項
要符合官方[規定](https://platform.openai.com/docs/plugins/introduction)文字獄、產品名稱長度,以下為整理重點
* 一定要提供英文版且為主要語言,次要語言為開發者當地國家語言
* 在外掛名稱或描述中不可使用 `plugin 、 GPT 、 ChatGPT` 等文字
* 外掛名稱最多 20 個字元
* 提供英文與當地國家語言的指令 (Prompt) 範例說明
上述條件缺一不可。
> 官方審核規則未來可能會更新,實作前、送審前請務必先參考規則,且以官方最新規則為主。
## 結論
其實開發 ChatGPT Plugin 難度並不高,真正難度難在於取得開發門票,實作串接介面參考官方提供的 Spec 文件就好且很明確且簡單易讀。
參考資料:
> [OpenAI ChatGPT Plugin 介紹](https://platform.openai.com/docs/plugins/introduction)
> [Plugin 快速入門](https://github.com/openai/plugins-quickstart) 官方提供的使用 Python 開發
> C# 版 ChatGPT Plugin 快速入門與[範例(尚未提供,敬請期待)](https://github.com/yphs99)
## 工商時間
所以我們 CMoney 的 ChatGPT 外掛因此上線服務大眾囉!
幫助您取得最新股價以及營收、財報參考資訊~
趕快搜尋「CMoney Portfolio」並點選安裝吧!

> 請注意,這些資訊僅供參考,並不構成投資建議。在做出投資決策之前,您應該進行充分的研究並考慮諮詢金融顧問。
## 誌謝
> Plugin 主要實作者:王聖文 Sam Wang
> 協作者 & 文章撰寫者:許琮倫 Alen Hsu