Develop Note

W5100S-EVB-Pico에서 ChatGPT와 Slack API를 활용한 영어공부 Bot 만들기 본문

개발 (Ko)

W5100S-EVB-Pico에서 ChatGPT와 Slack API를 활용한 영어공부 Bot 만들기

Chalsu 2023. 4. 19. 16:18

Slack은 협업과 생산성을 향상시키기 위해 기업에서 사용하는 인기 있는 팀 커뮤니케이션 플랫폼이다. AI 기반 언어 모델인 ChatGPT를 Slack과 통합하면 다양한 작업을 자동화하고 워크플로를 개선할 수 있다.

이 글에서는 PC 환경에서 Python 요청을 사용하고 W5100S-EVB-Pico 보드 환경에서 Micropython urequest를 사용하여 Slack 앱을 설정하고 ChatGPT를 통합하는 단계를 안내한다.

주제는 영어 단어 공부로 설정했다.

Prerequisites

  • OpenAI account and API key
  • Slack account
  • W5100S-EVB-Pico
  • Thonny: Micropython environment

슬랙 앱 만들기

앱 생성 및 API 토큰 발급

ChatGPT를 Slack과 통합하는 첫 번째 단계는 새 Slack 앱을 만드는 것이다. 새 Slack 앱을 만들려면 아래 단계에 따라 진행한다.

  1. Slack API 홈페이지로 이동하여 계정에 로그인한다.
    1. https://api.slack.com/apps
  2. "앱 만들기" 버튼을 클릭하여 앱 만들기 프로세스를 시작한다.

  1. 앱의 이름을 지정하고 설치하려는 작업 공간을 선택한다.
  2. 앱을 생성하면 "기본 정보" 페이지로 리디렉션된다. 여기에서 "클라이언트 ID", "클라이언트 암호" 및 "확인 토큰"과 같은 "앱 자격 증명"을 찾을 수 있다. 이러한 자격 증명은 앱을 인증하고 Slack API와 상호 작용하는 데 사용된다.
  3. 그런 다음 왼쪽 메뉴에서 "OAuth 및 권한" 탭을 클릭한다. 여기에서 "봇 토큰" 섹션을 찾을 수 있다. "봇 사용자 추가" 버튼을 클릭하여 앱에 봇을 추가한다.
  4. 봇의 표시 이름을 설정하고 "봇 사용자 추가" 버튼을 클릭하여 변경 사항을 저장한다.
  5. 이제 생성된 새 "봇 사용자 OAuth 액세스 토큰"이 표시된다. 이 토큰은 봇을 인증하고 Slack API와 상호 작용하는 데 사용된다.

채널에 메시지 전송 테스트

아래 코드를 사용하여 채널에 메시지를 보내 내 Slack App이 잘 동작하는지 테스트 한다.

import requests
import time

# Slack API Token and URL
SLACK_API_TOKEN = "<Slack API Token>"
SLACK_API_URL = "https://slack.com/api/chat.postMessage"

# Message to send
message = {
    "channel": "#general",
    "text": "Hello, World!"
}

for i in range(0, 2):
    # Send message using Slack API
    response = requests.post(
        SLACK_API_URL,
        headers={
            "Authorization": "Bearer " + SLACK_API_TOKEN,
            "Content-type": "application/json"
        },
        json=message
    )
    # Print response
    print(response.json())
    # Wait for seconds before sending the message again
    time.sleep(30)

PC 환경에서 Python requests를 사용한 ChatGPT 프롬프트 테스트

이메일 전송에 사용했던 ChatGPT 프롬프트를 기반으로 수정

기존에 ChatGPT API를 사용하여 유용한 이메일을 전송하는 내용을 진행했었다. 이 때 사용했던 프롬프트를 기반으로 수정했다.

이메일로 전송할 내용을 생성할 때는 마크다운 문법을 기반으로 한 HTML 형식으로 요청했었고 이를 그대로 채널에 보내 보니 다음과 같이 태그가 적용되지 않았다.

확인해 보니 Slack API를 사용하여 마크다운 형태의 메시지를 게시하려면 Block이라는 형태를 사용해야 했다. 따라서 Slack API에 적합한 블록 형태로 변환해야 한다.

메시지 형태를 Slack API에 적합한 블록 형태로 변환

기존의 HTML 형식을 블록 형식으로 변환하는 방법은 몇가지가 있다.

직접 또는 라이브러리를 사용하여 변환할 수 있지만, 이 부분 역시 ChatGPT에게 요청할 수 있다.

프롬프트에 아래 내용을 추가하여 Slack API 요청에 사용할 수 있는 블록 형태의 응답을 요청했다.

# ChatGPT Prompt part
...
Please set the format as a 'blocks' value for Slack API
...
## RETURN ONLY THE MAIN RESPONSE. REMOVE PRE-TEXT AND POST-TEXT.

이런식으로 요청하면 블록 형태로 주는데, 다만 앞뒤로 설명이나 변수 이름 등을 붙여서 줘서 파싱하는 작업이 필요했다. 파싱은 비교적 간단하기 때문에 코드에서 구현하면 된다.

아래는 ChatGPT에게 요청해서 받은 응답의 예시 이다.

W5100S-EVB-Pico 보드 환경에서 Micropython urequest를 사용하여 Slack 및 ChatGPT API 사용

urequests.py 추가

urequests 라이브러리를 추가해야 한다. 라이브러리 설치 방법은 여러가지인데, 간단하게 아래 링크에서 라이브러리 파일을 복사해서 가져왔다.

Thonny 환경에서 새 파일을 만들고, 위 링크의 라이브러리 코드를 전체 복사 및 붙여넣기 한 뒤 urequests.py로 저장하면 된다.

Micropython과 호환되지 않는 코드 수정

W5100S-EVB-Pico 보드 환경에서 Slack 및 ChatGPT API를 사용하려면 마이크로 컨트롤러용으로 설계된 Python의 경량 구현인 Micropython과 호환되도록 Python 코드를 수정해야 한다.

W5100S-EVB-Pico 보드에서 이더넷을 사용하기 위한 init 함수를 추가한다.

그리고 requests를 urequests로 변경한 다음 실행해 보면서 호환되지 않는 부분을 수정해 나가면 된다.

주로 문제된 부분은 urequests를 사용할때 header와 body를 설정하는 것이었다.

아래는 urequests의 기본 동작 코드이다.

json, ujson 모두 사용 가능하다. 그리고 파라미터로 data를 사용하고, 값으로는 json 덤프 값을 준다.

from machine import Pin, SPI
import network
import utime
import urequests
import ujson

# Slack API Token and URL
SLACK_API_TOKEN = "<Slack API Token>"
SLACK_API_URL = "https://slack.com/api/chat.postMessage"

# W5x00 init
def init_ethernet():
    spi = SPI(0, 2_000_000, mosi=Pin(19), miso=Pin(16), sck=Pin(18))
    nic = network.WIZNET5K(spi, Pin(17), Pin(20))   # spi, cs, reset pin
    # Using DHCP
    nic.active(True)
    while not nic.isconnected():
        utime.sleep(1)
        # print(nic.regs())
        print('Connecting ethernet...')
    print(f'Ethernet connected. IP: {nic.ifconfig()}')

def main():
    init_ethernet()

    # Message to send
    message = {
        "channel": "#general",
        "text": "Hello, World!"
    }

    # Repeat message every 30 seconds
    for i in range(0, 1):
        # Send message using Slack API
        response = urequests.post(
            SLACK_API_URL,
            headers={
                "Authorization": "Bearer " + SLACK_API_TOKEN,
                "Content-type": "application/json"
            },
            data=ujson.dumps(message)
        )

        # Print response
        print(response.json())
        # Wait for seconds before sending the message again
        utime.sleep(30)

main()

테스트 및 결과

ChatGPT API를 사용하여 Slack 채널에 전송할 본문을 가져오고, 그것을 Slack 채널에 게시하는 코드를 작성한다.

 

전체 구조를 간략히 표현하면 다음과 같다.

 

time 라이브러리를 사용하여 주기적으로 매 시간마다 메시지를 보내도록 설정 했다.

전체 코드는 Github에 공유해 두었다.

Slack 채널에 게시된 결과는 다음과 같다.

처음에는 #general 채널로 게시하다가, #daily-english로 생성 후 그 채널로 계속 게시하고 있다.

 

Thonny에 코드를 작성하고 실행한다.

Slack 웹 또는 PC 앱에서 수신되는 메시지를 확인한다.

emoji 요청을 추가한 모습

응답 메시지 형태가 일관적이지 않아, 프롬프트 개선이 필요하다.

 

결론

ChatGPT를 Slack과 통합하면 다양한 작업을 자동화하고 워크플로를 개선할 수 있다.

이 글에서는 PC 환경에서 Python 요청을 사용하고 W5100S-EVB-Pico 보드 환경에서 Micropython urequest를 사용하여 Slack 앱을 설정하고 ChatGPT를 통합하는 단계를 안내했다.

 

이 문서에 설명된 단계를 따르면 Slack과의 ChatGPT 통합을 쉽게 설정하고 워크플로를 간소화할 수 있다.

마지막으로, ChatGPT가 이 프로젝트에 대해 작성해준 FAQ 이다. 이해하는데 도움이 될 듯 해서 남겨 둔다.

FAQ

  1. ChatGPT는 무엇이며 어떻게 작동하나요?
    • ChatGPT는 딥 러닝 알고리즘을 사용하여 자연어 프롬프트에 대해 인간과 유사한 응답을 생성하는 AI 기반 언어 모델이다. 인간 언어의 대규모 데이터 세트를 훈련하고 이 데이터를 사용하여 주어진 입력을 기반으로 새 텍스트를 생성하는 방식으로 작동한다.
  2. Slack은 무엇이며 비즈니스에서 어떻게 사용됩니까?
    • Slack은 협업 및 생산성 향상을 위해 기업에서 사용하는 팀 커뮤니케이션 플랫폼이다. 이를 통해 팀 구성원은 실시간으로 통신하고, 파일 및 문서를 공유하고, 다른 도구 및 서비스와 통합할 수 있다.
  3. Micropython이란 무엇이며 마이크로컨트롤러에서 어떻게 사용됩니까?
    • Micropython은 마이크로컨트롤러용으로 설계된 Python의 경량 구현이다. 이를 통해 개발자는 마이크로 컨트롤러와 같은 소형 장치에서 실행할 수 있는 Python 코드를 작성하여 IoT 장치 및 임베디드 시스템을 구축할 수 있다.
  4. 비즈니스에서의 ChatGPT 사용 사례에는 어떤 것이 있습니까?
    • ChatGPT는 고객 지원, 콘텐츠 제작, 언어 번역 등을 포함한 광범위한 비즈니스 응용 프로그램에 사용할 수 있다. 반복적인 작업을 자동화하고 직원들이 더 높은 수준의 작업에 집중할 수 있도록 귀중한 시간을 확보할 수 있다.
Comments