커스텀 GPT와 워드프레스 REST API 연동하기

이 글에서는 우리가 많이 사용하는 블로깅 도구 중 하나인 워드프레스를 GPT 액션 기능과 연동하여 GPT를 통해 워드프레스 내의 글 목록이나 페이지 내용을 검색할 수 있는 GPT 서비스를 만들어 봅니다.


챗GPT 서비스를 운영하는 오픈AI(OpenAI)가 최근 GPT 스토어를 오픈했습니다. GPT 스토어에는 사용자가 직접 만든 커스텀 GPT를 공개하여 사용 수익을 얻을 수 있게 해주는 비즈니스 모델인데요.

/GPTs Store

GPT 스토어에 내 GPT 서비스를 만들어 올리기 위해서는 우선 오픈AI에 가입하고 오픈AI에서 제공하는 GPT 생성 도구를 활용해 내 GPT를 만들면 됩니다. 알다시피 챗GPT는 거대언어모델(LLM)을 기반으로 작동하고 이 모델은 프롬프트(prompts)를 사용해 동작시키기 때문에 커스텀 GPT 역시 프롬프트를 입력하면 쉽게 만들 수 있습니다.

게다가 오픈AI에서는 ‘GPT 빌더(Builder)’라고 하는 도구도 제공하는데요. 이 도구를 이용하면 사용자가 GPT 빌더와 대화를 나누는 과정에서 자동으로 나만의 GPT 서비스가 만들어 지죠.

/ GPT Builder

커스텀 GPT 설정

하지만 모든 커스텀 GPT를 GPT 빌더만 사용해서 만들 수는 없습니다. 그래서 오픈AI에서는 사용자가 직접 설정할 수 있는 여러 기능들을 추가로 제공하고 있는데요. GPT 만들기의 “Configure” 탭을 클릭하면 다음과 같이 여러 유형의 데이터를 사용자가 직접 입력하거나 설정하여 GPT를 만들 수 있습니다.

  • 이름(Name): GPT 이름
  • 설명(Description): GPT에 대한 간략한 설명
  • 지시(Instructions): GPT의 역할 및 할일 지정
  • 대화 시작말(Conversation starters): 사용자가 GPT와 첫 대화를 시작할 때 쓰면 좋을 문장
  • 지식(Knowledge): GPT에게 제공할 지식 데이터 파일 업로드
  • 능력(Capabilities): 웹 브라우징/ DALL-E 이미지 생성/ 코드 인터프리터 연동
  • 액션(Action): 외부 서비스와 API 연동
/ GPT Configure

이들 항목은 그 이름만으로도 무슨 의미인지 다 알 수 있기 때문에 따로 설명할 내용은 별로 없어 보입니다. 특히 이 중에서 지시어(Instructions) 부분이 아주 중요한 역할을 하는데요. 지시어를 어떻게 입력하느냐가 완성된 GPT의 품질과 성능이 결정됩니다.

GPT 액션 설정

하지만 이 글에서 다룰 내용은 지시어를 어떻게 작성하냐에 관한 내용은 아니고, 설정 탭의 맨 아래에 있는 “액션(Actions)”을 다루는 문제입니다. (GPT의 지시어 부분은 프롬프트 엔지니어링의 영역이고 이미 인터넷 상에 좋은 자료들이 많이 올라와 있으니 쉽게 찾을 수 있을 것입니다)

앞서도 말했듯 GPT 액션은 GPT가 외부 서비스, 더 정확히는 외부 API와 연동하여 결과를 만들어내도록 해주는 확장 기능입니다. GPT는 외부 서비스와 연동되면 좀더 다양한 기능들을 처리할 수 있는데요. 예를 들면, 이메일 서비스와 연동하여 이메일을 자동으로 발송한다거나 블로깅 서비스와 연동하여 GPT가 자동으로 글을 발행하게도 할 수 있죠.

사실 어떤 외부 서비스든 API만 연동되면 GPT를 통해 접근 가능하기 때문에 생각하기에 따라 만들 수 있는 서비스의 가능성은 무한하다고 할 것입니다.

이 글에서는 우리가 많이 사용하는 블로깅 도구 중 하나인 워드프레스를 GPT 액션 기능과 연동하여 GPT를 통해 워드프레스 내의 글 목록이나 페이지 내용을 검색할 수 있는 서비스를 한번 만들어 보겠습니다. 워드프레스와 GPT 액션의 연동에 방점이 있으니, 이에 필요한 부분을 중심으로 설명해 보겠습니다.

액션 스키마

액션 하단의 “Create new action” 버튼을 클릭하면 아래와 같이 액션을 추가할 수 있는 창이 열립니다.

/ Create new action

이 창에는 인증(Authentication), 스키마(Schema), 그리고 개인정보보호(Privacy policy)를 각각 입력할 수 있는데요. 인증 부분은 오늘 이 글에서는 다루지 않겠습니다. 우리는 공개된 API만 액세스할 것이기에 따로 인증은 필요가 없기 때문입니다. 그리고 개인정보보호는 나중에 서비스를 오픈할 때 개인정보 보호 페이지의 URL을 입력해 주면 되는 부분이라 생략합니다.

특히 오늘 다룰 부분은 스키마와 관련된 부분입니다. 이 스키마 창에 GPT와 연동하려는 API에 대한 정보를 입력해 주면 되는데요. 이 때 입력하는 스키마는 REST API의 문서화 표준 중 하나인 OpenAPI 표준을 따르면 됩니다.

스키마 입력창 오른쪽 상단에 보면 “Import from URL”이라는 버튼과 몇몇 예제(Examples)를 볼 수 있는 선택 박스가 놓여 있습니다. 이 예제 박스를 클릭해 보면 스키마를 어떻게 작성할지 대략적인 감을 얻을 수 있을 것입니다. (아직 감이 안오면 예제 스키마 중 하나를 선택하고 그 아래에 나오는 “가용 액션(Avalable actions)” 중 하나를 골라 “Test” 버튼을 눌러 보세요!)

워드프레스 REST API 스키마

그럼 이제 워드프레스 사이트와 한번 연동해 볼까요?

알다시피 워드프레스는 REST API를 제공합니다. 관리자가 REST API를 끄지 않는 이상 디폴트로 작동하죠. 그러니 GPT 연동을 위해 별도로 API를 만들거나 할 일은 전혀 없습니다.

다만 워드프레스가 OpenAPI 표준에 맞는 API 문서를 따로 제공하는 것은 아니기에 이 부분은 직접 처리해 주어야 합니다. 즉 GPT 스키마 입력창에 연동하려는 워드프레스 사이트의 REST API에 대한 스키마를 OpenAPI 표준에 맞게 입력해 주면 되죠.

알다사피 워드프레스의 REST API는 다양한 종단점(endpoints)을 갖습니다. 이 중 내가 GPT에서 연동해 사용할 종단점만 골라 스키마 입력창에 적어주면 되는데요. 여기서는 워드프레스 글 목록(/wp/v2/posts), 개별 글(/wp/v2/posts/{id}), 그리고 검색(/wp/v2/search) 이렇게 3개의 종단점만 작성해 보겠습니다. (OpenAPI는 JSON과 YAML, 두 가지 포맷을 지원하는데요. 여기서는 YAML을 사용합니다)

openapi: 3.1.0
info:
  title: 워드프레스 REST API
  description: ""
  version: "1.0"
servers:
  - url: https://www.example.com/wp-json
paths:
  /wp/v2/search:
    get:
      operationId: search
      responses:
        "200":
          description: OK
      parameters:
        - name: search
          in: query
          description: 결과를 스트링에 일치하는 것에 제한.
          required: false
          schema:
            type: string
  /wp/v2/posts/{id}:
    get:
      operationId: getPost
      responses:
        "200":
          description: OK
      parameters:
        - name: id
          in: path
          description: 글에 대한 독특한 식별자.
          required: true
          schema:
            type: number
  /wp/v2/posts:
    get:
      operationId: getPosts
      responses:
        "200":
          description: OK
      parameters:
        - name: per_page
          in: query
          description: 결과 세트에 리턴되는 최대 아이템 .
          required: false
          schema:
            type: number

위 스키마 문서는 OpenAPI 표준에 따라 작성한 것이기에 따로 설명할 부분은 없습니다. 다만 스키마 작성시 유의할 점만 몇 가지 부연하자면 다음과 같습니다.

  • 각 액션마다 operationId를 꼭 붙여 주세요. 또흔 ID값은 GPT가 알기 쉬운 이름으로 지정하세요.
  • 액션 호출의 출력값 사이즈가 클 경우 용량 초과 오류가 발생할 수 있습니다. 출력 사이즈가 너무 크지 않게 조정하세요.
  • 하나의 스키마에서 입력할 수 있는 최대 액션수에 유의하세요. (현재 MAX값=30개)
  • 스키마 속에 is_consequential 필드를 추가할 수 있는데요. 이 값이 true이면 GPT가 액션을 실행할 때마다 매번 호출을 허용할지 여부를 묻습니다. (디폴트=false)

OpenAPI 표준에 익숙하지 않은 분들이라면 GPT의 스키마 입력창에서 스키마를 직접 작성하기 보다는 Swagger Editor 같은 편집기를 사용해 스키마 문서를 만들고 테스트를 한 후 완성된 스키마를 GPT 스키마 입력창에 복사해 붙여 넣는 것이 좀더 편리한 방법일 수 있습니다.

/ Swagger Editor

GPT 액션 테스트

그럼 이제 입력한 액션이 제대로 작동하는지 테스트해 볼까요? 테스트는 액션 만들기 우측 “프리뷰(Preview)” 창 하단에 프롬프트를 입력하여 수행하면 됩니다.

최근 문서 5개를 출력해 보라고 해보죠. 그럼 다음과 같이 API에 대한 액세스를 허용할지 메시지가 뜨고 이 때 “허용(Allow)”을 선택하면 GPT가 허용된 액션을 수행합니다.

이 때 디버그(debug) 출력 메시지를 클릭해 API 호출이 제대로 처리되고 있는지 확인할 수 있죠. (이 부분은 개발모드에서만 표시되고, 나중에 완성된 GPT에서는 당연히 표시되지 않습니다)

처리가 완료되면 이제 통상적인 챗GPT처럼 결과를 표시합니다.

한번 더 테스트해 보죠. 이번엔 getPost 액션에 대한 테스트입니다. 방금 출력한 글 목록에서 세 번째 문서의 내용을 요약해 달라고 해 보았는데요. 디버그 출력을 통해 원하는 액션이 제대로 호출되고 있음을 확인할 수 있습니다.

여기까지, 워드프레스 REST API를 GPT 액션으로 만들어 GPT에서 워드프레스를 액세스하는 방법을 간단하게 소개해 드렸는데요. 기본적인 개념 위주로만 설명했는데도 벌써 내용이 꽤 많이 길어져 버렸네요.

알다시피 워드프레스 REST API는 다양한 종단점을 갖추고 있습니다. 워드프레스의 모든 기능을 REST API를 통해 액세스할 수 있고 따라서 GPT와 연동할 수 있는 부분도 여기 소개한 것 말고도 다양하게 더 있을 수 있습니다.

이 글에서는 다루지 않았지만 인증을 거치면 GPT에서 직접 워드프레스에 글을 작성해 올리거나 목록을 수정할 수도 있고 심지어 관리자 기능의 액세스도 할 수 있을 것입니다. (참고로, GPT에서는 현재 API Key 인증과 OAuth 인증을 지원하며, 워드프레스에서 제공하는 응용프로그램 비밀번호(Application Passwords) 기능을 사용하여 API Key를 발급받아 등록하면 간단하게 처리할 수 있습니다)

전세계 웹사이트의 40% 가량을 차지하고 있는 워드프레스를 GPT와 연결하면 어떤 재밌는 것들을 만들 수 있을까요? GPT 스토어가 열렸으니 여러분도 한번 도전해 보세요!

참고자료:

Contact

유스풀패러다임
03159 서울특별시 종로구 종로 33
그랑서울타워1, 7층

+82 02 720 5059
Contact Us

Connect

Links

유스풀패러다임의 다른 사이트들도 만나 보세요.

Usefulparadigm blog
WordPress 가이드
Landing Jekyll
Hello Gatsby