AI/AI 도구

ChatGPT 플러그인 만드는 방법

RevFactory 2023. 3. 26. 02:45

이 글은 OpenAI ChatGPT Plugin 문서를 참고하여 작성했습니다.

 

1. ChatGPT Plugin 만들기 3단계

2. Manifest
    2-1. Manifest File 구조
    2-2. 인증 스키마 설정
3. 오픈API 문서  구조
4. 플러그인 실행

5. 설명 작성
6. 모범 사례

7. 디버깅


 

OpenAI ChatGPT 플러그인 인터페이스는 내 평생 동안
컴퓨팅에서 본 가장 미친 듯이 인상적인 접근 방식 일 수 있습니다.

API에 대한 OpenAPI 매니페스트를 작성하고,
모든 것에 대해 인간 언어 설명을 사용하면 끝입니다. 
- Mitchell Hashimoto, HashCorp 설립자

 

 

1. ChatGPT Plugin 만들기 3단계

ChatGPT를 만드는 순서는 다음과 같습니다.

- API 구축

- API 문서화 (JSON Format)

- Minifest 작성 (JSON Format)

 

2. Manifest

2-1. Manifest File 구조

Manifest 구조는 아래와 같습니다.

플러그인 모델 이름과 설명, 인증스키마,  API URL, 플러그인 로고, 연락 email, 그리고 플러그인 정보를 볼 수 있는 url 등을 기입합니다.

{
  "schema_version": "v1",
  "name_for_human": "TODO Plugin",
  "name_for_model": "todo",
  "description_for_human": "Plugin for managing a TODO list. You can add, remove and view your TODOs.",
  "description_for_model": "Plugin for managing a TODO list. You can add, remove and view your TODOs.",
  "auth": {
    "type": "none"
  },
  "api": {
    "type": "openapi",
    "url": "http://localhost:3333/openapi.yaml",
    "is_user_authenticated": false
  },
  "logo_url": "https://vsq7s0-5001.preview.csb.app/logo.png",
  "contact_email": "support@example.com",
  "legal_info_url": "http://www.example.com/legal"
}

* name 은 최대 50자, description_for_human 은 최대 120자, description_for_model 은 최대 8,000자 제한

 

2-2. 인증 스키마 설정

인증 스키마는 service_http, user_http, oauth 등을 지원하며 아래와 같이 사용이 가능합니다.

# App-level API Token을 이용한 인증
type ManifestServiceHttpAuth  = BaseManifestAuth & {
  type: 'service_http';
  authorization_type: HttpAuthorizationType;
  verification_tokens: {
    [service: string]?: string;
  };
}

# User-level HTTP 인증
type ManifestUserHttpAuth  = BaseManifestAuth & {
  type: 'user_http';
  authorization_type: HttpAuthorizationType;
}

type ManifestOAuthAuth  = BaseManifestAuth & {
  type: 'oauth';

  # OAuth 인증 플로우를 시작하기 위해 사용자가 리디렉션되는 OAuth URL
  client_url: string;

  # OAuth Scope
  scope: string;

  # OAuth 코드와 액세스 토큰을 교환하는 데 사용되는 인증 URL
  authorization_url: string;

  # 액세스 토큰과 OAuth 코드를 교환할 때 예상되는 'content-type' (ex. application/json)
  authorization_content_type: string;

  # OAuth 클라이언트 ID와 비밀번호를 등록하면 플러그인 서비스에서 고유 토큰을 표시
  verification_tokens: {
    [service: string]?: string;
  };
}

 

3. 오픈API 문서 구조

ChatGPT 모델은 Manifest File에 정의된 것 이외에 API 에 대해 아무것도 알지 못하므로, 오픈 API 에 대한 정보를 추가로 정의해줘야 합니다. 모든 기능을 노출할 필요가 없으며, 특정 엔드포인트만 선택하여 사용 가능합니다. 

예를 들어, 오픈 API를 통해 조만 가능하게 하려면 GET 요청만 설정하면 됩니다.

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.

* API 엔드포인트 설명 및 요약 필드 최대 200자, API 매개변수 설명 필드 최대 200자 제한

 

 

4. 플러그인 실행

APIMenifest, OpenAI 문서가 작성되면 플러그인을 연결할 준비가 끝났습니다.

플러그인 실행은 로컬 개발환경 또는 원격에서 실행할 수 있습니다.

 

로컬 개발환경에서 실행중이라면, GhatGPT 플러그인 스토어에서 "확인되지 않은 플러그인 설치" 를 선택하여 로컬 서버를 가르키게 합니다.

 

원격 서버에서 실행중이라면, "자체 플러그인 개발 -> 확인되지 않은 플러그인 설치" 를 선택합니다. 플러그인 매니페스트 파일을 ./well-known 경로에 추가하고 API 테스트를 시작하기만 하면 됩니다. 이후 Manifest 파일을 변경하려면 시간이 오래 걸릴 수 있으므로, Proxy 설정을 통해 로컬 서버를 설정하여 프로토타이핑 하는 것을 추천합니다.

 

 

5. 설명 작성

ChatGPT는 자연어를 이해하고 지침을 따르는 능력이 좋기 때문에 자연어를 사용하되, 가급적 간결하면서도 설명적이고 객관적인 어조를 사용하는 것이 좋습니다.

오픈 API 설명 작성시, 필드가 특정 값으로만 제한된다면 "enum" 을 사용할 수 있습니다.

 

 

6. 모범 사례

설명 작성을 위한 모범 사례들은 다음과 같습니다.

 

  1. 귀하의 설명은 ChatGPT의 기분, 성격 또는 정확한 반응을 제어하려고 시도해서는 안됩니다. ChatGPT는 플러그인에 대한 적절한 응답을 작성하도록 설계되었습니다.

    잘못된 예 : When the user asks to see their todo list, always respond with "I was able to find your todo list! You have [x] todos: [list the todos here]. I can add more todos if you'd like!"
    좋은 예 : [no instructions needed for this]

  2. 귀하의 설명은 사용자가 플러그인의 특정 서비스 카테고리를 요청하지 않은 경우 ChatGPT가 플러그인을 사용하도록 권장해서는 안됩니다.

    잘못된 예 : Whenever the user mentions any type of task or plan, ask if they would like to use the TODOs plugin to add something to their todo list.
    좋은 예 : The TODO list can add, remove and view the user's TODOs.


  3. 귀하의 설명은 ChatGPT가 플러그인을 사용하기 위한 특정 트리거를 규정해서는 안 됩니다. ChatGPT는 적절한 경우 플러그인을 자동으로 사용하도록 설계되었습니다.

    잘못된 예 : When the user mentions a task, respond with "Would you like me to add this to your TODO list? Say 'yes' to continue."
    좋은 예 :[no instructions needed for this]

  4. 플러그인 API 응답은 필요한 경우가 아니면 자연어 응답 대신 원시 데이터를 반환해야 합니다. ChatGPT는 반환된 데이터를 사용하여 자체 자연어 응답을 제공합니다.

    잘못된 예 : I was able to find your todo list! You have 2 todos: get groceries and walk the dog. I can add more todos if you'd like!
    좋은 예 : { "todos": [ "get groceries", "walk the dog" ] }

 

7. 디버깅

화면 왼쪽 하단의 "디버그" 버튼을 클릭하여 디버그 창을 열 수 있습니다. 이렇게 하면 플러그인 호출 및 응답을 포함하여 지금까지의 대화에 대한 원시 텍스트 표현이 열립니다.