- Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (1)
- Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (2)
- Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (3)
- Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (4)
- Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (5)
- 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.txt
에 SLACK_APP_TOKEN
를 추가한다.
SLACK_APP_TOKEN=여러분의 앱 토큰 값
secret.txt
위치는 Configurations의 EnvFile 탭에서 확인할 수 있다.
슬랫 봇을 소켓에 연결하기
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("행운이: ", ""))
그러고 나서 봇에게 이름을 물어보면 **“내 이름은 행운이야”**라고 대답한다.
다음에는 우리가 만든 행운이 슬랙봇을 클라우드 서버에 업로드해 보자.
이 글이 마음에 드셨다면 투표와 리블로그를 눌러 저의 글을 더 많은 분들과 공유해주세요. 그리고 이와 같은 콘텐츠를 더 보고 싶으시다면 @anpigon을 팔로우해주세요.
읽어주셔서 감사합니다!
티스토리에서 작성하였습니다.
원본 글: https://anpigon.tistory.com/246
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
[by @anpigon] Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (6)
https://www.steemit.com/@kr-dev.cu1/246
@kr-dev.cu1님이 당신을 멘션하였습니다.
멘션을 받고 싶거나 받지 않으시려면 댓글을 남겨주세요. 빠른 시일내에 반영하도록 하겠습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit