Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (6)

반응형

슬랙 소켓 모드 사용하기

이번에는 슬랙 소켓 모드를 사용해 보자. 소켓 모드는 개발 중이거나 방화벽 뒤에 배포해야 하는 내부 앱을 위한 것이다.

로컬에서 개발할 때 소켓 모드를 사용하면 ngrok를 사용하여 외부 URL을 생성할 필요가 없다.

Bolt For Python API 문서를 참고하여 개발을 진행했다.

소켓 모드 활성화

소켓을 사용하려면 소켓 모드를 활성화해야한다. Slack Apps Settings 페이지에서 Socket Mode 로 이동한다. 그리고 Enable Socket Mode 를 활성화한다.


Slack App Token 발급받기

소켓 모드를 사용하기 위해서는 Bot Token과 App Token 2개가 필요하다. Bot Token은 이전에 발급받은 토큰을 계속 사용하면 된다. 그리고 App Token은 다음 단계에 따라 생성하자.

Basic Information 으로 이동하여 아래로 스크롤하여 App-Level Tokens 섹션을 찾는다.

App-Level Tokens 섹션에서 [Generate Token and Scopes] 버튼을 누른다.

그러면 App Token 을 생성할 수 있는 Generate an app-level token 모달창이 나타난다.

Token Name 을 입력하고 [Add Scope] 버튼을 눌러 connections:write Scope를 추가한다. 그리고 [Generate] 버튼을 눌러 App Token 을 생성한다.

App Token이 생성되면 복사하여 안전한 곳에 보관한다.


환경변수에 Slack App Token 추가하기

secret.txtSLACK_APP_TOKEN를 추가한다.

SLACK_APP_TOKEN=여러분의 앱 토큰 값


secret.txt 위치는 ConfigurationsEnvFile 탭에서 확인할 수 있다.


슬랫 봇을 소켓에 연결하기

WebSocket을 통해 Slack에 연결해 보자. WebSocket 연결에는 SocketModeHandler를 사용한다. 이전에 작성한 코드에서 라인 몇 개만 수정하면 된다.

# Use the package we installed  
from slack_bolt import App  
import os  
import openai  
from slack_bolt.adapter.socket_mode import SocketModeHandler
  
# Initializes your app with your bot token  
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))  
  
openai.api_key = os.getenv("OPENAI_API_KEY")  
  
# 앱 채널의 모든 메세지를 수신  
@app.event("message")  
def say_hello(message, say):  
	  response = openai.Completion.create(  
			model="text-davinci-003",  
			prompt=f"The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\nHuman: Hello, who are you?\nAI: I am an AI created by OpenAI. How can I help you today?\nHuman: {message}",  
			temperature=0.9,
			max_tokens=150,
			top_p=1,
			frequency_penalty=0,  
			presence_penalty=0.6,  
			stop=[" Human:", " AI:"]
	  )  
	  say(response.choices[0].text.replace("AI: ", ""))  
  
# Start your app  
if __name__ == "__main__":  
    handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])  
    handler.start()

소켓 모드를 사용하면 ngrok에서 URL 생성하고 업데이트해야 하는 번거로운 작업을 할 필요가 없다.


슬랙 봇 꾸미기

이제 본격적으로 봇 이름을 정하고 이미지를 넣어보자.

슬랙 봇 앱 이름 정하기

나는 ChatGPT에게 봇 이름을 추천해 달라고 했다. 그리고 다음 이름들을 추천받았다.

행운의 부적이라는 뜻을 가진 행운이 가 마음에 들어서 봇 이름을 행운이라고 결정했다. 그리고 봇 이미지 생성은 Playground AI를 이용했다.


봇 이름과 이미지 등록하기

이제 봇 이름과 이미지을 변경해 보자. Basic Information 으로 이동한다. 그리고 스크롤을 내려서 Display Information 섹션을 찾는다.

Display Information 섹션에서 App name을 수정하고, App icon와 Short description을 입력한다. 그리고 Background color를 입력한다.

그리고 [Save Changes] 버튼을 눌러 저장한다.

그다음 App Home 으로 이동한다. 그리고 Your App’s Presence in Slack 섹션에서 App Display Name 오른쪽의 [Edit] 버튼을 누른다.

Edit App Display Name 모달창이 나타나면, Display Name(Bot Name) 에 봇 이름을 입력한다. Default username에는 영문 이름을 입력한다.

이름 변경을 완료하면 슬랙에서 앱을 삭제한 다음 다시 설치한다. 참고로 앱 삭제하고 다시 설치하게 되면 SLACK_BOT_TOKEN 이 변경된다.

마지막으로 코드에서 AI: 라고 되어 있는 텍스트를 모두 행운이:로 변경한다.

@app.event("message")
def say_hello(message, say):
	  user = message['user']
	  response = openai.Completion.create(
			model="text-davinci-003",
			prompt=f"The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\n{user}: Hello, who are you?\n행운이: I am an AI created by OpenAI. How can I help you today?\n{user}: {message}",
			temperature=0.9,
			max_tokens=150,
			top_p=1,
			frequency_penalty=0,
			presence_penalty=0.6,
			stop=[f" {user}:", " 행운이:"]
	  )
	  say(response.choices[0].text.replace("행운이: ", ""))

그러고 나서 봇에게 이름을 물어보면 “내 이름은 행운이야” 라고 대답한다.

다음에는 우리가 만든 행운이 슬랙봇을 클라우드 서버에 업로드해 보자.




or
[카카오페이로 후원하기] [토스페이로 후원하기]

반응형