建立 GPTs
在 ChatGPT 的頁面中找到 Explore,使用 Create a GPT 來建立客製化 GPTs
接著會看到 Create 和 Configure 的頁簽,以及右方一個 Preview 的頁面
我們可以使用對話的方式(Create)一步一步和 GPT Builder 溝通,他會一步一步的引導你如何製作客製化的 GPTs,包括你的客製化 GPTs 圖像、描述、以及起始對話建議框
或是直接使用配置的方式(Configure)快速建置你要的客製化 GPTs
- Instruction:這個欄位就是填入 Prompt,Prompt 越精準客製化的 GPTs 功能就會越強大。如果使用對話的方式,GPT Builder 會自動幫填入你和他討論並整理過後的 Prompt。
- Conversation starters:起始對話建議互動框。
- Knowledge:有點類似知識庫的東西,你可以提供一些 GPT 不知道的知識提供它當作解答的參考。譬如本篇的範例,我就會把 PR 時的一些規範寫進去,然後上傳到 Knowledge 後,請 GPTs 依照這些規範去審核和評估 PR。💡 目前我只知道可以上傳 TXT 檔案,其餘的格式大家可以自行嘗試看看。💡 2023/11/16 補充:關於 Knowledge 的限制和測試,可以參考 OpenAI 社群的討論【點我前往】。
- Capabilities:是否啟用如網路搜尋、DALL-E 圖像建置、運行程式碼、資料分析、檔案上傳等等的功能。
- Actions:運行 GPTs 的同時串接你個人化的應用,如串接 ERP、串接 Google 服務等等。
接著我們使用對話的方式(Create)和 GPT Builder 溝通並建立我希望的 Gitea 合併請求助手的客製化功能
設定Actions
接下來需要設定Actions,讓 GPTs 可以與 Gitea 進行溝通。Actions 使用的是 OpenAPI Specification 來定義整個數據結構。
- Schema:定義 OpenAPI Specification 的位置。
- Authentication:驗證 API Token。你也可以在 OpenAPI Specification 內個別針對 API 進行 Token 的設定。💡 個別設定請使用「Security Scheme Object 」。
- Privacy Policy:隱私政策。💡 如果要開放出去給所有人用,則需要加入隱私政策宣告的網址列(其實隨便打一個網址也會通過,GPTs 不會特意檢查這個)。
Schema 可以透過選擇 Import from URL 旁的下拉選單,選擇 OpenAI Profile,就會有一個定義好 OpenAPI Specification 的基本範例提供你參考
接著我們需要知道 Gitea 有什麼 API 可以使用,關於 Gitea 的 API 文檔可以【點我前往】。我們依照Gitea官方的文檔來建立第一個 API:「列出指定儲存庫的合併請求清單」
{
  "openapi": "3.1.0",
  "info": {
    "title": "Gitea PR Assistant",
    "description": "Gitea合併請求小助手",
    "version": "v1.0.0"
  },
  "servers": [
    {
      "url": "https://你的GiteaURL/api/v1"
    }
  ],
  "paths": {
    "/repos/TestGit/{repo}/pulls": {
      "get": {
        "description": "查詢指定儲存庫的合併請求清單",
        "operationId": "ListReposPullRequest",
        "parameters": [
          {
            "name": "repo",
            "in": "path",
            "required": true,
            "description": "儲存庫名稱",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "用於限制返回的合併請求數量,最高是10",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 5
            }
          },
          {
            "name": "state",
            "in": "query",
            "description": "篩選合併請求的狀態,例如'open'或'closed'",
            "required": true,
            "schema": {
              "type": "string",
              "default": "open"
            }
          }
        ],
        "deprecated": false
      }
    }
  },
  "components": {
    "schemas": {
    }
  }
}- servers:API 服務的 URL。
- paths:API 的具體路徑或端點。
- components:請求和回應中使用的數據結構。
設定完成後,我們可以到 Preview 上測試,讓 GPTs 透過 API 取得合併請求,並且列出清單
接著我們將剩下會用到的 API 都一起加入到 OpenAPI Specification 中:
- 列出指定儲存庫的合併請求號碼差異(diff)
- 提交對特定儲存庫的合併請求的審核
{
  "openapi": "3.1.0",
  "info": {
    "title": "Gitea PR Assistant",
    "description": "Gitea合併請求小助手",
    "version": "v1.0.0"
  },
  "servers": [
    {
      "url": "https://你的GiteaURL/api/v1"
    }
  ],
  "paths": {
    "/repos/TestGit/{repo}/pulls": {
      "get": {
        "description": "查詢指定儲存庫的合併請求清單",
        "operationId": "ListReposPullRequest",
        "parameters": [
          {
            "name": "repo",
            "in": "path",
            "required": true,
            "description": "儲存庫名稱",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "用於限制返回的合併請求數量,最高是10",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 5
            }
          },
          {
            "name": "state",
            "in": "query",
            "description": "篩選合併請求的狀態,例如'open'或'closed'",
            "required": true,
            "schema": {
              "type": "string",
              "default": "open"
            }
          }
        ],
        "deprecated": false
      }
    },
    "/repos/TestGit/{repo}/pulls/{index}.{diffType}": {
      "get": {
        "description": "查詢指定儲存庫對應的合併請求編號的合併請求差異",
        "operationId": "GetReposPullRequestDiff",
        "parameters": [
          {
            "name": "repo",
            "in": "path",
            "required": true,
            "description": "儲存庫名稱",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "index",
            "in": "path",
            "required": true,
            "description": "合併請求編號",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "diffType",
            "in": "path",
            "description": "指定返回的差異類型,例如'diff'或'patch',用於顯示合併請求中的變更內容",
            "required": true,
            "schema": {
              "type": "string",
              "default": "diff"
            }
          }
        ],
        "deprecated": false
      }
    },
    "/repos/TestGit/{repo}/pulls/{index}/reviews": {
      "post": {
        "description": "審核對特定儲存庫對應的合併請求編號的合併請求",
        "operationId": "SetReposPullRequestCreateReview",
        "parameters": [
          {
            "name": "repo",
            "in": "path",
            "required": true,
            "description": "儲存庫名稱",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "index",
            "in": "path",
            "required": true,
            "description": "合併請求編號",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "審核合併請求的詳細資料",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetReposPullRequestCreateReviewRequest"
              }
            }
          }
        },
        "deprecated": false
      }
    }
  },
  "components": {
    "schemas": {
      "SetReposPullRequestCreateReviewRequest": {
        "type": "object",
        "properties": {
          "event": {
            "type": "string",
            "enum": ["APPROVED", "REQUEST_CHANGES", "COMMENT"],
            "description": "指定審查的動作或狀態,例如批准(APPROVED)、請求變更(REQUEST_CHANGES)或僅添加評論(COMMENT)。"
          },
          "body": {
            "type": "string",
            "description": "指定審查的回覆,請依據審查狀態回覆,例如批准(APPROVED)則回覆OK、請求變更(REQUEST_CHANGES)或僅添加評論(COMMENT)請回覆請求變更的問題或是評論。"
          }
        }
      }
    }
  }
}最後一起來看看整個 Gitea 合併請求小助手的 Preview 的結果吧!
以上就是 GPTs 的建立和實際串接後達成的效果,我們利用 GPTs 搭配 Gitea API,讓審核 PR 的過程更簡單輕鬆,還可以請 GPTs 自行產生評語和退回原因,是不是覺得,鋼鐵人中的賈維斯真的離我們越來越近了呢!



















 
0 Comments
張貼留言